前言
本章讲解Hibernate的增删改查
方法
1.构建获取Session的工具方法
如同我们第一次使用JDBC的时候和MyBatis的时候,connection对象和SqlSession对象都要经过一个工具类进行获取,那么单独使用Hibernate的时候也不例外!
这里我给一个例子:
package cn.edu.ccut.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
/**
* @Auther:jwang
* @Date:2019/1/22
* @Description:cn.edu.ccut.util
* @Version 1.0
**/
public class DBUtil {
private static SessionFactory sessionFactory = null;
private static Session session = null;
static {
//加载配置文件,默认src下的hibernate.cfg.xml
Configuration configiguration = new Configuration().configure();
//启动服务
ServiceRegistry registry = new ServiceRegistryBuilder().applySettings(configiguration.getProperties()).buildServiceRegistry();
//创建SessionFactory对象
sessionFactory = configiguration.buildSessionFactory(registry);
}
public static Session getSession(){
if(session == null){
session = sessionFactory.openSession();
}
return session;
}
public static void close(){
if(session != null){
session.close();
}
}
}
这个时候我们的测试类就可以这么写:
import cn.edu.ccut.bo.User;
import cn.edu.ccut.util.DBUtil;
import org.hibernate.Session;
import org.junit.Test;
/**
* @Auther:jwang
* @Date:2019/1/20
* @Description:PACKAGE_NAME
* @Version 1.0
**/
public class HibernateTest {
@Test
public void testHibernateConfig() throws Exception{
//创建Session对象
Session session = DBUtil.getSession();
//查询Users表的内容
User user = (User) session.get(User.class,"admin");
System.out.println(user);
DBUtil.close();
}
}
2.增删改查
特别的:查询操作在例子中已经明确的写出来了,这里就不过多的去说了!
1)增加
在Hibernate中增加的操作我们需要开启事务,相信大家对事务已经理解了!
在之前我们一直拿User类作为查询使用,它存储了用户登录的相关信息,如果需要增加操作,则实体类需要修改如下:
package cn.edu.ccut.bo;
public class User {
private String id;
private String username;
private String password;
public User() {
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
测试类编写如下:
import cn.edu.ccut.bo.User;
import cn.edu.ccut.util.DBUtil;
import org.hibernate.Session;
import org.junit.Test;
/**
* @Auther:jwang
* @Date:2019/1/20
* @Description:PACKAGE_NAME
* @Version 1.0
**/
public class HibernateTest {
@Test
public void testHibernateConfig() throws Exception{
//创建Session对象
Session session = DBUtil.getSession();
//开启事务
session.beginTransaction();
//增加User
User user = new User();
user.setUsername("jwang");
user.setPassword("jwang");
session.save(user);
//提交事务
session.getTransaction().commit();
DBUtil.close();
}
}
特别的:我们需要开启事务和提交事务!
2)修改
修改的话和增加差不多,测试类编写如下:
import cn.edu.ccut.bo.User;
import cn.edu.ccut.util.DBUtil;
import org.hibernate.Session;
import org.junit.Test;
/**
* @Auther:jwang
* @Date:2019/1/20
* @Description:PACKAGE_NAME
* @Version 1.0
**/
public class HibernateTest {
@Test
public void testHibernateConfig() throws Exception{
//创建Session对象
Session session = DBUtil.getSession();
//开启事务
session.beginTransaction();
//查找User
User user = (User)session.get(User.class, "1");
user.setPassword("sa");
//修改User
session.update(user);
//提交事务
session.getTransaction().commit();
DBUtil.close();
}
}
3)删除
删除同样要开启事务并提交!
特别的:除了查询都需要开启事务,提交事务
import cn.edu.ccut.bo.User;
import cn.edu.ccut.util.DBUtil;
import org.hibernate.Session;
import org.junit.Test;
/**
* @Auther:jwang
* @Date:2019/1/20
* @Description:PACKAGE_NAME
* @Version 1.0
**/
public class HibernateTest {
@Test
public void testHibernateConfig() throws Exception{
//创建Session对象
Session session = DBUtil.getSession();
//开启事务
session.beginTransaction();
//增加User
User user = (User)session.get(User.class, "1");
session.delete(user);
//提交事务
session.getTransaction().commit();
DBUtil.close();
}
}
到这里,我们hibernate原生的增删改查就是这样了!