Hibernate框架介绍
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
这些是度娘告诉我的,我们总结一下啊:Hibernate是一个轻量级的JDBC封装,也就是说,我们可以使用Hibernate来完成原来我们使用JDBC完成的操作,也就是与数据库的交互操作。它是在dao层去使用的。
使用Hibernate优势
- Hibernate对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
- Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现,它很大程度的简化了dao层编码工作。
注:ORM:对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换 。从效果上说,它其实是创建了一个可在编程语言里使用的--“虚拟对象数据库”。
最近我在使用CUBA,并且Cuba里面的EclipseLink框架被用作ORM实现。所以啦我就又去看看了ORM(Cuba真心比较好用,哈哈哈,但是啦要收费)。
Hibernate(Quick Start)
一、必须的jar包。
二、导入Hibernate需要的jar,如上
三、数据库驱动jar
如使用sql server,那么就导入:
如果使用mysql,那么就导入:
……
还有什么日志jar啊,导入如:log4j、slf4j-log4j……
Hibernate配置文件
一、xxx.hbm.xml:描述类与数据库中表的映射关系。
二、hibernate.cfg.xml:Hibernate框架的核心配置文件。
创建数据库与表
create database hTest;
use hTest;
create table t_aa(
ID int primary key identity(1,1),
name varchar(20)
);
创建实体
public class Taa {
private int id;
private String name;
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;
}
}
映射配置文件:类名.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.company.hqpms.loadinvposcon">
<!--
name:实体名
table:映射到数据库的表名
catalog:数据库名称(可以不写)
-->
<class name="com.company.hqpms.utils.Taa" table="t_aa" >
<!-- class下必须要有一个id的子元素 -->
<!-- id是用于描述主键的 -->
<id name="id" type="java.lang.Integer">
<column name="ID"/>
<generator class="assigned"/>
</id>
<!--
使用property来描述属性与字段的对应关系
如果length忽略不写,且你的表是自动创建这种方案,那么length的默认长度是255
-->
<property name="name" type="java.lang.String">
<column name="name"/>
</property>
</class>
</hibernate-mapping>
核心配置文件:hibernate.cfg.xml
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 是否显示SQL语句 -->
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<!-- SQL数据库方言SQLServer -->
<property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
<!-- JDBC Driver -->
<property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
<!-- JDBC URL -->
<property name="connection.url">jdbc:sqlserver://localhost:1433;databaseName=hTest;</property>
<!-- 用户名-->
<property name="connection.username">sa</property>
<!-- 密码 -->
<property name="connection.password">sa</property>
<!--数据库连接池-->
<property name="c3p0.min_size">5</property>
<property name="c3p0.max_size">20</property>
<property name="c3p0.timeout">1800</property>
<property name="c3p0.max_statements">50</property>
<!-- 使用getCurrentSession()方法时要用到的 -->
<!--<property name="current_session_context_class">thread</property>-->
<!-- 配置每次提交SQL的数量 -->
<property name=" hibernate.jdbc.batch_size">50</property>
<!--自动建表-->
<!--<property name="hbm2ddl.auto">update</property>-->
<mapping resource="com/company/hqpms/loadinvposcon/b.hbm.xml"/>
</session-factory>
</hibernate-configuration>
public class HibernateUtil {
private static SessionFactory sessionFactory;
static {
sessionFactory = new Configuration()
.configure("com/company/hqpms/loadinvposcon/hibernate.cfg.xml").buildSessionFactory();
}
private static final ThreadLocal<Session> session = new ThreadLocal<Session>();
public static Session currentSession() {
Session currentSession = session.get();
if (currentSession == null) {
currentSession = sessionFactory.openSession();
session.set(currentSession);
}
return currentSession;
}
public static void closeSession() {
Session currentSession = session.get();
if (currentSession != null) {
currentSession.close();
}
session.set(null);
}
}
Hibernate测试
public class Test {
@Test
public void testC(){
Taa taa=new Taa();
taa.setName("张三");
Session session = HibernateUtil.currentSession();//得到一个Connection
session.beginTransaction();//开启事务
session.save(taa);//保存
session.getTransaction().commit();//提交
HibernateUtil.closeSession();//关闭
}
@Test
public void testR(){
Session session = HibernateUtil.currentSession();
session.beginTransaction();
Taa taa=session.get(Taa.class,1);
System.out.println("test --- name :"+taa.getName());
session.getTransaction().commit();
HibernateUtil.closeSession();
}
// 修改-- 根据id进行修改
@Test
public void testU(){
Session session = HibernateUtil.currentSession();
session.beginTransaction();
Taa taa=session.get(Taa.class,1);
taa.setName("李思");
session.getTransaction().commit();
HibernateUtil.closeSession();
}
// 删除 -- 根据id进行删除
@Test
public void testD(){
Session session = HibernateUtil.currentSession();
session.beginTransaction();
Taa taa=session.get(Taa.class,1);
session.delete(taa);
session.getTransaction().commit();
HibernateUtil.closeSession();
}
}
喽喽喽,就这样我们就入门啦!是不是很简单?
生活不仅有诗和远方,貌似还有代码!愿君天天开心!