美文网首页
hibernate基本配置和操作

hibernate基本配置和操作

作者: 夏天小哥哥 | 来源:发表于2019-11-18 10:46 被阅读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();
          }
      }
      

    相关文章

      网友评论

          本文标题:hibernate基本配置和操作

          本文链接:https://www.haomeiwen.com/subject/voyvictx.html