Hibernate 的基于XML与基于注解的使用

1. Hibernate简介

Hibernate 是一个持久层的 ORM 框架。ORM映射:Object Relational Mapping

O:面向对象领域的 Object(JavaBean 对象)
R:关系数据库领域的 Relational(表的结构)
M:映射 Mapping(XML 的配置文件)

2. Hibernate 快速入门

2.1 导入需要用的jar包:

  • MySQL的驱动jar包
  • Hibernate开发需要的jar包
  • 日志jar包
Hibernate 的基于XML与基于注解的使用_第1张图片
lib.png

2.2 编写 Hibernate 核心的配置文件

我们需要在源代码文件夹的根目录下在hibernate.cfg.xml文件。





   
       com.mysql.jdbc.Driver
       jdbc:mysql://localhost:3306/syf?useSSL=false
       root
       123456
    
       org.hibernate.dialect.MySQLDialect
    
       true
    
       true
       
       create
    
       
       
       
       
       
    
 

2.1 基于注解和基于XML的对象关系映射

在hibernate中,通常配置对象关系映射关系有两种,一种是基于xml的方式,另一种是基于annotation的注解方式。本例中,两种方法都会被使用。

  1. hibernate.hbm.xml 文件中把引用:xxx.hbm.xml改为引用实体类
    即把改为
  2. 获取SessionFactory方式发生了变化:即由SessionFactory sf = new Configuration().configure().buildSessionFactory() 改为:SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory()
  3. 注解方式不需要在xxx.hbm.xml把实体类与表进行映射。而采用在实体类中进行注解。

在这个例子中,基于XML的是下面两个:

  
  

基于Annotation时, 在Hibernate全局配置文件中使用声明映射类的方式:

  
  

2.3 编写映射的配置文件和POJO类

2.3.1 基于XML

基于XML的POJO是需要配置:实体类名.hbm.xml,在本例中,Student.hbm.xml为:


 


   
      
        
      
      
      
   

POJO类:

package com.syf.hibernate.model.xml;

public class Student {
    private int id;
    private String name;
    private int age;
    
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }

}

2.3.2 基于Annotation

@Entity
@Table(name="ant_teacher")
@SequenceGenerator(name = "teacherSEQ", sequenceName = "teacherSEQ_DB")
public class Teacher {
    private int id;
    private String name;
    private String title;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "teacherSEQ")
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

}

2.4 测试

2.4.1 基于XML

public class SchoolTest {

    private static SessionFactory sf = null;
    
    @BeforeClass
    public static void beforeClass(){
        Configuration cfg = new Configuration();
        sf  = cfg.configure().buildSessionFactory();
    }
    
    @AfterClass
    public static void afterClass(){
        sf.close();
    }
    
    @Test
    public void test() {
        School s = new School();
        SchoolPK pk = new SchoolPK(); 
        pk.setId(1);
        pk.setName("syf");
        s.setPk(pk);
        s.setAddress("Pujiang");
        Session session = sf.openSession();
        session.beginTransaction();
        session.save(s);
        session.getTransaction().commit();
        session.close();
    }
    
    public static void main(String[] args){
        beforeClass();
    }

}

2.4.2 基于注解

public class TeacherTest {

    private static SessionFactory sf = null;
    
    @BeforeClass
    public static void beforeClass(){
        Configuration cfg = new Configuration();
        sf  = cfg.configure().buildSessionFactory();
    }
    
    @AfterClass
    public static void afterClass(){
        sf.close();
    }
    
    @Test
    public void test() {
        Teacher t = new Teacher();
        t.setName("Syf");
        t.setTitle("master");       
        Session session = sf.openSession();
        session.beginTransaction();
        session.save(t);
        session.getTransaction().commit();
        session.close();
    }
    
    public static void main(String[] args){
        beforeClass();
    }

}

3 集成Jenkins

Jenkins是一个广泛用于持续构建的可视化web工具,就是各种项目的的“自动化”编译、打包、分发部署,将以前编译、打包、上传、部署到Tomcat中的过程交由Jenkins,Jenkins通过给定的代码地址,将代码拉取到jenkins宿主机上,进行编译、打包和发布到web容器中。Jenkins可以支持多种语言(比如:java、c#、php等等),也兼容ant、maven、gradle等多种第三方构建工具,同时跟git、svn无缝集成,也支持直接与github直接集成。Jenkins+GitHub 环境构建可以参考下面的文章:Jenkins+GitHub 环境构建。
这里我们主要用Jenkins从GitHub上拖代码,一旦有更新,就构建一次,跑Ant脚本,实现清理,编译,测试等功能,build.xml具体实现如下:



    
    
    
    
    

    
        
            
        
    

    
        
        
        
    

    
        
    

    
        
        
        
        
        
        
            
                
            
        
    

    
        
    

    
        
    

    
        
            
                
                
            
            
            
                
            
        
    



Jenkins的配置信息如下:
主要配置了Github的地址,构建触发条件以及Build.xml文件的地址。

Hibernate 的基于XML与基于注解的使用_第2张图片
jenkins1.png
Hibernate 的基于XML与基于注解的使用_第3张图片
jenkins2.png

4 补充

本例子中,SchoolPK.java,School.java和SchoolAnt.java,SchoolAntPK.java分别是Hibernate关于复合(联合)主键映射的实现,具体实现方法见Github代码。

目前有两个文件夹:

项目名称 描述
Hibernate Hibernate简单实现
HibernateHelloWorld Demo
HibernateHelloWorld Demo

GitHub地址

你可能感兴趣的:(Hibernate 的基于XML与基于注解的使用)