Hibernate5.4的环境搭建
(1)项目中添加Hibernate依赖
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.4.2.Final</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.16</version> </dependency>
(2)项目中添加Hibernate配置文件
1 <?xml version='1.0' encoding='utf-8'?> 2 3 <!DOCTYPE hibernate-configuration PUBLIC 4 "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 5 "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 6 7 <hibernate-configuration> 8 9 <session-factory> 10 11 <!-- 数据库连接设置 --> 12 13 <!--数据库连接驱动--> 14 <!--<property name="connection.driver_class">com.mysql.jdbc.Driver</property>--> 15 <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property> 16 17 <!--数据库连接地址--> 18 <!--<property name="connection.url">jdbc:mysql://localhost:3306/hibernatedemo</property>--> 19 <property name="connection.url">jdbc:mysql://localhost:3306/hibernatedemo?serverTimezone=UTC</property> 20 21 <!--数据库连接用户名--> 22 <property name="connection.username">root</property> 23 24 <!--数据库连接密码--> 25 <property name="connection.password">123456</property> 26 27 <!-- 配置内置连接池中的连接数 --> 28 <property name="connection.pool_size">5</property> 29 30 <!-- 数据库方言配置 --> 31 <!--<property name="dialect">org.hibernate.dialect.MySQLDialect</property>--> 32 <property name="dialect">org.hibernate.dialect.MySQL8Dialect</property> 33 34 <!--<!– Disable the second-level cache –>--> 35 <!--<property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>--> 36 37 <!-- 操作数据库时,是否向控制台打印Sql语句 --> 38 <property name="show_sql">true</property> 39 40 <!-- 事务自动提交 --> 41 <!--<property name="connection.autocommit">true</property>--> 42 43 <!-- 将Session与线程绑定=> 只有配置了该配置,才能使用getCurrentSession --> 44 <!--<property name="current_session_context_class">thread</property>--> 45 46 <!-- 打印Sql语句前,是否将Sql语句格式化 --> 47 <property name="format_sql">true</property> 48 49 <!-- 生成表结构的策略配置 50 update(最常用的取值): 如果当前数据库中不存在表结构,那么自动创建表结构. 51 如果存在表结构,并且表结构与实体一致,那么不做修改 52 如果存在表结构,并且表结构与实体不一致,那么会修改表结构.会保留原有列. 53 create(很少):无论是否存在表结构.每次启动Hibernate都会重新创建表结构.(数据会丢失) 54 create-drop(极少): 无论是否存在表结构.每次启动Hibernate都会重新创建表结构.每次Hibernate运行结束时,删除表结构. 55 validate(很少):不会自动创建表结构.也不会自动维护表结构.Hibernate只校验表结构. 如果表结构不一致将会抛出异常. 56 --> 57 <property name="hbm2ddl.auto">update</property> 58 59 <!-- 引入ORM映射文件 填写src之后的路径--> 60 <mapping resource="User.hbm.xml"/> 61 62 <!-- Names the annotated entity class --> 63 <!--<mapping class="cn.coreqi.entities.Users"/>--> 64 65 </session-factory> 66 67 </hibernate-configuration>
(3)添加表对象关系映射文件 || 在实体类上添加注解(推介)
表对象关系映射文件
1 <?xml version="1.0"?> 2 3 <!DOCTYPE hibernate-mapping PUBLIC 4 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 5 "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 6 7 <!-- 8 ORM元数据 表对象关系映射文件 9 package : 配置该配置文件中类所在的包. 10 --> 11 <hibernate-mapping package="cn.coreqi.entities"> 12 13 <!-- 14 class标签: 配置实体与表的关系 15 name属性: 实体类类名 16 table属性: 与实体类对应的数据表名称 17 dynamic-insert属性: 动态插入 默认值false 18 true=>如果字段值为null,不参与insert语句 19 dynamic-update属性: 动态更新 默认值false 20 true=>没改动过的属性,将不会生成到update语句中 21 --> 22 <class name="Users" table="users"> 23 <!-- id标签: 配置实体类与数据表的主键映射 24 name: 实体类中主键的属性名称 25 column: 数据表中主键的列名 26 length: 列的数据长度 27 unsaved-value(不常用): 指定主键为什么值时,当做null来处理. 28 access(强烈推荐不要用):field 那么在操作属性时,会直接操作对应的字段而不是get/set方法 29 --> 30 <id name="Id" column="Id"> 31 <!-- generator 主键生成策略 32 1.increment 数据库自己生成主键. 先从数据库中查询最大的ID值,将ID值加1作为新的主键 33 2.identity 依赖于数据的主键自增功能 34 3.sequence 序列,依赖于数据中的序列功能(Oracle). 35 4.hilo(纯了解,永远用不到) : Hibernate自己实现序列的算法,自己生成主键. (hilo算法 ) 36 5.native 自动根据数据库判断,三选一. identity|sequence|hilo 37 6.uuid 生成32位的不重复随机字符串当做主键 38 7.assigned 自己指定主键值. 表的主键是自然主键时使用. 39 --> 40 <generator class="identity"/> 41 </id> 42 <!-- property 实体类属性与数据表中列的映射 43 name : 实体类中属性名称 44 column : 数据表中列的名称 45 length : 数据长度 46 precision: 小数点后的精度 47 scale: 有效位数 48 insert(一般不用): 该属性是否加入insert语句. 49 update(一般不用): 该属性是否加入update语句. 50 not-null : 指定属性的约束是否使用 非空 51 unique : 指定属性的约束是否使用 唯一 52 type: 表达该属性的类型,可以用三种方式指定属性 53 Ⅰ: java类型 java.lang.String 54 Ⅱ: 数据库类型指定 varchar 55 Ⅲ: Hibernate类型指定 string 56 --> 57 <property name="userName" column="UserName" type="string"/> 58 <property name="passWord" column="PassWord" type="string"/> 59 <property name="enabled" column="Enabled" type="int"/> 60 </class> 61 62 </hibernate-mapping>
添加了注解的实体类(推荐)启动此种方式需要在Hibernate配置文件中启动
62 <!-- Names the annotated entity class --> 63 <!--<mapping class="cn.coreqi.entities.Users"/>-->
1 package cn.coreqi.entities; 2 3 import org.hibernate.annotations.GenericGenerator; 4 import javax.persistence.*; 5 import java.io.Serializable; 6 7 @Entity 8 @Table(name = "users") 9 public class Users implements Serializable { 10 11 @Id 12 @GeneratedValue(generator="diy") 13 @GenericGenerator(name="diy", strategy = "identity") 14 private Integer Id; 15 @Column 16 private String UserName; 17 @Column 18 private String PassWord; 19 @Column 20 private Integer Enabled; 21 22 public Integer getId() { 23 return Id; 24 } 25 26 public Users() { 27 } 28 29 public void setId(Integer id) { 30 Id = id; 31 } 32 33 public String getUserName() { 34 return UserName; 35 } 36 37 public void setUserName(String userName) { 38 UserName = userName; 39 } 40 41 public String getPassWord() { 42 return PassWord; 43 } 44 45 public void setPassWord(String passWord) { 46 PassWord = passWord; 47 } 48 49 public Integer getEnabled() { 50 return Enabled; 51 } 52 53 public void setEnabled(Integer enabled) { 54 Enabled = enabled; 55 } 56 57 @Override 58 public String toString() { 59 return "Users{" + 60 "Id=" + Id + 61 ", UserName='" + UserName + '\'' + 62 ", PassWord='" + PassWord + '\'' + 63 ", Enabled=" + Enabled + 64 '}'; 65 } 66 }
(4)编写dao文件
1 package cn.coreqi.dao.hibernate; 2 3 import cn.coreqi.entities.Users; 4 import org.hibernate.Session; 5 import org.hibernate.SessionFactory; 6 import org.hibernate.Transaction; 7 import org.hibernate.boot.MetadataSources; 8 import org.hibernate.boot.cfgxml.spi.LoadedConfig; 9 import org.hibernate.boot.registry.StandardServiceRegistry; 10 import org.hibernate.boot.registry.StandardServiceRegistryBuilder; 11 import org.hibernate.cfg.Configuration; 12 import org.springframework.stereotype.Repository; 13 14 import java.io.File; 15 16 @Repository 17 public class UsersHibernate { 18 //private SessionFactory sessionFactory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory(); 19 private final StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build(); 20 private SessionFactory sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory(); 21 public void addUsers(){ 22 Session session = sessionFactory.openSession(); 23 Transaction ts = session.beginTransaction(); 24 Users users = new Users(); 25 users.setUserName("gaoxing"); 26 users.setPassWord("mmmmm"); 27 users.setEnabled(1); 28 session.save(users); 29 ts.commit(); 30 session.close(); 31 } 32 }