zl程序教程

您现在的位置是:首页 >  其它

当前栏目

Hibernate5.4的环境搭建

环境 搭建
2023-09-11 14:18:14 时间

(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         <!--&lt;!&ndash; Disable the second-level cache  &ndash;&gt;-->
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 }