连接数据库的一个框架,Orm框架的一种。
二、配置:
1、导入必须的包
hibernate-release-4.3.5.Final\lib\required(必须的jar)
如果需要时用annotataion的话,导入:
hibernate-release-4.3.5.Final\lib\jpa(jap相关的jar)
hibernate-release-4.3.5.Final\lib\jpa-metamodel-generator(jpa生成器)
javaWeb放到WebContent\WEB-INF\lib目录。
javaSe放到任意文件夹,然后导入构建路径。
2、配置hibernate.cfg.xml
放到src的根目录,基本内容如下
<?xml version="1.0"
encoding="UTF-8"?>
<!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>
<!--
JDBC连接设置 -->
<property
name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost/dinnersystem</property>
<property name="connection.username">root</property>
<property
name="connection.password">303269789</property>
<!--
连接池配置,使用c3p0连接池 -->
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.min_size">1</property>
<property name="hibernate.c3p0.timeout">1800</property>
<property
name="hibernate.c3p0.max_statements">50</property>
<property
name="hibernate.c3p0.idle_test_period">3000</property>
<!--
数据库语言 -->
<property
name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!--
sql设置 -->
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<!--
持久类设置所有需要持久的类要在这里标明,以下是针对annotation注释的类 -->
<mapping class="com.kirning.android.entity.Test" />
</session-factory>
</hibernate-configuration>
3、配置持久类
只存在属性和getter/setter方法的类,其中需要在类名上加Annatation标示@Entity表示这是一个持久类。以及在id上添加@Entity,标示这是一个id对应数据库中的关键字,每一个持久类都必须在hibernate.cfg.xml中进行备案,否则抛出异常,无法使用。
@Entity
public class Test {
private int id;
private String name;
private String pass;
@Id
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 getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
}
4、如需使用log4j,则下载
apache-log4j-1.2.17 http://pan.baidu.com/share/link?shareid=121565833&uk=2047106924
slf4j-1.7.7
http://pan.baidu.com/share/link?shareid=123250651&uk=2047106924
apache-log4j-1.2.17/log4j-1.2.17.jar
slf4j-1.7.7/slf4j-log4j12-1.7.7.jar
进入hibernate-release-4.3.5.Final\project\etc把
log4j.properties放到src根目录即可。
三、使用
1、获取Session
public class HibernateUtil
{
private
static final SessionFactory
sessionFactory = buildSessionFactory();
private
static SessionFactory buildSessionFactory() {
try {
//
载入设置
Configuration configuration = new
Configuration().configure();
//
创建serviceRegistry
ServiceRegistry serviceRegistry = new
StandardServiceRegistryBuilder()
.applySettings(configuration.getProperties()).build();
//
获取sessionFactory
SessionFactory sessionFactory = configuration
.buildSessionFactory(serviceRegistry);
return sessionFactory;
} catch
(Throwable ex) {
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public
static SessionFactory getSessionFactory() {
return
sessionFactory;
}
}
可建立一个这样的工具类,方便获取Session 这是根据4.3.5官方文档中的事例以及网上的查询得来的结果,不知道为什么官方的用不了,有错误。
Session里封装着hibernate对数据库访问的方法,所有必需要获得Session。
1、存储:
首先,需要实例化一个持久类。并使用Setter方法把数据放进去。然后调用session的save方法。
e.g:
public class TestPost {
public void
test(){
Test test =
new Test();
test.setName("test");
test.setPass("test");
//获得Session
Session se =
HibernateUtil.getSessionFactory().openSession();
//开始事务处理
se.beginTransaction();
//保存到数据库
se.save(test);
//提交事务
se.getTransaction().commit();
}
}
2、查询:
a)、根据关键字查询:
public class TestPost {
public void
test(){
//获得Session
Session se =
HibernateUtil.getSessionFactory().openSession();
//开始事务处理
se.beginTransaction();
//0是id,hibernate会根据id把数据拿出来并填充到Test类的各个属性返回一个Object对象,强转即可。
Test test
= (Test)se.get(Test.class, 0);
//提交事务
se.getTransaction().commit();
}
}
b)、根据关键字查询
public
class TestPost {
public
void test(){
//获得Session
Session se =
HibernateUtil.getSessionFactory().openSession();
//关键字
String key = "tom";
//开始事务处理
se.beginTransaction();
//创建Criteria对象
Criteria cr =
se.createCriteria(Test.class);
//添加条件
cr.add(Restrictions.eq("name", key));
//返回结果集
List<Test> list = cr.list();
//提交事务
se.getTransaction().commit();
}
}
c)获取前10条数据
public
class TestPost {
public void
test(){
//获得Session
Session se =
HibernateUtil.getSessionFactory().openSession();
//开始事务处理
se.beginTransaction();
//创建Criteria对象
Criteria cr =
se.createCriteria(Test.class);
//这里使用了HQL语句
Query query =
se.createQuery("from MenuTable order by id");
query.setFirstResult(0);
query.setMaxResults(10);
//返回结果集
List<Test> list = cr.list();
//提交事务
se.getTransaction().commit();
}
}
3、修改数据
这个的话……先查询出来,在保存进去就好(*^__^*) !