zoukankan      html  css  js  c++  java
  • hibernate框架(1)---Hibernate增删改查

    Hibernate增删改查

    1.首先我们要知道什么是Hibernate

        Hibernate是一个轻量级的ORMapping对象。主要用来实现Java和数据库表之间的映射,除此之外还提供数据查询和数据获取的方法,

    可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间,解放编程人员95%的任务。

    2.什么是ORM  Object-Relational-Mapping对象关系映射

       ORM:是通过java对象映射到数据库表,通过操作Java对象可以完成对数据表的操作。(假如你用的是Dbutils那么还需要在Java类中写sql语句,而orm就不用)

    Hibernate是一个完全的ORM框架只需要对对象的操作即可生成底层的SQL。

    接下来直接进入主题:

    先看看使用hibernate的基本流程!下面是简单的流程图

    1.创建项目:

    用myeclipse创建一个web project

    2.导入hibernate相关的架包到项目

    第三步: 配置文件hibernate

    hibernate的配置有两种形式!

    一种是使用hibernate.properties文件!

    另一种是使用hibernate.cfg.xml文件!这里我们使用hibernate.cfg.xml进行配置

        a. 采用properties方式,必须手动编程加载hbm文件或者持久化类

        b. 采用XML配置方式,可以配置添加hbm文件

     在src目录下新建一个xml文件,名称为hibernate.cfg.xml(当然,你也可以不叫这个名称,不过在代码中要作相应的修改),拷贝如下内容:

    <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
          
      <hibernate-configuration>
          <!-- 配置会话工厂   hibernate 核心  管理数据库连接池 -->
          <session-factory>
              <!-- 1.配置数据库连接参数 -->
             <!-- 1.1配置jdbc四个基本连接参数 -->
             <property name="hibernate.connection.username">root</property>
             <property name="hibernate.connection.password">root</property>
             <property name="hibernate.connection.url">jdbc:mysql:///hibernateexec</property>
             <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
             <!-- 1.2配置 hibernate使用的方言 -->
             <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
         
             <!-- 2.配置其他相关属性 -->
             <!-- 2.1自动建表 -->
             <property name="hibernate.hbm2ddl.auto">update</property>
             <!-- 2.2在日志中输出sql -->
             <property name="hibernate.show_sql">true</property>    
             <!-- 2.3格式化sql -->
             <property name="hibernate.format_sql">true</property> 
             
             <!-- 开启事务 -->
             <property name="hibernate.connection.autocommit">true</property>
             
             <!-- 配置c3p0数据库连接池 -->
             <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
             
             <property name="hibernate.c3p0.min_size">5</property>
             <property name="hibernate.c3p0.max_size">50</property>
             <property name="hibernate.c3p0.timeout">120</property>
             <property name="hibernate.c3p0.idle_test_period">3000</property>
                        
             <!-- 3.加载映射文件 -->
             <mapping resource="com/study/model/Customer.hbm.xml"/> 
             
         </session-factory>    
     
     </hibernate-configuration>
    配置hibernate.cfg.xml

    这里提醒一点:customer表你可以不用去手动创建,但是数据库hibernateexec是要你手动创建的

    第四步.创建实体和映射文件 

    public class Customer {
    
        private int id;
        private String name;
        private int age;
        private String city;
        private String addr;
    }
    /*
     * 提供set和get方法
     */
    Customer 实体

    映射文件和实体对象在同一个包下:

     <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE hibernate-mapping PUBLIC 
          "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
          "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
      <hibernate-mapping>
          <!-- 完成实体类 和数据表的映射 -->
          <!-- 1.类与表的映射 -->
          <!-- 
              name 要映射的完整类名
             table 映射到数据库的表名
             catalog 映射到数据库的名字
          -->
         <class name="com.study.model.Customer" table="customer" catalog="hibernateexec">
              <!-- 2.类中属性  和表中 数据列的映射  -->
               <!-- 2.1主键 -->
               <!-- 
                   name 属性名(类中)
                   column  列名(表中)
                   type  数据类型
                -->
              <id name="id" column="id" type="int">
                  <!-- 配置主键生成策略  主键自动增长-->
                  <generator class="identity"></generator>
              </id>
              <!-- 2.2 普通属性 -->
              <!-- 
                  name 属性名(类中)
                  column 列名(表中)
                  type 数据类型(也可以直接写String)
               -->
              <property name="name" column="name" type="java.lang.String"></property>    
              <property name="age" column="age" type="int"></property>
              <!-- 也可以分开写 -->
              <property name="city">
                  <column name="city" sql-type="varchar(20)"></column>
              </property>
              <!-- 如果什么都不写,那就默认类的属性名和数据库中的列名一致都为addr,类型为varchar -->
           <property name="addr"></property> 
                
         </class>
         
     </hibernate-mapping>
    Customer.hbm.xml

    第五步:创建SessionFactory对象

    第六步:获取Session对象进行相关操作

    第五步和第六步我和在一起,第六步我们发现不论增删改查前面四步都是一样的,我们其实可以提取到一个工具类,再来调用这样加快效率。

    import java.util.List;
     import org.hibernate.Query;
     import org.hibernate.SQLQuery;
     import org.hibernate.Session;
     import org.hibernate.SessionFactory;
     import org.hibernate.Transaction;
     import org.hibernate.cfg.Configuration;
     import org.junit.Test;
     
     import com.study.model.Customer;
     
     public class HibernateTest { 
            /*
             * 保存数据
             */
             @Test
             public void testInsert() {
                 // 实例化配置对象 加载映射文件 加载 hibernate.cfg.xml
                 Configuration configuration = new Configuration().configure();
                 // 创建会话工厂
                 SessionFactory sessionFactory = configuration.buildSessionFactory();
                 // 创建会话
                 Session session = sessionFactory.openSession();
                 // 开启事务
                 Transaction transaction = session.beginTransaction();
                 // 编写自己的逻辑代码
                 Customer customer = new Customer();
                customer.setName("小黄");
                customer.setAge(40);
                customer.setCity("北京");
                 // 直接保存
                session.save(customer);
     
                 // 提交事务
                 transaction.commit();
                 session.close();
                 sessionFactory.close();
             } 
         
         //查询所有的
         @Test
         public  void testFindAllByHQL(){
             // 实例化配置对象 加载映射文件 加载 hibernate.cfg.xml
             Configuration configuration = new Configuration().configure();
             // 创建会话工厂
             SessionFactory sessionFactory = configuration.buildSessionFactory();
             // 创建会话
             Session session = sessionFactory.openSession();
             // 开启事务
             Transaction transaction = session.beginTransaction();
             
             //编写HQL语句(面向类和属性的查询 
             String hql =" from Customer";//这里是Customer不是表名 是类名 查询Customer
             Query query =session.createQuery(hql);
             
             List<Customer> customers=query.list();
             System.out.println(customers);
             
             
             // 提交事务
             transaction.commit();
            session.close();
             sessionFactory.close();
         }
     
         // 删除
         @Test
         public void testDelete() {
             // 实例化配置对象 加载映射文件 加载 hibernate.cfg.xml
             Configuration configuration = new Configuration().configure();
             // 创建会话工厂
             SessionFactory sessionFactory = configuration.buildSessionFactory();
             // 创建会话
             Session session = sessionFactory.openSession();
             // 开启事务
             Transaction transaction = session.beginTransaction();
             
            Customer customer =new Customer();
            customer.setId(2);
             session.delete(customer);
             
    
             // 提交事务
             transaction.commit();
             session.close();
             sessionFactory.close();
        }
     
         // 修改
         @Test
         public void testUpdate() {
             // 实例化配置对象 加载映射文件 加载 hibernate.cfg.xml
             Configuration configuration = new Configuration().configure();
             // 创建会话工厂
             SessionFactory sessionFactory = configuration.buildSessionFactory();
             // 创建会话
             Session session = sessionFactory.openSession();
             // 开启事务
             Transaction transaction = session.beginTransaction();
     
             Customer customer = (Customer) session.get(Customer.class, 2);
             customer.setCity("杭州");
             session.update(customer);
     
             // 提交事务
             transaction.commit();
             session.close();
             sessionFactory.close();
     
         }
     
         // 查询 根据id查询
         @Test
         public void testFindById() {
             // 实例化配置对象 加载映射文件 加载 hibernate.cfg.xml
             Configuration configuration = new Configuration().configure();
             // 创建会话工厂
             SessionFactory sessionFactory = configuration.buildSessionFactory();
             // 创建会话
             Session session = sessionFactory.openSession();
             // 开启事务
             Transaction transaction = session.beginTransaction();
     
             Customer customer = (Customer) session.get(Customer.class, 1);
             System.out.println(customer);
     
             // 提交事务
             transaction.commit();
             session.close();
             sessionFactory.close();
         }
     }
    hibernate增删改查

    运行效果:当你运行第一个增加用户的时候,运行结束数据库会自动创建customer表格,和往表格里添加数据。

     这样就通过hibernate进行基础的增删改查了。

    本文就到这里了,有不足之处欢迎大家指点,谢谢!

  • 相关阅读:
    虚拟主机导入MySQL出现Unknown character set: ‘utf8mb4’
    解决导入MySQL数据库提示"Unknown character set: 'utf8mb4'"错误
    织梦dedecms如何去除版权中的Power by DedeCms
    发送邮件常见出错代码及简单解决方法
    Hadoop集群配置(最全面总结)
    大数据下的数据分析平台架构
    跟上节奏 大数据时代十大必备IT技能
    Hive深入浅出
    深入解析:分布式系统的事务处理经典问题及模型(转载分享)
    数据分析≠Hadoop+NoSQL
  • 原文地址:https://www.cnblogs.com/qdhxhz/p/6478317.html
Copyright © 2011-2022 走看看