Hibernate实现简单的CRUD操作和常见类

版权声明:转载请注明出处(两个蝴蝶飞) https://blog.csdn.net/yjltx1234csdn/article/details/82973435

  “两个蝴蝶飞”特别喜欢"java1234知识分享网"小峰的实用主义,所以本文及其系列文章均是采用实用主义,从项目和代码的角度去分析。由于本人经验有限,嘴皮子不溜,所以学术性,概念性,底层性的知识点暂时不做介绍。文章中有错误之处,欢迎拍砖和指点。特别感谢"java1234知识分享网 "和"黑马程序员官网",所有的资料大部分是两者提供,为了方便书写,故不一一指名出处,请谅解,非常抱歉。


上一章简单介绍了Hibernate中hibernate.cfg.xml文件和Xxx.hbm.xml文件的详细解释(二),如果没有看过,请观看上一章


写一个简单的User表的CRUD操作

其中关于实体类User有以下几点需要注意:

1. 属性必须私有,用private 进行修饰。

2  实现属性对应的setter和getter方法。

3. 具有唯一标识符,一般为id.

4. 建议使用包装类型,如Integer, 而不是使用原始类型 int.  如学生考试时的区别。

5. 建议实体类实现序列化接口,Serializable 。

6. 实体类最好不要用final 关键字进行修饰。

一   新建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();
	}

五   简单删除的测试

@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();
	}

六  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(); 关闭。

谢谢!!!

猜你喜欢

转载自blog.csdn.net/yjltx1234csdn/article/details/82973435