1. Hibernate简介
(1) Hibernate是一款ORM框架. Object Relation Mapping
(2) ORM是指对象关系映射.可以将DB映射成Object,这样程序员可以通过
对Object操作完成对DB的操作.将JDBC封装在ORM框架底层
(3)主流ORM框架有Hibernate,iBatis,JPA
2. Hibernate框架体系结构
(1)主配置文件:用于描述数据库连接信息.
hibernate.cfg.xml或者hibernate.properties
(2)映射描述文件:用于描述映射类及属性与DB表和字段之间的对应关系
User.hbm.xml
(3)映射类文件:User.java
(4)主要API组件
a. Configuration:用于加载主配置文件,获取数据库连接信息
b. SessionFactory:用于创建Session对象,封装了映射信息以及与定义的SQL
c. Session:用于对象操作.完成增加,删除,修改,查询操作.
d.Transaction:用于事务处理.进行增加,删除,修改时需要使用.
因为Hibernate中自动提交功能是关闭的.
e.Query:用于执行HQL查询语句.
HQL属于面向对象查询语句,语句中没有表名和字段名
1.导包
2.在src下新建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>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="connection.url">jdbc:mysql://localhost:3306/user</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<mapping resource="db/mapping/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
3.建立User.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="db.daomain">
<class name="User" table="duser">
<id name="id" type="integer">
<generator class="native"></generator>
</id>
<property name="name" type="string">
<column name="name"></column>
</property>
<property name="pwd" type="string">
<column name="pwd"></column>
</property>
</class>
</hibernate-mapping>
4.一般步骤
Configuration conf = new Configuration();
conf.configure();//加载hibernate.cfg.xml配置文件
SessionFactory sf = conf.buildSessionFactory();//获取SessionFactory实例
session = sf.openSession();//获取session
Transaction trans=session.beginTransaction();得到事务
session.save(user);//插入user session.get(user.class,5)查询或session.load(user.class,6)load是延迟加载用的时候才执行sql语句
trans.commit();提交事务
增删改查:
public static void add(User user){
Session session=HibernateSessionUtil.getSession();
Transaction trans=session.beginTransaction();
session.save(user);
trans.commit();
HibernateSessionUtil.closeSession();
}
public static User findById(int id){
Session session=HibernateSessionUtil.getSession();
User user=(User) session.get(User.class, id);
//User user=(User) session.load(User.class,id)用的时候才加载,因为用的时候session已关闭报异常
session.close();
return user;
}
public static void update(User user){
Session session=HibernateSessionUtil.getSession();
Transaction t=session.beginTransaction();
session.update(user);//根据user的id来更新
t.commit();
session.close();
}
public static void delete(int id){
User user=findById(9);//注意顺序
Session session=HibernateSessionUtil.getSession();
Transaction tsa=session.beginTransaction();
session.delete(user);
tsa.commit();
session.close();
}