Hibernate's basic additions, deletions and modifications

Hibernate's basic CRUD

Pack the same part of the previous code into a class
HibernateUtil.java

package util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {
    
    
	
	
	//声明一个私有的静态final类型的Configuration对象
	private static final Configuration config;
	//声明一个私有的静态final类型的SessionFactory对象
	private static final SessionFactory factory;
	//通过静态代码块构建sessionFactory
	static {
    
    
		
		config=new Configuration().configure();
		
		factory=config.buildSessionFactory();
		
	}

	//提供一个公有的静态方法供外部访问,并返回一个session对象
	
	public static Session getSession() {
    
    
		
		return factory.openSession();
	}
	

}

1. Use hql (mainstream)
to find all methods:

// 使用query查找所有信息
	@Test
	public void findAll() {
    
    

		// 1、得到session

		Session session = HibernateUtil.getSession();

		// 2、开启事务

		Transaction t = session.beginTransaction();

		// 3、操作
		// 1、编写hql
		String hql = "from Student";// Student 代表是类 select * from t_student

		// 2、调用session.createQuery创建查询对象

		Query query = session.createQuery(hql);

		// 3.使用query.list()方法查询数据,并将查询数据放入一个list集合

		List<Student> list = query.list();

		for (Student s : list) {
    
     // 循环输出查询出来的数据

			System.out.println(s);
		}

		// 4、提交事务
		t.commit();

		// 5、关闭资源

		session.close();

	}

query Query by condition and return a value

public void uniqueResult() {
    
    

		// 1、得到session
		Session session = HibernateUtil.getSession();
		// 2、开启事务
		Transaction t = session.beginTransaction();
		// 3、操作
		// 1、编写hql,调用session.createQuery创建查询对象

		Query query = session.createQuery("from Student where id=:id");

		// 2、调用query对象给参数赋值
		// query.setInteger("id", 2);// hibernate5已经显示这个方法是低版本的

		query.setParameter("id", 3);

		// 3.调用query对象的uniqueResult方法执行查询

		Student s = (Student) query.uniqueResult();

		System.out.println(s);

		// 4、提交事务
		t.commit();
		// 5、关闭资源
		session.close();

	}

query paging query

public void queryPageTest() {
    
    

		// 1、得到session
		Session session = HibernateUtil.getSession();
		// 2、开启事务
		Transaction t = session.beginTransaction();
		// 3、操作
		// 1、编写hql,调用session.createQuery创建查询对象

		Query query = session.createQuery("from Student");

		query.setFirstResult(2);
		query.setMaxResults(3);

		List<Student> list = query.list();

		for (Student s : list) {
    
     // 循环输出查询出来的数据

			System.out.println(s);
		}

		// 4、提交事务
		t.commit();
		// 5、关闭资源
		session.close();

	}

Partial retrieval (projection 1)

public void portionQueryTest() {
    
    

		// 1、得到session
		Session session = HibernateUtil.getSession();
		// 2、开启事务
		Transaction t = session.beginTransaction();
		// 3、操作
		// 1、编写hql,调用session.createQuery创建查询对象

		// Query query = session.createQuery("select id,from from Student");// 在hql语言中
		// 这样写是不能转译的
		Query query = session.createQuery("select new Student(id,name) from Student"); // 先要new带参数的构造方法

		List<Student> list = query.list();

		for (Student s : list) {
    
     // 循环输出查询出来的数据

			System.out.println(s);
		}

		// 4、提交事务
		t.commit();
		// 5、关闭资源
		session.close();

	}

Partial retrieval (projection 2)

public void portionQueryTest2() {
    
    

			// 1、得到session
			Session session = HibernateUtil.getSession();
			// 2、开启事务
			Transaction t = session.beginTransaction();
			// 3、操作
			// 1、编写hql,调用session.createQuery创建查询对象

			// Query query = session.createQuery("select id,from from Student");// 在hql语言中
			// 这样写是不能转译的
			Query query = session.createQuery("select s.name, s.sex from Student as s"); // 先要new带参数的构造方法

			List<Student> list = query.list();
			
			Iterator iter= list.iterator();

			while(iter.hasNext()) {
    
    
				
				//每条记录被封装成object数组
				Object[] obj= (Object []) iter.next();
				
				System.out.println(obj[0]+" "+obj[1]);
				
			}

			// 4、提交事务
			t.commit();
			// 5、关闭资源
			session.close();

		}

Conditional query using where statement

public void paramQueryTest() {
    
    

		// 1、得到session
		Session session = HibernateUtil.getSession();
		// 2、开启事务
		Transaction t = session.beginTransaction();
		// 3、操作
		// 1、编写hql,调用session.createQuery创建查询对象

		Query query = session.createQuery("from Student as s where s.name='lisi'"); // 先要new带参数的构造方法

		List<Student> list = query.list();

		for (Student s : list) {
    
     // 循环输出查询出来的数据

			System.out.println(s);
		}

		// 4、提交事务
		t.commit();
		// 5、关闭资源
		session.close();

	}

Conditional query using ? Placeholder

public void paramQueryTest2() {
    
    

		// 1、得到session
		Session session = HibernateUtil.getSession();
		// 2、开启事务
		Transaction t = session.beginTransaction();
		// 3、操作
		// 1、编写hql,调用session.createQuery创建查询对象

		Query query = session.createQuery("from Student as s where s.name like ?1 and s.sex >=?2"); // 先要new带参数的构造方法

		//问题:使用占位符,低版本是直接可以使用?,但是现在5版本要求是否是?0这样的方式?
//		query.setString(0, "lisi");
		query.setParameter(1, "li%");
		query.setParameter(2, "15");
		List<Student> list = query.list();

		for (Student s : list) {
    
     // 循环输出查询出来的数据

			System.out.println(s);
		}

		// 4、提交事务
		t.commit();
		// 5、关闭资源
		session.close();

	}

Conditional query use: placeholder

public void paramQueryTest3() {
    
    

		// 1、得到session
		Session session = HibernateUtil.getSession();
		// 2、开启事务
		Transaction t = session.beginTransaction();
		// 3、操作
		// 1、编写hql,调用session.createQuery创建查询对象

		Query query = session.createQuery("from Student as s where s.name like :name"); // 先要new带参数的构造方法

		//问题:使用占位符,低版本是直接可以使用?,但是现在5版本要求是否是?0这样的方式?
//		query.setString(0, "lisi");
		query.setParameter("name", "li%");
			
		List<Student> list = query.list();

		for (Student s : list) {
    
     // 循环输出查询出来的数据

			System.out.println(s);
		}

		// 4、提交事务
		t.commit();
		// 5、关闭资源
		session.close();

	}

2. Use sql----createSQLQuery

// 使用qbc查询所有数据
	@Test
	public void test1() {
    
    

		Session session = HibernateUtil.getSession();
		session.beginTransaction();
		// 操作
		Criteria criteria = session.createCriteria(Student.class);
		List<Student> ss = criteria.list();

		for (Student s : ss) {
    
    
			System.out.println(s);
		}

		session.getTransaction().commit();
		session.close();
	}

	// qbc查询:只返回一个值
	@Test
	public void test2() {
    
    

		Session session = HibernateUtil.getSession();
		session.beginTransaction();
		// 操作

		Criteria criteria = session.createCriteria(Student.class);
		criteria.add(Restrictions.eq("id", 7));// 相当于查询id=7这条记录

		Student s = (Student) criteria.uniqueResult();

		System.out.println(s);
		session.getTransaction().commit();
		session.close();
	}

	// qbc查询:多条件查询 and
	@Test
	public void test3() {
    
    

		Session session = HibernateUtil.getSession();
		session.beginTransaction();
		// 操作

		Criteria criteria = session.createCriteria(Student.class);
		criteria.add(Restrictions.eq("id", 7)).add(Restrictions.eq("name", "lisi"));// 相当于where id=7 and name="lisi"
		List<Student> ss = criteria.list();

		for (Student s : ss) {
    
    
			System.out.println(s);
		}

		session.getTransaction().commit();
		session.close();
	}

	// qbc查询:多条件查询 or
	@Test
	public void test4() {
    
    

		Session session = HibernateUtil.getSession();
		session.beginTransaction();
		// 操作

		Criteria criteria = session.createCriteria(Student.class);

		// 相当于where id=1 or name="zhagnsan"
		criteria.add(Restrictions.or(Restrictions.eq("id", 7), Restrictions.eq("name", "zhagnsan")));

		List<Student> ss = criteria.list();

		for (Student s : ss) {
    
    
			System.out.println(s);
		}

		session.getTransaction().commit();
		session.close();
	}

	// qbc查询:分页查询
	@Test
	public void test5() {
    
    

		Session session = HibernateUtil.getSession();
		session.beginTransaction();
		// 操作

		Criteria criteria = session.createCriteria(Student.class);

		criteria.setFirstResult(2);
		criteria.setMaxResults(3);

		List<Student> ss = criteria.list();

		for (Student s : ss) {
    
    
			System.out.println(s);
		}

		session.getTransaction().commit();
		session.close();
	}

3. Use third-party libraries (often used) – createCriteria

// 使用sql语句查询所有信息
	@Test
	public void findAll() {
    
    
		
	 Session session= HibernateUtil.getSession();
	 session.beginTransaction();
	 
	 //操作
	 SQLQuery sqlQuery=session.createSQLQuery("select * from t_student");
	 
	 List list= sqlQuery.list();
	 
	 for(int i=0;i<list.size();i++) {
    
    
		 
		 Object[] objs=(Object[]) list.get(i); //对象放入数组中
		 
		 //循环输出数组中的元素
		 for(int j=0;j<objs.length;j++) {
    
    
			 
			 System.out.println(objs[j]+" ");
		 }
		 System.out.println();
		 
	 }
	 
	 session.getTransaction().commit();
	 session.close();
		
	}

Guess you like

Origin blog.csdn.net/qq_49023625/article/details/124103454