hibernate基本配置和操作

2019-11-18  本文已影响0人  夏天小哥哥

Configuraction介绍

Configuraction一般用于加载hibernate配置文件

SeesionFactory介绍

SessionFactory类是创建Session对象的工厂,构建SessionFactory很消耗资源,一般情况下一个应用中只需要初始化一个SessionFactory对象

操作步骤

  1. 创建数据库和表

    create database hibernate;
    use hibernate;
    create table User(
        `u_id` bigint auto_increment comment '用户ID', 
        `u_name` varchar comment '用户姓名', 
        `u_age` int comment '用户年龄',
        constraint primary key(u_id)
    ) comment '用户表';
    
  2. 编写实体类JOPO

    // 使用lombok
    @Data
    class User{
        public long u_id;
        public String u_name;
        public Integer u_age;
    }
    
  3. 创建hibernate.cfg.xml配置文件,并编写连接数据库的配置

    <?xml version="1.0" encoding="UTF=8"?>
    <!-- 指定Hibernate配置文件的DTD信息 -->
    <!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
        <session-factory>
         <!-- 连接数据库的基本配置 -->   
            <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
            <property name="hibernate.connection.username">root</property>
            <property name="hibernate.connection.password">123456</property>
            <property name="hibernate.connection.url">jdbc:mysql//localhost/hibernate</property>
            <!-- 指定数据库方言 -->
            <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
            <!-- 显示Hibernate持久化操作所生成的SQL -->
            <property name="hibernate.show_sql">true</property>
            <!-- 将SQL脚本进行格式化后再输出 -->
            <property name="hibernate.format_sql">true</property>
            
            <!-- 配置阿里巴巴 Druid 连接池 -->
            <property name="hibernate.connection.provider_class">
             com.alibaba.druid.support.hibernate.DruidConnectionProvider
            </property>
            
              <!-- 配置初始化大小、最小、最大 -->
            <property name="initialSize">1</property>
            <property name="minIdle">1</property>
            <property name="maxActive">20</property>
            <!-- 配置获取连接等待超时的时间 -->
            <property name="maxWait">60000</property>
            <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
            <property name="timeBetweenEvictionRunsMillis">60000</property>
            <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
            <property name="minEvictableIdleTimeMillis">300000</property>
         <!-- 加载所有的映射文件 -->
            <mapper resource="mapper/user.hbm.xml"/>
        </session-factory>
    </hibernate-configuration>
    
  1. 创建实体类和数据库表的hibernate的mapper(映射)配置文件

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
        <class name="com.zhou.domain.User" table="user">
            <id name="u_id" column="u_id">
                <generator class="native"></generator>
            </id>
            <property name="u_name" column="u_name"></property>
            <property name="u_age" column="u_age"></property>
        </class>
    </hibernate-mapping>
    
  2. 编写测试类

    // 使用Junit
    class HibernateTest{
        @Test
        public void hibernateCreate(){
          // 加载配置文件
          Configuration config = new Configuration().configure();
          // 创建SessionFactory工厂类
          SessionFactory sessionFactory = config.buildSessionFactory();
          // 通过SessionFactory工厂类创建Session对象
          Session session = sessionFactory.openSession();
          // 创建对象并插入数据库
          User user = new User();
          user.setUname("li");
          session.save(user);
          // 释放资源
          session.colse();
          sessionFactory.colse();
        }
    }
    
  1. 抽取Utils类

    // 使用Junit
    class HibernateUtils{
        public static final SessionFactory sessionFactory;
        static {
          // 加载配置文件
          Configuration config = new Configuration().configure();
          // 创建SessionFactory工厂类
          sessionFactory = config.buildSessionFactory();
        }
        /**
         * 获取Session对象
        */
        public static Session getSession(){
            return sessionFactory.openSession();
        }
    }
    
  1. 测试类的CRUD

    // 使用Junit
    class HibernateTest{
        /**
         * 插入操作
        */
        @Test
        public void hibernateCreate(){
          // 获取Session对象
          Session session = HibernateUtils.getSession();
          // 创建对象并插入数据库
          User user = new User();
          user.setUname("li");
          session.save(user);
          // 释放资源
          session.colse();
          // 建议是服务关闭的时候在关闭链接对象
          HibernateUtils.SessionFactory.colse();
        }
        
        /**
        * 查询操作
        */
        public void hibernateReadOne(){
          // 获取Session对象
          Session session = HibernateUtils.getSession();
          // 查询主键对应的一条记录
       session.get(User.class, 1L);
          // 释放资源
          session.colse();
          // 建议是服务关闭的时候在关闭链接对象
          HibernateUtils.SessionFactory.colse();
        }
        
        /**
         * 更新操作,需要开启事务
        */
         public void hibernateUpdate(){
          // 获取Session对象
          Session session = HibernateUtils.getSession();
          // 开启事务
          Transaction transaction = session.benginTransaction();
          // 更新操作,但是这种通过主键更新,如果对象中没有设置值,那数据库更新的字段也会更新为null
          User user = new User();
          user.setU_id(1L);
          user.setUname("li");
          session.update(user);
          // 提交事务
          transaction.commit();
          // 释放资源
          session.colse();
          // 建议是服务关闭的时候在关闭链接对象
          HibernateUtils.SessionFactory.colse();
        }
        
        /**
         * 更新操作,更新操作,需要开启事务
        */
         public void hibernateUpdate(){
          // 获取Session对象
          Session session = HibernateUtils.getSession();
          // 开启事务
          Transaction transaction = session.benginTransaction();
          // 更新操作,先查询在更新的操作不会把已有的值更新为null
          User user = session.get(User.class, 1L);
          user.setUname("哈");
          session.update(user);
          // 提交事务
          transaction.commit();
          // 释放资源
          session.colse();
          // 建议是服务关闭的时候在关闭链接对象
          HibernateUtils.SessionFactory.colse();
        }
        
        /**
         * 删除
        */
        public void hibernateDelete(){
          // 获取Session对象
          Session session = HibernateUtils.getSession();
          // 开启事务
          Transaction transaction = session.benginTransaction();
          // 删除
          User user = new User();
          user.setU_id(2L);
          // 提交事务
          transaction.commit();
          // 释放资源
          session.colse();
          // 建议是服务关闭的时候在关闭链接对象
          HibernateUtils.SessionFactory.colse();
        }
    }
    
上一篇下一篇

猜你喜欢

热点阅读