Hibernate初体验及简单错误排除

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: Hibernate是什么,有多少好处,想必查找这类博文的都知道,所以就不多说了。下面是我对Hibernate简单使用的一个小小的总结。与君(主要是刚入门的)共勉吧!创建的顺序创建Hibernate的配置文件创建持久化的类创建对象-关系的映射文件通过Hibe...

Hibernate是什么,有多少好处,想必查找这类博文的都知道,所以就不多说了。下面是我对Hibernate简单使用的一个小小的总结。与君(主要是刚入门的)共勉吧!

创建的顺序


  • 创建Hibernate的配置文件
  • 创建持久化的类
  • 创建对象-关系的映射文件
  • 通过HibernateAPI编写访问数据库的代码

关于详细的步骤

  • 导入Hibernate必须的jar包(hibernate-release-版本号.Final\lib\required)

  • 然后是导入MySQL的jdbc的驱动(mysql-connector-java-版本号-bin.jar)

  • 导入Junit4的jar包(junit4-版本号.jar)

Eclipse上进行环境的搭建

这里仅仅是将上面提到的那些必须的jar包进行相关的路径的配置。我这里是将Hibernate基础项目所需的jar包建立了一个自己的userlibrary。这样方便以后自己随意的导入。但是应该注意的是今后那些以来的文件的文职千万不要随意的变动了,否则可能会使得eclipse找不到。还有Mysql的JDBC的jar千万不要忘记了。另外Junit作为一个调试的使用也是必不可少的。

创建配置文件

  • 步骤一:当Hibernate-tools 没有自动生成配置文件必须的dtd文档的时候,我们需要手动的进行添加。比如

    hibernate-release-4.2.4.Final\project\hibernate-core\src\main\resources\org\hibernate\hibernate-mapping-3.0.dtd
    

    在项目的src目录上点击鼠标右键,然后使用hibernate插件,点击Hibernate Configuration File(cfg.xml)即可。选择默认的就可以了。

  • 步骤二:创建Hibernate的配置文件:
    只要是连接过MySQL数据库,都是知道这些个字段的含义的,不再过多的叙述咯。

    <property name="connection.username">root</property>
    <property name="connection.password">mysql</property>
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="connection.url">jdbc:mysql:///hibernate?useUnicode=true&amp;characterEncoding=UTF-8</property>
    <property name="connection.dialect">org.hibernate.dialect.MySQLDialect</property>
    

创建持久化类

举个简单的小例子咯。如下:


    import java.util.Date;

    /**
     * 学生类,设计原则要遵循javaBean的设计原则
     * 
     * 1、共有的类 2、属性私有 3、属性使用setter和getter封装 4、提供龚鸥的不带参数的默认的构造方法
     * 
     * @author Administrator
     *
     */
    public class Students {

        private String sname;
        private int sid;
        private Date birthday;
        private String gender;
        private String adress;

        public Students() {
        }

        public String getSname() {
            return sname;
        }

        public void setSname(String sname) {
            this.sname = sname;
        }

        public int getSid() {
            return sid;
        }

        public void setSid(int sid) {
            this.sid = sid;
        }

        public Date getBirthday() {
            return birthday;
        }

        public void setBirthday(Date birthday) {
            this.birthday = birthday;
        }

        public String getGender() {
            return gender;
        }

        public void setGender(String gender) {
            this.gender = gender;
        }

        public String getAdress() {
            return adress;
        }

        public void setAdress(String adress) {
            this.adress = adress;
        }

        public Students(String sname, int sid, Date birthday, String gender, String adress) {
            this.sname = sname;
            this.sid = sid;
            this.birthday = birthday;
            this.gender = gender;
            this.adress = adress;
        }

        @Override
        public String toString() {
            return "Students [sname=" + sname + ", sid=" + sid + ", birthday=" + birthday + ", gender=" + gender
                    + ", adress=" + adress + "]";
        }

    }

创建对象关系映射文件

同样使用插件帮助我们生成。在src目录下点击右键,new--others--hibernate,选择Hibernate XML Mapping file(hbm.xml)文件,找到我们要进行映射的学生类,然后选择默认的即可。

然后在刚才创建的hibernate.cfg.xml文件中添加一个mapping标签即可。如下
    <mapping resource="Students.hbm.xml" />

创建自己的测试用的数据库

这里我使用Navacat软件新建了一个字符集为UTF-8的数据库。名称为hibernate.

编写的第一个Hibernate的测试的小例子

- 使用Junit进行测试:
    - @Test注解:表明这是一个测试方法,一般为void的无参的throws异常的方法。
    - @Before注解:表明这是一个初始化方法,用于初始化一些信息。
    - @After注解:表明这是一个释放资源的方法,用于收尾的工作。

点击项目名,右键选择创建一个source folder.作为我们的测试所用。我的为test。然后新建一个测试类就可以了。这里我们需要测试的是我们的Students类,所以创建了一个StudentsTest就行。

编写最后的内容,使用HibernateAPI来操作数据库

可见为如下代码:

    import java.util.Date;

    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.service.ServiceRegistry;
    import org.hibernate.service.ServiceRegistryBuilder;
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;

    public class StudentsTest {

        private SessionFactory sessionFactory;
        private Session session;
        private Transaction transaction;

        @Before
        public void init() {

            // 创建配置对象
            Configuration config = new Configuration().configure();
            // 创建服务注册对象
            ServiceRegistry serviceRegister = new ServiceRegistryBuilder().applySettings(config.getProperties())
                    .buildServiceRegistry();
            // 创建会化工厂对象
            sessionFactory = config.buildSessionFactory(serviceRegister);
            // 会话对象
            session = sessionFactory.openSession();
            // 开启事务
            transaction = session.beginTransaction();

        }

        @Test
        public void testSaveStudents() {

            Students s = new Students(1, "张三", "男", new Date(), "DLUT");
            // 保存对象进入数据库
            session.save(s);
        }

        @After
        public void destory() {
            // 先提交事务
            transaction.commit();
            session.close();
            sessionFactory.close();
        }

    }

检验一下,实施的效果吧

我最后在测试方法上点击了一下,发现报错了。是org.hibernate.MappingException: Unknown Entity:Students
然后我就看了看hibernate.cfg.xml文件,发现数据库的一切都是正确的啊。也没错。
就想不明白了,然后查了查网上的相似的错误。也没有发现正确的解决办法,最后灵光一闪,肯定是映射文件出错了。那么到底是哪个呢,就一个一个的排查吧。然后我就找到了错误的根源了,不是Student.hbm.xml的错误,而是hibernate.cfg.xml中忘记了添加mapping的标签。哈哈。这次,又运行了一下,成功了。

效果图如下:
这里写图片描述
这里写图片描述

总结

本文适合刚入门的Hibernate童鞋,所以并没有一些很复杂的配置啊,和其他额外的处理啊什么的。就是为了简单。

这里面使用到了Hibernate-tools插件,帮助我们干了不少活。省事也省心了。个人建议安装JBoss的这款,包含了不少的东西呢。
这里写图片描述

好了,今天就讲到这里吧。第一篇Hibernate的博文,想必将来回头来看,定有一番回忆 :-)

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
Java Spring
Spring Boot 排除自动配置的 4 种方法,关键时刻很有用!
Spring Boot 提供的自动配置非常强大,某些情况下,自动配置的功能可能不符合我们的需求,需要我们自定义配置,这个时候就需要排除/禁用 Spring Boot 某些类的自动化配置了。
Spring Boot 排除自动配置的 4 种方法,关键时刻很有用!
|
1月前
|
缓存 Java 数据库连接
MyBatis Plus的“幻查” 规范到底要怎样使用哪几个查询函数 为什么会出现幻查?还有幻删为什么会删不掉
MyBatis Plus的“幻查” 规范到底要怎样使用哪几个查询函数 为什么会出现幻查?还有幻删为什么会删不掉
|
4月前
|
Oracle Java 关系型数据库
Generator【SpringBoot集成】代码生成+knife4j接口文档(2种模板设置、逻辑删除、字段填充 含代码粘贴可用)保姆级教程(注意事项+建表SQL+代码生成类封装+测试类)
Generator【SpringBoot集成】代码生成+knife4j接口文档(2种模板设置、逻辑删除、字段填充 含代码粘贴可用)保姆级教程(注意事项+建表SQL+代码生成类封装+测试类)
28 0
|
10月前
|
XML SQL Java
idea运行Mybatis项目出现的常见错误(编码错误等)
idea运行Mybatis项目出现的常见错误(编码错误等)
386 0
|
安全 Java API
【异常】解决springboot项目shiro框架下的AppScan漏洞会话标识未更新问题
解决springboot项目shiro框架下的AppScan漏洞会话标识未更新问题
218 0
|
SQL 监控 druid
Spring Boot 如何统计、监控 SQL 运行情况?写得太好了。。。(2)
Spring Boot 如何统计、监控 SQL 运行情况?写得太好了。。。(2)
307 0
Spring Boot 如何统计、监控 SQL 运行情况?写得太好了。。。(2)
|
SQL 监控 druid
Spring Boot 如何统计、监控 SQL 运行情况?写得太好了。。。(1)
Spring Boot 如何统计、监控 SQL 运行情况?写得太好了。。。(1)
308 0
|
SQL XML 存储
工具人不好当,至少也要会如何配置MyBatis!
本文主要介绍 MyBatis中的配置详解
97 0
|
Kubernetes Java 测试技术
SpringBoot配置升级,旧的已过时,新的人未知
SpringBoot配置升级,旧的已过时,新的人未知
539 0
|
Java Spring 容器
SpringBoot整合MybatisPlus项目存在Mapper时运行报错的问题分析与修复
本篇文章记录了在使用SpringBoot项目,集成MyBatisPlus框架后。自定义Mapper文件运行时发生报错的问题的分析与修复的过程。由于自定义的Mapper文件不受Spring的管理,从而不会将自定义的Mapper文件注册到Spring容器中,从而导致项目运行报错。在分析解决问题的过程中,将这个问题记录下来,帮助后来的人避免相关的问题。
829 0
SpringBoot整合MybatisPlus项目存在Mapper时运行报错的问题分析与修复