Hibernate实现简单的CRUD操作和常见类(三)
勿以恶小而为之,勿以善小而不为--------------------------刘备
劝诸君,多行善事积福报,莫作恶
上一章简单介绍了Hibernate中hibernate.cfg.xml文件和Xxx.hbm.xml文件的详细解释(二),如果没有看过,请观看上一章
一. 简单的实体类 POJO规则
写一个简单的User表的CRUD操作
其中关于实体类User有以下几点规则需要注意:
-
属性必须私有,用private 进行修饰。
-
实现属性对应的setter和getter方法。
-
具有唯一标识符,一般为id.
-
建议使用包装类型,如Integer, 而不是使用原始类型 int. 如学生考试时的区别。
-
建议实体类实现序列化接口,Serializable 。
-
实体类最好不要用final 关键字进行修饰。
二. 实现 实体的CRUD 操作
二.一 新建Hibernate工具类 HibernateUtils.java
HibernateUtils.java
package com.yjl.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
@author: 两个蝴蝶飞
@date: 2018年10月8日 下午8:43:29
@Description SessionFactory的工具类
*/
public class HibernateUtil {
/**
* @param configuration 配置
* @param sessionFactory session工厂
*/
private static Configuration configuration;
private static SessionFactory sessionFactory=null;
//私有化
private HibernateUtil(){
}
/*
* 得到sessionFactory对象
*/
public static SessionFactory getSessionFactory(){
if(sessionFactory==null){
configuration=new Configuration();
configuration.configure();
sessionFactory=configuration.buildSessionFactory();
}
return sessionFactory;
}
/*
* 得到session对象
*/
public static Session getSession(){
return getSessionFactory().openSession();
}
//测试一下
public static void main(String []args){
System.out.println(getSession());
}
}
SessionFactory是单实例的,整个Hibernate运行项目期间只生成一个,用单例模式生成!!!. 注意这点。
二.二 插入的测试 save
@Test
public void saveTest(){
//1 得到Session对象
Session session=HibernateUtil.getSession();
//2 打开事务
Transaction tran=session.beginTransaction();
//3 实例化对象
User user=new User();
user.setUserName("两个蝴蝶飞");
user.setSex("男");
user.setAge(24);
user.setPassword("123456");
user.setDescription("一个有梦想的程序员");
//4利用save()方法进行相应的保存
session.save(user);
//5 提交事务
tran.commit();
//6 关闭session
session.close();
}
运行后查看数据库,发现user表添加了,而且正确的插入了数据
上面主键的生成策略是,native .即:
<id name="id" column="id">
<generator class="native"></generator>
</id>
如果转换成UUID形式的,需要将id先转换成String类型为uid,生成setter和getter方法:
User.java中:
private String uid;
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
相应的配置 User.hbm.xml中: 转换成uuid
<id name="uid" column="uid">
<generator class="uuid"></generator>
</id>
重新执行上面的saveTest()方法,进行测试
生成的数据表:
二.三 简单查询的测试 get()
@Test
public void getTest(){
Session session=HibernateUtil.getSession();
User user=session.get(User.class,1);
System.out.println(user.getUserName()+"----"+user.getDescription());
}
二.四 简单修改的测试 update()
@Test
public void updateTest(){
//1 得到Session对象
Session session=HibernateUtil.getSession();
//2 打开事务
Transaction tran=session.beginTransaction();
//3 得到对象
User user=session.get(User.class,1);
if(user!=null){
user.setAge(26);
user.setDescription("要做一个高级程序员");
//4利用save()方法进行相应的保存
session.update(user);
}
//5 提交事务
tran.commit();
//6 关闭session
session.close();
}
二.五 简单删除的测试 delete()
@Test
public void deleteTest(){
//1 得到Session对象
Session session=HibernateUtil.getSession();
//2 打开事务
Transaction tran=session.beginTransaction();
//3 得到对象
User user=session.get(User.class,1);
//4 如果存在,就进行删除
if(user!=null){
session.delete(user);
}
//5 提交事务
tran.commit();
//6 关闭session
session.close();
}
这就是一个实体的简单的 CRUD 操作演示。
三. Hibernate 框架的常见类
三.一 Hibernate 中Configurate 类
所用到的:
configuration=new Configuration();
configuration.configure();
sessionFactory=configuration.buildSessionFactory();
其中:
public Configuration()
{
//调用类加载进行创建
this(new BootstrapServiceRegistryBuilder().build());
}
public Configuration configure()
/* */ throws HibernateException
/* */ {
//名称为hibernate.cfg.xml, 不能变,是固定值
/* 244 */ return configure("hibernate.cfg.xml");
/* */ }
三.二 Hibernate中的SessionFactory类
//创建sessionFactory对象
public SessionFactory buildSessionFactory()
/* */ throws HibernateException
/* */ {
/* 724 */ log.debug("Building session factory using internal StandardServiceRegistryBuilder");
/* 725 */ standardServiceRegistryBuilder.applySettings(properties);
/* 726 */ return buildSessionFactory(standardServiceRegistryBuilder.build());
/* */ }
SessionFactory中的主要方法:
三.三 Hibernate中的Session类
常用方法:
三.四 Hibernate中的Transaction类
其中EntityTransaction 类:
其中,添加save(), 更新 update(), 删除delete() ,是需要事务操作的,不要忘记 tran.commit(); 提交事务。
查询get() 是不需要事务操作的。
注意,不要忘记关闭Session . session.close(); 关闭。
谢谢您的观看,如果喜欢,请关注我,再次感谢 !!!