Hibernate是一个开源的ORM框架,顾名思义,它的核心思想即ORM(Object Relational Mapping,对象关系映射),可以通过对象来操作数据库中的信息,据说开发者一开始是不太熟悉数据库SQL语句的,这也造就了hibernate的强大之处,它不强求开发者熟悉SQL语句也可以操作数据库,hibernate可以自动生成SQL语句,自动执行。
利用hibernate可以让开发者完全使用面想对象思维来操作数据库,所以接下来的演示不会有一句SQL语句,如果有的话,请当我这句话没说!
本文使用hibernate实现了简单的对一个person数据表的基本增删改查操作。
准备工作
环境:win7+eclipse
工具包:hibernate包,可前往http://hibernate.org/orm/downloads/下载,本例中使用的是4版本;
数据库连接驱动包,本例中使用的是mysql的
程序结构图示
pojo层实体类
package demo.pojo; public class Person { private Integer id; private String name; private String gender; private Integer age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Person [id=" + id + ", name=" + name + ", gender=" + gender + ", age=" + age + "]"; } }
核心配置文件hibernate.cfg.xml
<!DOCTYPE hibernate-configuration PUBLIC
“-//Hibernate/Hibernate Configuration DTD 3.0//EN”
“http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd”>
com.mysql.jdbc.Driver
jdbc:mysql://127.0.0.1/web?characterEcoding=utf-8
root
123456
org.hibernate.dialect.MySQLDialect
true
映射文件Person.hbm.xml
<!DOCTYPE hibernate-mapping PUBLIC
“-//Hibernate/Hibernate Mapping DTD 3.0//EN”
“http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd”>
<!–
注意点:
0.name值为实体类中属性名,column为数据表中字段名;
1.当实体类中属性名与对应数据表字段名相同时,后面的column可以省略,hibernate会自动匹配,例如下面age ;
2.反之当实体类中属性名与对应数据表字段名不相同时,两项都要写上,例如下面gender和sex
–>
Session工厂类
package demo.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
public class HibernateSessionFactory {
private static SessionFactory factory;
private static ThreadLocal thread = new ThreadLocal();
private static String path = “hibernate.cfg.xml”;
private static Configuration config = new Configuration();
static {
config.configure(path);
ServiceRegistry service = new ServiceRegistryBuilder()//定义一个服务注册机
.applySettings(config.getProperties()).buildServiceRegistry();
factory = config.buildSessionFactory(service);//创建Session工厂类
}
public static Session getSession() {
Session session = thread.get();
if(session == null || !session.isOpen()) {
session = factory.openSession();
thread.set(session);
}
return session;
}
public static void closeSession() {
Session session = thread.get();
if(session != null && session.isOpen()) {
session.close();
thread.set(null);
}
}
}
DAO层封装数据各项操作的方法
package demo.dao;
import java.io.Serializable;
import org.hibernate.Session;
import org.hibernate.Transaction;
import demo.pojo.Person;
import demo.util.HibernateSessionFactory;
public class PersonDaoImpl {
//增删改查,此处以增为例
public boolean add(Person p) {
Session session = HibernateSessionFactory.getSession();//创建Session
Transaction trans = session.beginTransaction();//开启事务
try {
Serializable id = session.save(p);//添加记录并获取主键值
System.out.println(id+”为获取的主键值”);//控制台查看主键值
trans.commit();//提交事务
return true;
} catch (Exception e) {
trans.rollback();//获取异常,则事务回滚
} finally {
HibernateSessionFactory.closeSession();//关闭Session
}
return false;
}
}
测试类TestPerson
package demo.test;
import org.junit.Test;
import demo.dao.PersonDaoImpl;
import demo.pojo.Person;
public class TestPerson {
@Test
public void testAdd() {
//创建一个人类对象
Person p = new Person();
p.setName(“张三”);
p.setGender(“男”);
p.setAge(18);
//创建dao层类对象并调用添加方法
PersonDaoImpl dao = new PersonDaoImpl();
dao.add(p);
}
}
Hibernate3.1.2_中文文档PDF http://www.linuxidc.com/Linux/2016-02/128462.htm
Hibernate学习入门教程 http://www.linuxidc.com/Linux/2015-08/121498.htm
在Hibernate中开启日志 http://www.linuxidc.com/Linux/2015-07/120499.htm
Hibernate+JUnit测试实体类生成数据库表 http://www.linuxidc.com/Linux/2015-07/120161.htm
Hibernate整体理解 http://www.linuxidc.com/Linux/2014-07/104405.htm
Hibernate的映射机制 http://www.linuxidc.com/Linux/2014-12/110265.htm
Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句 http://www.linuxidc.com/Linux/2016-08/134619.htm
Struts2+Spring3+Hibernate3+MySQL简单登录实现 http://www.linuxidc.com/Linux/2017-02/140408.htm
Hibernate的简单示例 http://www.linuxidc.com/Linux/2016-11/136609.htm
Intellij IDEA 15 下新建 Hibernate 项目及添加配置 http://www.linuxidc.com/Linux/2016-09/135624.htm
:请点这里
:请点这里
:http://www.linuxidc.com/Linux/2017-07/145807.htm