hibernate执行数据库操作的三种方式

hibernate执行数据库操作的三种方式分别是:HQL查询、Criteria、原生SQL。

1.HQL

HQL没有表和字段的概念,只有类、对象和属性的概念

适用:多表查询,不复杂

查询语句中使用对象名,而不是表名

注意:表名大小写不敏感,对象名大小写敏感

public class Test2 extends HibernameCommon{
	
    /*
	 * 1. 查询单条记录
	 */
	public void test1() throws Exception {
		Session session = getSession();
		// from 后跟的是对象的类名称, sql中跟的是表名
		String hql = "from User where id = 1";
		// query 
		Query query = session.createQuery(hql);
		Object obj = query.uniqueResult();
		User user = (User) obj ;
		System.out.println(user);
		session.close();
	}
    
    
    
    /*
	 * 数字作为占位符的情况(注意hibernate的占位符从0开始)
	 */
	public void test2(Integer user_id) throws Exception {
		Session session = getSession();
		// from 后跟的是对象的类名称, sql中跟的是表名
		String hql = "from User where id = ?0";
		// query 
		Query query = session.createQuery(hql);
		// hibernate 中的占位符是从0开始的!
		query.setParameter(0, user_id);
		Object obj = query.uniqueResult();
		User user = (User) obj ;
		System.out.println(user);
		session.close();
	}
    
   	
    
    /*
	 * 变量名直接作为占位符的情况(以user_id为例)
	 */
	public void test3(int user_id) throws Exception {
		Session session = getSession();
		// from 后跟的是对象的类名称, sql中跟的是表名
		String hql = "from User where id = :user_id";
		// query 
		Query query = session.createQuery(hql);
		// hibernate 中的占位符是从0开始的!
		query.setParameter("user_id", user_id);
		Object obj = query.uniqueResult();
		User user = (User) obj ;
		System.out.println(user);
		session.close();
	}
    
    
	/*
	 * 查询多条记录
	 */
	public void test4() throws Exception {
		Session session = getSession();
		String hql = "from User";
		Query query = session.createQuery(hql);
		List<User> list = query.list();
		for(User u : list) {
			System.out.println(u);
		}
		session.close();
	}
    
    
	/*
	 * 分页操作: 比如查询user1表中前5条记录
	 */
	public void test5() throws Exception {
		Session session = getSession();
		String hql = "from User";
		Query query = session.createQuery(hql);
		query.setFirstResult(0); // 第一条记录,记录的起始位置(>0)
		query.setMaxResults(5);  // 最大记录数
		List<User> list = query.list();
		System.out.println(list);
		session.close();
	}


2.Criteria

	/**
	 * 单表查询 Criteria (不推荐)
	 */
	public void test6() throws Exception {
		Session session = getSession();
		Criteria cc = session.createCriteria(User.class);
		cc.add(Restrictions.lt("id",5));
		List<User> list = cc.list();
		System.out.println(list);
		session.close();
	}
	

适用于:简单查询



3.原生SQL

适用:复杂查询

违背了hibernate的跨平台特点,不宜维护,不面向对象,不推荐使用。

	/*
	 * 纯SQL语句 : 可以实现复杂查询 
	 */
	public void test7() throws Exception {
		Session session = getSession();
		String sql = "select * from user1 where id > :userid";
		NativeQuery query = session.createSQLQuery(sql);
		query.setParameter("userid", 5);
		// query将每一条记录封装到了Object[]
		// List<Object[]>
		List<Object[]> list = query.list();
		List<User> userList = new ArrayList<User>();
		for(Object[] objs : list) {
			User user = new User();
			user.setId(Integer.parseInt(objs[0].toString()));
			user.setName(objs[1].toString());
			
			userList.add(user);
		}
		System.out.println(userList);
		session.close();
	}



hibernate增改删查实例

public class Test1 extends HibernateCommon {
	
	private User load;
	private User load2;


	/**
	 * 查询单条数据(session.find())
	 */
	public void selectOne(int num) {
		Session session = getSession();
		// find : 
		// arg0 : 要查询的对象的类的对象
		// arg1 : 参数-> 使用主键字段
		User user = session.find(User.class, num);
		System.out.println("user.id=" + user.getId() + ";user.name =" + user.getName());
		close();
	}
	
	/**
	 * 查询多条数据
	 * session.createQuery("HQL"); 通过hql创建查询对象
	 * query.getResultList();      获取结果集,并将结果集转换为List集合对象。
	 */
	public void findList() {
		Session session = getSession();
		Query query = session.createQuery("from User");
		List<User> resultList = query.getResultList();
		for(User u : resultList) {
			System.out.println(u);
		}
		close();
	}
	
	/**
	 * 添加一条数据
	 */
	public void add(int userId, String userName){
		Session session = getSession();
		// 对象数据封装
		User user = new User();  
		user.setId(userId);
		user.setName(userName);
		
		// 事务操作
		session.beginTransaction();
		session.save(user);
		session.getTransaction().commit();
		
		close();
	}
	
	public void update (int userId, String userName) {
		Session session = getSession();
		/*
		 * load() 在缓存加载对象
		 * arg0 : 加载类的类对象
		 * arg1 : 主键
		 */
		session.beginTransaction();
		
		User user = session.load(User.class, userId);
		user.setName(userName);
		
		session.update(user);
		session.getTransaction().commit();
		close();	
		
	}
	
	public void delete() {
		Session session = getSession();
		
		session.beginTransaction();
		
		User user = session.load(User.class, 2);
		session.delete(user);
		session.getTransaction().commit();
		close();
		
	}
	
	public static void main(String[] args) {
		Test1 t1 = new Test1();
//		t1.selectOne(2);		//单行查询
		
		t1.findList();			//多行查询
		
		t1.add(12, "lsz");		//改名
		
		
		//new Test1().add();
		
//		Factory factory  = new Factory ();
//		Car car = factory.buildCar();
//		Bus bus = factory.buildBus();
		
		
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值