myeclipse数据库链接测试失败

myeclipse数据库连接测试失败
之前habernate找不到

img

先用其它的mysql客户端去连接数据库服务正常吗?比如用navicat等,借此排除数据库的服务异常问题。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/333115
  • 这篇博客你也可以参考下:使用myeclipse编写Hibernate小栗子
  • 除此之外, 这篇博客: 在myeclipse中基于Hibernate框架开发的入门小程序中的 Hibernate框架开发入门 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    本人最近在学习j2ee框架,学到Hibernate框架开发,花了一天时间弄懂,觉得有必要贴出来大家分享,为初学者提供一些思路。

    一、创建Hibernate框架所需环境
    ①搭建Hibernate框架
    Hibernate所需的框架只需要别忘了还有个mysql驱动也就是mysql-connector-java-5.1.18-bin.jar;这个很重要,可以自己到网上去下载,很多的啦,我在这就不赘余了。

    ②创建数据库,在本地创建一个测试数据库mysqldb,并创建一张User表。

    ③创建HibernateDemo项目
    在myeclipse中(我使用的IDE是myeclipse,很好用,很多框架都直接集成的)新建一个Web Project,名称为HibernateDemo,右键直接—>Myeclipse—>Add Hibernate Capabilities—>next—>next—>选择一个数据库驱动(数据库驱动的建立稍后再后文说)—>next—>创建一个放SessionFactory类文件的包(HibernateConf)—>finish。然后右键—>build path—>Configure build path将下载的框架放进来,还有WEB-INF下lib中的数据库驱动也放进来,这样才能加载到类路径下。至此项目创建完成。

    ④创建持久化类和设计映射文件,使用Hibernate映射文件将POJO对象映射到数据库。
    项目建好了之后,将数据库中的关系与程序中的映射关系建立好,也就是ORM(Object Relationship Mapping)映射关系。即通过POJOs(Plain Old Java Objects)类的编程模式来进行持久化,通过面向对象的方式将关系型数据库中的数据表以更为清晰的、可操作的模式展现出来。
    具体操作方法:在myeclipse中可以直接切换到DB Browser模式中,双击数据库驱动找到你创建的数据库下的User表,右键—>Hibernate Reverse Engineering—>选择存放持久化对象和映射文件的位置—>finish。

    ⑤编写hibernate.cfg.xml配置文件
    在创建项目的时候我们的hibernate.cfg.xml配置文件是自动生成的,所以该有的数据库或者映射文件列表都自动生成好了,所以改动的不多,不过比如你如果想看到操作数据库时的sql语句是否正确,你可以在配置文件中加
    <property name="show_sql">true</property>等等配置

    ⑥编写HibernateUtil.java工具类
    HibernateUtil.java工具类主要的作用是负责Hibernate的启动和负责完成存储和访问SessionFactory的工作。HibernateUtil可以很轻松的访问获取到Session,从而实现对数据的存储与获取等操作。
    主要用的一些类的方式:
    Configuration:用于创建SessionFactory
    SessionFactory:用于创建Session
    ThreadLocal:用于存储Session变量
    具体代码:

    package com.hibernate.entity;
    
    import org.hibernate.HibernateException;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    
    /*Hibernate:辅助工具类,既负责Hibernate的启动,也负责完成存储和访问SessionFactory的工作。
     * 使用Hibernate类来处理java应用程序中的Hibernate的启动是一种常见的模式
     */
    public class HibernateUtil {
        private static SessionFactory sessionfactory;
        // 创建线程局部变量threadLocal,用来保存Hibernate中的Session
        private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
        // 使用静态代码块来初始化Hibernate
        static {
            try {
                Configuration cfg = new Configuration().configure("/HibernateConf/hibernate.cfg.xml");// 读取配置文件hibernate.cfg.xml
                sessionfactory = cfg.buildSessionFactory(); // 创建SessionFactory
            } catch (Throwable ex) {
                throw new ExceptionInInitializerError(ex);
            }
        }
    
        // 获得SessionFactory的实例
        public static SessionFactory getSessionFactory() {
            return sessionfactory;
        }
    
        // 获得ThreadLocal对象管理的Session实例
        public static Session getSession() throws HibernateException {
            Session session = (Session) threadLocal.get();
            if (session == null || !session.isOpen()) {
                // 通过sessionfactory创建session
                if (sessionfactory == null) {
                    rebuildSessionFactory();
                }
                session = (sessionfactory != null) ? sessionfactory.openSession()
                        : null;
                threadLocal.set(session);
            }
            return session;
        }
    
        // 关闭Session实例
        public static void closeSession() throws HibernateException {
            Session session = threadLocal.get();
            threadLocal.set(null);
            if (session != null) {
                session.close();
            }
        }
    
        // 关闭缓存和连接池
        public static void shutdown() {
            sessionfactory = getSessionFactory();
            if (sessionfactory != null) {
                sessionfactory.close();
            }
        }
    
        // 重建SessionFactory
        private static void rebuildSessionFactory() {
            try {
                Configuration cfg = new Configuration()
                        .configure("/HibernateConf/hibernate.cfg.xml");
                sessionfactory = cfg.buildSessionFactory();
            } catch (Exception e) {
                System.out.println("SessionFactory build error");
                e.printStackTrace();
            }
    
        }
    
    }
    

    注:Configuration在创建SessionFactory之前需要先通过configure()方法读取配置文件hibernate.cfg.xml,如果你直接将配置文件放在类加载路径下(也就是src)那么直接调用configure(“/hibernate.cfg.xml”)方法就可以了,但是如果你是放在比如包HibernateConf下面的那么Configuration实例就会根据参数去找了,所以这是你要将你的路径作为参数即configure(“/HibernateConf/hibernate.cfg.xml”)。

    ⑦编写DAO接口UserDAO

    package com.hibernate.DAO;
    
    import com.hibernate.entity.User;
    
    public interface UserDAO {
        void save(User user); // 添加用户
    
        User findById(int id); // 查找用户
    
        void delete(User user); // 删除用户
    
        void update(User user); // 修改用户信息
    
    }
    

    ⑧编写DAO层实现类UserDAOImpl

    package com.hibernate.DAO;
    
    
    import org.hibernate.Session;
    import org.hibernate.Transaction;
    
    import com.hibernate.entity.HibernateUtil;
    import com.hibernate.entity.User;
    
    public class UserDAOImpl implements UserDAO{
    
        //新增用户
        public void save(User user) {
            Session session = HibernateUtil.getSession();   //获取session
            Transaction tx = session.beginTransaction();    //创建事务
            try{
                session.save(user);
                tx.commit();    //提交事务
            }catch(Exception e){
                System.out.println("保存失败!");
                e.printStackTrace();
                tx.rollback();  //事务回滚
            }finally{
                HibernateUtil.closeSession();   //关闭Session资源
            }
        }
    
        public User findById(int id) {
            User user = null;
            Session session = HibernateUtil.getSession();
            Transaction tx = session.beginTransaction();
            try{
                user = session.get(User.class, id);
                tx.commit();        //提交事务
            }catch(Exception e){
                System.out.println("查找失败");
                e.printStackTrace();
                tx.rollback();      //回滚事务
            }finally{
                HibernateUtil.closeSession();   //关闭Session资源
            }
            return user;
        }
    
        public void delete(User user) {
            Session session = HibernateUtil.getSession();
            Transaction tx = session.beginTransaction();
            try{
                session.delete(user);
                tx.commit();
            }catch(Exception e){
                System.out.println("删除用户失败");
                e.printStackTrace();
                tx.rollback();
            }finally{
                HibernateUtil.closeSession();
            }
        }
    
        public void update(User user) {
            Session session = HibernateUtil.getSession();
            Transaction tx = session.beginTransaction();
            try{
                session.update(user);
                tx.commit();
            }catch(Exception e){
                System.out.println("用户信息更新失败");
                e.printStackTrace();
                tx.rollback();
            }finally{
                HibernateUtil.closeSession();
            }
        }
    
    }
    

    ⑨编写测试类UserTest

    package com.hibernate.DAO;
    
    import org.junit.Test;
    
    import com.hibernate.entity.User;
    
    //测试用例
    public class UserTest {
    
        @Test
        public void UserSave(){
    
            UserDAO userdao = new UserDAOImpl();
            try{
                User user = new User();
                user.setName("test1");
                user.setPassword("123456");
                user.setType(1);
                user.setUserId(1);
                userdao.save(user);
            }catch(Exception e){
                System.out.println("这出错了,添加失败");
                e.printStackTrace();
            }
        }
    }
    

    程序运行结果:

    备注:
    建数据库驱动
    切换到DB Browser视图,右键new—>填写驱动信息,导入数据库驱动包就可以了


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^