一、三层体系结构
表示层 业务层 数据层
二、四层体系结构
表示层 业务层 持久层 数据层
三、ORM object/Relation Mapping对象关系映射
一种为了解决面向对象与关系数据库存在不匹配的现象的技术,将java程序中的对象自动持久化到关系数据库中。
四、流行的ORM中间件产品
1.hibernate
2.mybatis
五、Hibernate简介
他是面向java环境的对象/关系数据库映射工具,此工具不仅仅可以管理java类到数据库表的映射,还提供数据库查询和获取数据的方法。
它的目标是:对于开发者通常的数据持久化相关变成任务,解放其中95%的工作。
对于以数据为中心的程序来说,Hibernate并不是最好的解决方案;适用于基于Java的中间层应用中,是Hibernate最有用的应用场景。
六、Hibernate优点
1.减少乏味编码
2.更加面向对象的设计
3.更好的性能,持久层框架提供了优秀的性能优化机制
4.更好的移植性
七、第一个hibernate程序
1.首先需要导入hibernate和orcl数据库的jar包放在web-inf的lib下:
2.建立javabean:
Person.java
package com.it.hibernate.entity;
public class Person {
private int pid;
private String pname;
private String pwd;
public int getPid() {
return pid;
}
public void setPid(int pid) {
this.pid = pid;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public Person(int pid, String pname, String pwd) {
super();
this.pid = pid;
this.pname = pname;
this.pwd = pwd;
}
public Person() {
super();
}
@Override
public String toString() {
return "Person [pid=" + pid + ", pname=" + pname + ", pwd=" + pwd + "]";
}
}
2.建立并配置映射文件
Person.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 设置包 -->
<hibernate-mapping package="com.it.hibernate.entity">
<!-- 建立类与数据库表的映射 -->
<class name="Person" table="person">
<!-- 主键必须设置 -->
<id name="pid" type="int" column="pid">
<!-- 设置自增主键,此paramname需要与orcl中序列名一致 -->
<generator class="sequence">
<param name="sequence">seq_person</param>
</generator>
</id>
<property name="pname" type="string" />
<property name="pwd" type="string"></property>
</class>
</hibernate-mapping>
3.配置hibernate以便连接、操作数据库
hibernate.cfg.xml
<!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 name="foo">
<!-- 数据库方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<!-- 数据库驱动 -->
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<!-- 数据库账号密码 -->
<property name="hibernate.connection.username">scott</property>
<property name="hibernate.connection.password">tiger</property>
<!-- 数据库链接字符串 -->
<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
<!-- 数据库语句是否打印 -->
<property name="show_sql">true</property>
<!-- 实体对象映射 这里将Person类配置到hibernate.cfg.xml-->
<mapping resource="com/it/hibernate/entity/Person.hbm.xml"/>
</session-factory>
</hibernate-configuration>
4.创建hibernateutil类启动hibernate
HibernateUtil.java
package com.it.hibernate.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
static SessionFactory sessionFactory;
//静态初始化块
static{
Configuration con = new Configuration();
//加载之前设置的hibernate.cfg.xml文件
con.configure();
//创建sessionfactory
sessionFactory =con.buildSessionFactory();
}
public static Session getSession(){
//获得session
return sessionFactory.openSession();
}
}
这里的sessionFactory为hibernate的核心,他可以对配置文件进行初始化加载,并创建session。
5.建立持久层
PersonDaoImp.java
package com.it.hibernate.dao;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.it.hibernate.entity.Person;
import com.it.hibernate.util.HibernateUtil;
public class PersonDaoImp {
public boolean addPerson(Person person){
Session session = HibernateUtil.getSession();
int result = (int) session.save(person);
Transaction tran = session.beginTransaction();
boolean flag = false;
if(result>0){
flag = true;
tran.commit();
}
session.close();
return flag;
}
public boolean updatePerson(Person person){
Session session = HibernateUtil.getSession();
session.update(person);
Transaction tran = session.beginTransaction();
tran.commit();
session.close();
return true;
}
public boolean deletePerson(Person person){
Session session = HibernateUtil.getSession();
session.delete(person);
Transaction tran = session.beginTransaction();
tran.commit();
session.close();
return true;
}
public Person qeuryPerson(int pid){
Session session = HibernateUtil.getSession();
Person person = (Person) session.get(Person.class, pid);
session.close();
return person;
}
}
这里注意,对表的增删改都需要创建事物并提交:
Transaction tran = session.beginTransaction();
tran.commit();
而且session使用完也需要sesion.close();
关闭。
6.建立测试类
test.java
package com.it.hibernate.util;
import com.it.hibernate.dao.PersonDaoImp;
import com.it.hibernate.entity.Person;
public class Test
public static void main(String[] args) {
Person person = new Person(0,"dad","dsad");
PersonDaoImp personDao = new PersonDaoImp();
boolean flag = personDao.addPerson(person);
System.out.println("插入数据:"+flag);
Person person1 = new Person(1008,"qqqq","qqqq");
flag = personDao.updatePerson(person1);
System.out.println("更新数据:"+flag);
Person person2 = new Person(1008,"qqqq","qqqq");
flag = personDao.deletePerson(person2);
System.out.println("删除数据:"+flag);
Person person3 = personDao.qeuryPerson(1003);
System.out.println("显示数据:"+person3.toString());
}
}
这里方法作为测试,都可得到正确的结果,建议四个功能分开测试。