Jimoshi_Hibernate 框架学习(一)--session的CRUD的基本操作、OID对象映射标示符和主键的生成的策略

本文介绍Hibernate框架的基础知识,包括其作为对象关系映射框架的特点、如何配置及使用Hibernate进行数据持久化,并展示了基本的CRUD操作。

Jimoshi成长经历:前面的笔记后面再慢慢整理-------方便自己

目录:了解什么是Hibernate、Hibernate框架学习、session的CRUD的基本操作、OID对象映射标示符和主键的生成的策略ss

Hibernate 框架学习(一):
—、了解什么是Hibernate

    1、Hibernate是一个开放源代码的对象关系映射框架
    它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库(对象关系映射)

    2、Hibernate框架中数据持久化机制
    在业务程序与数据库之间,Hibernate 框架使用Session会话,来完成数据的提交、更新、删除、查询等等。总之,数据持久化是解决程序与数据库之间交互访问的问题,使程序不直接访问数据库,而是直接访问Session会话,然后由Session会话与数据库“打交道”。只要确保,程序每次访问Session中的数据时,与数据库中的数据保持一致,就不会出现错误。

    我的注解:POJO是什么?ORM是什么?(后面自己去了解一下)

二、Hibernate框架学习

    1、JUNIT单元测试(步骤)

①配置使用Hibernate,添加Hibernate的jar包和数据库驱动(maven仓库中下载,添加到pom.xml中)
代码示例:
<dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-core</artifactId>
   <version>4.3.5.Final</version>
</dependency>
<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>5.1.18</version>
</dependency>

②配置xml文件(hibernate.cfg.xml)
代码示例:
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
   <session-factory>
<!-- 配置数据库连接 -->
   <!-- JDBC驱动程序 -->
   <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
   <!-- 连接数据库的URL mysql对应建立hibernate数据库-->
   <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate</property>
   <property name="Connection.useUnicode">true</property>
   <property name="connection.characterEncoding">utf8</property>
   <!-- 连接的登录名和密码-->
   <property name="hibernate.connection.username">root</property>
   <property name="hibernate.connection.password">123</property>
   <!-- 方言 -->
   <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
   <!-- 控制台能够输出SQL语句 -->
   <property name="hibernate.show_sql">true</property>
   <!-- 帮你生成对应的表,或者是表的更新 -->
   <property name="hibernate.hbm2ddl.auto">update</property>
   </session-factory>    
</hibernate-configuration>

③建立对应实体Student类对象并且对实体进行XML文件(Student.hbm.xml)配置
代码示例:

 ③.1、Student实体类建立
 private int id;
 private String name;
(进行get,set)

 ③.2、Student.hbm.xml文件配置(官方推荐注解方式,先熟悉XML文件配置)
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- 对哪个包下面的实体进行映射 -->
<hibernate-mapping package="com.zr.model">
<!-- table表名-->
    <class name="Student" table="t_student">
       <id name="id" column="sid">
          <!-- 主键策略的配置 -->
            <generator class="native"></generator>
       </id>
       <property name="name" column="sname"></property>
    </class>
</hibernate-mapping>

④将映射文件加入到session-factory配置(hibernate.cfg.xml)中
<mapping resource="com/zr/model/Student.hbm.xml" />

⑤最后创建com.zr.test包建立Test类使用Hibernate的一些接口将数据持久化然后进行测试
数据持久化步骤(1.读取配置文件 2.创建SessionFactory 3.创建session 4.在session当中做CRUD的操作)
代码示例:
public class Test {
    public static void main(String[] args) {
    //读取配置文件,创建sessionFactory工厂
    Configuration  config  = (Configuration) new Configuration().configure();
    //config.buildSessionFactory()可以使用,但不建议
    // 注册服务
    ServiceRegistry  sr =  new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build();           
    //创建工厂
    SessionFactory  sf = config.buildSessionFactory(sr);
    //创建session
    Session  session  = sf.openSession();
    //在session 中做CRUD的操作  数据进行持久化
      //通过session 开启事务
      session.beginTransaction();
        //-----------------CRUD操作
        //测试数据是否添加到数据库表中
        Student s= new Student();
        s.setSname("Jimoshi");
        session.save(s);
        //-----------------CRUD操作
      //事务的提交
      session.getTransaction().commit();
      //关闭session
      session.close();
      //关闭工厂
      sf.close();
    }        
   }

 2、注解方式配置
①建立对应实体Teacher类对象
代码示例:
// 将一个类声明为一个实体bean(即一个持久化POJO类)
@Entity
//注解声明了该实体bean映射指定的表(table)
@Table(name="t_teacher")
public class Teacher {
  private  int tid;
  private  String tname;
// 注解声明了该实体bean的标识属性(对应表中的主键)注:对于属性的注解 一定是在get方法上面
@Id
//注解声明了主键的生成策略,s_native设置主键
@GeneratedValue(generator="s_native")
// strategy 指定生成的策略(JPA定义的)
@GenericGenerator(name="s_native",strategy="native")
public int getTid() {
    return tid;
}
public void setTid(int tid) {
    this.tid = tid;
}
//注解声明了属性到列的映射
@Column(name="t_name")
public String getTname() {
    return tname;
}
public void setTname(String tname) {
    this.tname = tname;
}
}
②将映射文件加入到session-factory配置(hibernate.cfg.xml)中
<mapping class="com.zr.model.Teacher"/>
③测试(在com.zr.test包下面的Test类的CRUD操作中添加测试)
代码示例:
//测试数据是否添加到对应数据库表中
代码示例:
 Teacher t = new Teacher();
 t.setTname("jimoshi");
 session.save(t);

三、session的CRUD的基本操作(JUNIT单元测试)

 
 1、对SessionFactory进行工具类封装(建立一个com.zr.util包在创建一个HibernateUtil工具类)
//通过该工具类生产出唯一一个SessionFactory( 采用单例模式)
代码示例:
public class HibernateUtil {
  //定义了一个静态的属性,这个属性会在加载类的时候进行初始化.
  private static final SessionFactory sf = bulidSessionFactory();
  //调用了另一个私有的静态方法,这个静态方法加载了Hibernate的配置,然后用这个配置建立了一个SessionFactory
  private  HibernateUtil(){};
  private  static SessionFactory bulidSessionFactory(){
     //读取配置文件,创建sessioFactory工厂
     Configuration  config  = (Configuration) new Configuration().configure();
     //注册服务
     ServiceRegistry  sr =  new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build();
     return  config.buildSessionFactory(sr);
     }
  public static SessionFactory getSf() {
     return sf;
    }
}

 2、使用JUNIT
①在pom.xml中引入JUNIT
代码示例:
<dependency>
   <groupId>junit</groupId>
   <artifactId>junit</artifactId>
   <version>4.11</version>
</dependency>

②创建一个com.zr.dao包建立对应StudentDao的学生类的实体操作并为Dao添加测试类
步骤:右键StudentDao --->new--->other--->JUnit Test Case--->Source folder 后面的Browse选中struts/src/main/java--->next--->选取测试类--->finish

③session 的CRUD操作
代码示例:
public class StudentDaoTest {
   //使用HibernateUtil
   private  SessionFactory  sf = HibernateUtil.getSf();
   private  Session  session;
   @Before
   public  void setSession(){
    // 通过开启事务
   session =  sf.openSession();
   session.beginTransaction();
    }
   @After
   public  void  closeSessionandSf(){
   //事务的提交
    session.getTransaction().commit();
   //关闭session
    session.close();
   //关闭工厂
    sf.close();
    }
    //增加,使用save方法
   @Test
   public void testAddStudent() {
     Student s = new Student();
     s.setSname("wwj");
     session.save(s);
}
    //删除,先通过ID来查询,在调用delete方法删除对象
   @Test
   public void testDeleteStudent() {
   Student  s  =  (Student) session.get(Student.class, Integer.valueOf(1));
   session.delete(s);
}
   //修改,先通过ID来查询,直接对对象进行赋值操作
   @Test
   public void testUpdateStudent() {
   Student  s  =  (Student) session.get(Student.class, Integer.valueOf(2));
   s.setSname("xyz");
}
   //查询,初次接触HQL(HQL面向对象语句思维方式)
   @Test
   public void testSelectStudents() {
   //String hql = from Student student where id=?
   String  hql  = "from Student";
   Query  query  =  session.createQuery(hql);
   List<Student> ss  =query.list();
   for (Student student : ss) {
     System.out.println(student.getSname());
    }
}
}

四、OID对象映射标示符和主键的生成的策略

 1、概念(session 缓存的概念,对象映射标示OID)
 
 2、测试对象映射标识符(StudentDao中的CRUD操作中添加)
 代码示例:
  @Test
  public void testOID(){
  Student s1 = (Student) session.get(Student.class, Integer.valueOf(3));
  Student s2 = (Student) session.get(Student.class, Integer.valueOf(4));
  Student s3 = (Student) session.get(Student.class, Integer.valueOf(3));
     System.out.println(s1==s2);
     System.out.println(s1==s3);    
    }
 3、主键生成的策略(xml文件配置的主键策略在Student.hbm.xml中配置,注解在Teacher类中配置,保证数据唯一实例)
 ①increment(通过Hibernate自身、自动以递增方式生成主键策略)
 ②identity(采用数据库提供的主键生成机制、orcale数据库不支持)
 ③sequence(采用数据库提供的主键生成机制、只支持oracle)
 ④hilo(算法实现的主键生成机制)
 ⑤native(根据数据库自动生成主键策略)
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值