Hibernate项目完整流程
(1)准备开发环境,创建Hibernate项目。
开发环境:eclipse+hibernate tools插件+hibernate各种jar包+mysql和mysql驱动;
eclipse在线安装hibernate tools插件,下载hibernate压缩包解压。
创建动态web项目,将mysql-connector-java-xxx复制到WEB-INF/lib下在build path一下。
怎么将hibernate里的jar包添加进项目:
window->preferences
java->build path->user libraries
点击new,输入名字,点击ok
选择新建的lib点击右侧add external jar
选择hibernate lib文件夹里所有的jar
ok;
(2)在数据库中创建数据库表。
create table user(
id int(11),
name varchar(20),
password varchar(12),
type varchar(6),
primary key(id)
);
项目的结构如下
(3)创建持久化类。
package org.hibernate.entity;
import java.io.Serializable;
public class User implements Serializable{
private int id;
private String name;
private String password;
private String type;
public User(){
}
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 getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
(4)编写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">
<!-- Generated Dec 12, 2018 3:27:23 PM by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="org.hibernate.entity.User" table="user">
<id name="id" type="int">
<column name="id"/>
<generator class="assigned"/>
</id>
<property generated="never" lazy="false" name="name" type="java.lang.String">
<column name="name"/>
</property>
<property generated="never" lazy="false" name="password" type="java.lang.String">
<column name="password"/>
</property>
<property generated="never" lazy="false" name="type" type="java.lang.String">
<column name="type"/>
</property>
</class>
</hibernate-mapping>
(5)创建Hibernate的配置文件Hibernate.cfg.xml
。
<?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 name="">
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.password">********</property>
<property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/hibernate</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.show_sql">true</property>
<property name="connection.pool_size">1</property>
<mapping resource="org/hibernate/entity/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
(6)编写辅助工具类HibernateUtils,用来实现对hibernate的初始化并提供获得session的方法。
package org.hibernate.entity;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static SessionFactory sessionFactory;
private static final ThreadLocal<Session>threadLocal=new ThreadLocal<Session>();
static {
Configuration cfg=new Configuration();
cfg.configure();
sessionFactory=cfg.buildSessionFactory();
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static Session getSession()throws HibernateException{
Session session=(Session)threadLocal.get();
if(session==null||!session.isOpen()) {
if(sessionFactory==null) {
rebuildSessionFactory();
}
session=(sessionFactory!=null)?sessionFactory.openSession():null;
threadLocal.set(session);
}
return session;
}
public static void closeSession()throws HibernateException{
Session session=(Session)threadLocal.get();
threadLocal.set(null);
if(session!=null) {
session.close();
}
}
public static void rebuildSessionFactory() {
try {
sessionFactory=new Configuration().configure("/hibernate.cfg.xml").buildSessionFactory();
}catch(Exception e) {
System.err.println("Error Creating SessionFactory");
e.printStackTrace();
}
}
public static void shutdown() {
getSessionFactory().close();
}
}
(7)编写DAO层类。
package org.hibernate.dao;
import org.hibernate.entity.User;
public interface UserDAO {
void save(User user);
User findByID(int id);
void delete(User user);
void update(User user);
}
(8)编写Service层类
package org.hibernate.dao;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.entity.HibernateUtil;
import org.hibernate.entity.User;
public class UserDAOImpl implements UserDAO {
@Override
public void save(User user) {
Session session=HibernateUtil.getSession();
Transaction tx=session.beginTransaction();
try {
session.save(user);
tx.commit();
}catch(Exception e) {
e.printStackTrace();
tx.rollback();
}finally {
HibernateUtil.closeSession();
}
}
@Override
public User findByID(int id) {
User user=null;
Session session=HibernateUtil.getSession();
Transaction tx=session.beginTransaction();
try {
user=(User)session.get(User.class, user);
tx.commit();
}catch(Exception e) {
e.printStackTrace();
tx.rollback();
}finally {
HibernateUtil.closeSession();
}
return user;
}
@Override
public void delete(User user) {
Session session=HibernateUtil.getSession();
Transaction tx=session.beginTransaction();
try {
session.delete(user);
tx.commit();
}catch(Exception e) {
e.printStackTrace();
tx.rollback();
}finally {
HibernateUtil.closeSession();
}
}
@Override
public void update(User user) {
Session session=HibernateUtil.getSession();
Transaction tx=session.beginTransaction();
try {
session.update(user);
tx.commit();
}catch(Exception e) {
e.printStackTrace();
tx.rollback();
}finally {
HibernateUtil.closeSession();
}
}
}
(9)编写测试类
package org.hibernate.test;
import static org.junit.Assert.*;
import org.hibernate.dao.UserDAO;
import org.hibernate.dao.UserDAOImpl;
import org.hibernate.entity.User;
import org.junit.Test;
public class UserTest {
@Test
public void testSave() {
UserDAO userdao=new UserDAOImpl();
try {
User u=new User();
u.setId(1);
u.setName("yazhou");
u.setPassword("111");
u.setType("admin");
userdao.save(u);
}catch(Exception e) {
e.printStackTrace();
}
}
}
(10)执行测试方法。右键测试类,run as JUnit Test