一、开发步骤
1.1新建java项目
1.2项目下见一个lib文件加用于存放所需jar包
hibernate-release-4.2.21.Finallib equired*.jar、mysql驱动包及一个junit4.10.jar包
1.3实体类及实体类映射文件的编写
package edu.aeon.hibernate.bean; /** * [说明]:学生实体类 * @author aeon(qq:1584875179) */ import java.sql.Date; public class Student{ //学生编号 private Integer stuId; //学生姓名 private String stuName; //学生密码 private String stuPassword; //学生性别 private boolean stuSex; //学生年龄 private Integer stuAge; //学生出生日期 private Date stuBirthday; //无参构造 public Student() { } //有参构造 public Student(String stuName, String stuPassword, boolean stuSex, Integer stuAge, Date stuBirthday) { super(); this.stuName = stuName; this.stuPassword = stuPassword; this.stuSex = stuSex; this.stuAge = stuAge; this.stuBirthday = stuBirthday; } //setter/getter public Integer getStuId() { return stuId; } public void setStuId(Integer stuId) { this.stuId = stuId; } public String getStuName() { return stuName; } public void setStuName(String stuName) { this.stuName = stuName; } public String getStuPassword() { return stuPassword; } public void setStuPassword(String stuPassword) { this.stuPassword = stuPassword; } public boolean isStuSex() { return stuSex; } public void setStuSex(boolean stuSex) { this.stuSex = stuSex; } public Integer getStuAge() { return stuAge; } public void setStuAge(Integer stuAge) { this.stuAge = stuAge; } public Date getStuBirthday() { return stuBirthday; } public void setStuBirthday(Date stuBirthday) { this.stuBirthday = stuBirthday; } }
Student.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Generated 2019-4-30 15:14:09 by Hibernate Tools 3.4.0.CR1 --> <hibernate-mapping> <!--name要全局限定名(包名+类名) table:表名 --> <class name="edu.aeon.hibernate.bean.Student" table="STUDENT"> <!-- name:属性名 type:属性所对应的类型 --> <id name="stuId" type="java.lang.Integer"> <!-- column->name:表字段 --> <column name="STUID" /> <!-- 主键的生成策略 此处native:为根据数据库底层生成自增长的序列 --> <generator class="native" /> </id> <property name="stuName" type="java.lang.String"> <column name="STUNAME" /> </property> <property name="stuPassword" type="java.lang.String"> <column name="STUPASSWORD" /> </property> <property name="stuSex" type="boolean"> <column name="STUSEX" /> </property> <property name="stuAge" type="java.lang.Integer"> <column name="STUAGE" /> </property> <property name="stuBirthday" type="java.sql.Date"> <column name="STUBIRTHDAY" /> </property> </class> </hibernate-mapping>
1.4hibernate.cfg.xml配置文件的编写
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- 一、数据库连接的(包括驱动类、url、用户名及密码)主配置信息 [start]--> <!-- 1.数据库连接驱动类 --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <!-- 2.数据库连接url(资源定位:连那一台上的那一个端口下的那一个数据库)、此处连本地、3306端口这两个均为默认,可省略 jdbc:mysql:jdbc协议下的mysql子协议 db_test:要连接的数据库名(即:create database db_test) --> <property name="connection.url">jdbc:mysql://localhost:3306/db_test</property> <!-- 3.要连接数据库的用户名 --> <property name="connection.username">root</property> <!-- 4.要连接数据库的用户名 所对应的密码--> <property name="connection.password">root</property> <!-- 数据库连接的主配置信息 [/end]--> <!-- 二、数据库连接的一些辅助(是否在控制台打印sql语句、打印的sql语句是否要进行格式化及一些创建表的策略)配置信息[start] --> <!-- 1.数据库方言 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 2.是否在控制台打印sql语句 true:打印 |false不打印 --> <property name="show_sql">true</property> <!-- 3.打印出来的sql语句是否要格式化 true:格式化|false:不格式化 --> <property name="format_sql">true</property> <!-- 4.创建数据库表策略 create:每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。 create-drop:每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。 update:最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等 应用第一次运行起来后才会。 validate:每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。 --> <property name="hbm2ddl.auto">update</property> <!-- 数据库连接的一些辅助配置信息[/end] --> <!-- 三、引入实体类到关系数据库(实体类-表|属性-字段)的映射文件[start] --> <mapping resource="edu/aeon/hibernate/bean/Student.hbm.xml"/> <!-- 引入实体类到关系数据库的映射文件[/end] --> </session-factory> </hibernate-configuration>
1.5测试类的编写
package edu.aeon.hibernate.test; import java.sql.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.Test; import edu.aeon.hibernate.bean.Student; /** * [说明]:测试类 * @author aeon(qq:1584875179) * */ public class HibernateTest { @Test public void saveTest() { Configuration configuration=new Configuration().configure(); ServiceRegistry serviceRegistry=new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry(); SessionFactory sessionFactory=configuration.buildSessionFactory(serviceRegistry); Session session=sessionFactory.openSession(); Student student=new Student("zhangsan", "zhangsan110", true, 22,new Date(new java.util.Date().getTime())); Transaction transaction = session.beginTransaction(); session.save(student); transaction.commit(); session.close(); } }
测试结果截图:
数据库信息截图: