hibernate 简介:
hibernate是一个开源框架,它是对象关联关系映射的框架,它对JDBC做了轻量级的封装,而我们java程序员可以使用面向对象的思想来操纵数据库。
hibernate核心接口
session:负责被持久化对象CRUD操作
sessionFactory:负责初始化hibernate,创建session对象
configuration:负责配置并启动hibernate,创建SessionFactory
Transaction:负责事物相关的操作
Query和Criteria接口:负责执行各种数据库查询
hibernate工作原理:
1.通过Configuration config = new Configuration().configure();//读取并解析hibernate.cfg.xml配置文件
2.由hibernate.cfg.xml中的<mapping resource="xx/xx/User.hbm.xml"/>读取并解析映射信息
3.通过SessionFactory sf = config.buildSessionFactory();//创建SessionFactory
4.Session session = sf.openSession();//打开Sesssion
5.Transaction tx = session.beginTransaction();//创建并启动事务Transation
6.persistent operate操作数据,持久化操作
7.tx.commit();//提交事务
8.session.close()//关闭Session
Rs.hbm.xml映射文件如下:
hibernate是一个开源框架,它是对象关联关系映射的框架,它对JDBC做了轻量级的封装,而我们java程序员可以使用面向对象的思想来操纵数据库。
hibernate核心接口
session:负责被持久化对象CRUD操作
sessionFactory:负责初始化hibernate,创建session对象
configuration:负责配置并启动hibernate,创建SessionFactory
Transaction:负责事物相关的操作
Query和Criteria接口:负责执行各种数据库查询
hibernate工作原理:
1.通过Configuration config = new Configuration().configure();//读取并解析hibernate.cfg.xml配置文件
2.由hibernate.cfg.xml中的<mapping resource="xx/xx/User.hbm.xml"/>读取并解析映射信息
3.通过SessionFactory sf = config.buildSessionFactory();//创建SessionFactory
4.Session session = sf.openSession();//打开Sesssion
5.Transaction tx = session.beginTransaction();//创建并启动事务Transation
6.persistent operate操作数据,持久化操作
7.tx.commit();//提交事务
8.session.close()//关闭Session
9.sf.close()//关闭SesstionFactory
hibernate搭建:
1.具体搭建过程体系省略,下面是搭建好的结构图:
2.pom节点如下:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>RELEASE</version>
</dependency>
<dependency>
<groupId>javaee</groupId>
<artifactId>javaee-api</artifactId>
<version>5</version>
</dependency>
<!-- hibernate核心jar包 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.1.5.Final</version>
</dependency>
<!-- hibernate注解 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-annotations</artifactId>
<version>3.5.0-Final</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>RELEASE</version>
</dependency>
</dependencies>
3.大配置的编写:
创建一个hibernate.cfg.xml文件,将之放入resource目录下,其内容如下:
<!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="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
<property name="connection.username">jjz</property>
<property name="connection.password">jjz</property>
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">update</property>
<mapping resource="cn/jjz/pojo/Rs.hbm.xml"/>
</session-factory>
</hibernate-configuration>
4.持久层的搭建:
将之放置在pojo下,以及相应的映射文件,如下所示:
RS类中代码:
public class Rs {
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;
}
}
Rs.hbm.xml映射文件如下:
<?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">
<!-- package声明pojo类所在的包,如果不写 那么在class中需要指明pojo类所在的包
schema指数据库模式 一个模式下可以有多张表
-->
<hibernate-mapping package="cn.jjz.pojo">
<!-- class指映射一个实体类entity
提供了公共的无参构造方法-通过反射产生对象
属性用private修饰,并且生成对应的get/set方法
类不能用final来修饰-hibernate会产生代理类(cglib)
类需要指明标识
name表示pojo类名
table表示pojo类对应数据库中的表名;如果不写默认是类名
-->
<class name="Rs" table="Rs">
<!--
id表示实体类的标识(OID)
对应数据库表中的主键
name指实体类的标识属性名
column表示对应数据库表的列名:如果不写 则数据库表中列名和属性名一致
length表示数据库表中 对应数据类型的长度 ,如果不写有默认长度
type表示类型如果不写hibernate可以找到对应pojo类的属性的类型
-->
<id name="id" column="id">
<generator class="sequence"></generator>
</id>
<property name="name" column="name"></property>
<property name="age" column="age"></property>
</class>
</hibernate-mapping>
5.测试一下,将对应的测试类建在test下:
public class RsTest {
Configuration cfg = null;
SessionFactory sf = null;
Session session = null;
Transaction tx = null;
@Test
public void c() {
/*
* 查询
* */
cfg = new Configuration().configure();
sf = cfg.buildSessionFactory();
session = sf.openSession();
tx = session.beginTransaction();
Rs r = new Rs();
session.load(Rs.class, 2);
System.out.println(r.getName());
session.close();
sf.close();
}
@Test
public void b(){
/*
* 删除
* */
cfg=new Configuration().configure();
sf= cfg.buildSessionFactory();
session=sf.openSession();
tx=session.beginTransaction();
Rs r=new Rs();
r.setId(1);
session.delete(r);
tx.commit();
session.close();
sf.close();
}
@Test
public void a(){
//*
// ** 添加
//*
cfg=new Configuration().configure();
ServiceRegistry registry=new StandardServiceRegistryBuilder().configure().build();
sf=cfg.buildSessionFactory(registry);
session=sf.openSession();
tx=session.beginTransaction();
Rs stu=new Rs();
stu.setName("海四达");
stu.setAge(23);
session.save(stu);
tx.commit();
if (session!=null&&session.isOpen()){
session.close();
sf.close();
}
}
}