• Hibernate实现简单的CRUD操作和常见类(三)


    勿以恶小而为之,勿以善小而不为--------------------------刘备
    劝诸君,多行善事积福报,莫作恶

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

    一. 简单的实体类 POJO规则

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

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

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

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

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

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

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

    6. 实体类最好不要用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(); 关闭。


    谢谢您的观看,如果喜欢,请关注我,再次感谢 !!!

  • 相关阅读:
    教材全解
    知乎、博客园等开放API接口
    学习正则表达式就这么简单
    C#操作域用户ADHelper
    跨线程时使用静态扩展方法更新控件
    C#中的WinForm的消息机制简述,及消息机制下Invoke,和BeginInvoke的使用和区别
    WinForm 捕获异常 Application.ThreadException + AppDomain.CurrentDomain.UnhandledException
    Winform异常处理之ThreadException、unhandledException及多线程异常处理
    深入理解C#中的IDisposable接口
    批处理应用的几个技巧
  • 原文地址:https://www.cnblogs.com/yjltx/p/13138947.html
Copyright © 2020-2023  润新知