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包
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的注解方式。本例中,两种方法都会被使用。
- hibernate.hbm.xml 文件中把引用:xxx.hbm.xml改为引用实体类
即把改为 - 获取SessionFactory方式发生了变化:即由SessionFactory sf = new Configuration().configure().buildSessionFactory() 改为:SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory()
- 注解方式不需要在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文件的地址。
4 补充
本例子中,SchoolPK.java,School.java和SchoolAnt.java,SchoolAntPK.java分别是Hibernate关于复合(联合)主键映射的实现,具体实现方法见Github代码。
目前有两个文件夹:
项目名称 | 描述 |
---|---|
Hibernate | Hibernate简单实现 |
HibernateHelloWorld | Demo |
HibernateHelloWorld | Demo |
GitHub地址