分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

hibernate的入门crud

发布时间:2023-09-06 01:08责任编辑:苏小强关键词:暂无标签
package com.test;import com.demo.User;import org.hibernate.HibernateException;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.junit.Test;import java.util.Arrays;import java.util.List;/* * 没有借住HibernateUtil小工具 */public class crudTest { ???private static SessionFactory sessionFactory; // 工厂只有一个 根据配置文件来生成的 ???static { ???????Configuration cfg = new Configuration(); ???????// cfg.configure();//默认自动配置src下的hibernate.cfg.xml ???????// cfg.addResource("com/demo/user.hbm.xml");//增加一个映射文件 在配置里面已经配置过了) ???????// cfg.addClass(User.class);//去user类所在的包中查找名称为User,后缀为.hbm.xml的文件 ???????cfg.configure("hibernate.cfg.xml");// 读取指定的主配置文件(位置也可不需指定,默认自动查找src下的cfg.xml) ???????sessionFactory = cfg.buildSessionFactory(); // 生成session工厂 ???} ???@Test ???public void testSave() throws Exception { ???????User u = new User(); ???????u.setName("bb"); ???????u.setPassword("1563"); ???????u.setType("root"); ???????Session ses = sessionFactory.openSession(); // 打开一个新的session ???????Transaction ts = ses.beginTransaction(); // 开始事务---- 创建事务的对象ts ???????try { ???????????ses.save(u);// 往表user1存数据 ???????????ts.commit();// 提交事务 ???????} catch (HibernateException he) { ???????????he.printStackTrace(); ???????????System.out.println("死了"); ???????????ts.rollback();//事务的回滚 ???????} finally { ???????????ses.close(); ???????????sessionFactory.close(); ???????????System.out.println("插入成功"); ???????} ???} ???@Test ???public void testGet() throws Exception { ???????Session session = sessionFactory.openSession(); ???????Transaction tx = session.beginTransaction(); ???????User user = (User) session.get(User.class, 4);// 获取User表中的字段1 ???????System.out.println(user);// toString方法已经重写 [User:id=1,name=hoobey,password=456,type=admin] ???????tx.commit(); ???????session.close(); ???} ???@Test ???public void testHQL() { ???????Session session = sessionFactory.openSession(); ???????Transaction tx = session.beginTransaction(); ???????String hql = null; ???????// 执行查询 ???????// 1.简单的查询 ???????/* hql = "FROM User"; */ ???????// 2.带上过滤条件以及排序from User as u --使用别名 as可以省略 ???????/* hql="from User u where u.id = 1"; */ ???????// 3.指定select子句 ?????????hql = "select u.id , u.name from User u";//查询多个指定的列时 返回的是数组 输出使用Array.toString() ?????????List list = session.createQuery(hql).list(); ?????????for(Object obj : list){ ?????????????if(obj.getClass().isArray()){ ?????????????????System.out.println(Arrays.toString((Object[])obj));//查询返回的数组时 ???????????}else{ ?????????????????System.out.println(obj);//查询返回的是原属性的类型时 直接输出 } ???????????} ?????????} ???????// ---------------第二部分的学习----------------------------- ???????// 1,聚集函数:count(), max(), min(), avg(), sum()// ???????hql = "SELECT COUNT(*) FROM User"; // 返回的结果是Long型的 ???????// hql = "SELECT min(id) FROM Employee"; // 返回的结果是id属性的类型// ???????Number result = (Number) session.createQuery(hql).uniqueResult();// ???????System.out.println(result.getClass());// ???????System.out.println(result); ???????// 2,分组: Group By ... Having ???????// hql = "SELECT e.name,COUNT(e.id) FROM Employee e GROUP BY e.name"; ???????// hql = "SELECT e.name,COUNT(e.id) FROM Employee e GROUP BY e.name HAVING count(e.id)>1"; ???????// hql = "SELECT e.name,COUNT(e.id) FROM Employee e WHERE id<9 GROUP BY e.name HAVING count(e.id)>1"; ???????// --- ???????// hql = "SELECT e.name,COUNT(e.id) " + // ???????// "FROM Employee e " + // ???????// "WHERE id<9 " + // ???????// "GROUP BY e.name " + // ???????// "HAVING count(e.id)>1 " + // ???????// "ORDER BY count(e.id) ASC"; ???????// --- ???????// hql = "SELECT e.name,COUNT(e.id) AS c " + // ???????// "FROM Employee e " + // ???????// "WHERE id<9 " + // ???????// "GROUP BY e.name " + // ???????// "HAVING count(e.id)>1 " + // 在having子句中不能使用列别名 ???????// "ORDER BY c ASC"; // 在orderby子句中可以使用列别名 ???????// 3,连接查询 / HQL是面向对象的查询 ???????// >> 内连接(inner关键字可以省略) ???????// hql = "SELECT e.id,e.name,d.name FROM Employee e JOIN e.department d"; ???????// hql = "SELECT e.id,e.name,d.name FROM Employee e INNER JOIN e.department d"; ???????// >> 左外连接(outer关键字可以省略) ???????// hql = "SELECT e.id,e.name,d.name FROM Employee e LEFT OUTER JOIN e.department d"; ???????// >> 右外连接(outer关键字可以省略) ???????// hql = "SELECT e.id,e.name,d.name FROM Employee e RIGHT JOIN e.department d"; ???????// 可以使用更方便的方法 ???????// hql = "SELECT e.id,e.name,e.department.name FROM Employee e"; ???????// 4,查询时使用参数 ???????// >> 方式一:使用‘?‘占位 ???????// hql = "FROM Employee e WHERE id BETWEEN ? AND ?"; ???????// List list = session.createQuery(hql)// ???????// .setParameter(0, 5)// 设置参数,第1个参数的索引为0。 ???????// .setParameter(1, 15)// ???????// .list(); ???????// >> 方式二:使用变量名 ???????// hql = "FROM Employee e WHERE id BETWEEN :idMin AND :idMax"; ???????// List list = session.createQuery(hql)// ???????// .setParameter("idMax", 15)// ???????// .setParameter("idMin", 5)// ???????// .list(); ???????// 当参数是集合时,一定要使用setParameterList()设置参数值 ???????// hql = "FROM Employee e WHERE id IN (:ids)"; ???????// List list = session.createQuery(hql)// ???????// .setParameterList("ids", new Object[] { 1, 2, 3, 5, 8, 100 })// ???????// .list(); ???????// 5,使用命名查询 ???????// Query query = session.getNamedQuery("queryByIdRange"); ???????// query.setParameter("idMin", 3); ???????// query.setParameter("idMax", 10); ???????// List list = query.list(); ???????// 6,update与delete,不会通知Session缓存 ???????// >> Update// ????????int result = session.createQuery(//// ????????"UPDATE User e SET e.name=? WHERE user_id = 2")//// ????????.setParameter(0, "hghg")//// ????????.executeUpdate(); // 返回int型的结果,表示影响了多少行。// ????????System.out.println("result = " + result); ???????// ???????User user = (User)session.get(User.class, 1);// ???????System.out.println(user.getName()); ???????// >> Delete ???????/* ????????* int result = session.createQuery(// "DELETE FROM Employee e WHERE id>15")// .executeUpdate(); // 返回int型的结果,表示影响了多少行。 System.out.println("result = " + result); ????????*/ ???????// ----- 执行查询并显示结果 ???????// // List list = session.createQuery(hql).list(); ???????// for (Object obj : list) { ???????// if (obj.getClass().isArray()) { ???????// System.out.println(Arrays.toString((Object[]) obj)); ???????// } else { ???????// System.out.println(obj); ???????// } ???????// } ???????tx.commit(); ???????session.close(); ???}}

hibernate的入门crud

原文地址:http://www.cnblogs.com/hoobey/p/7470773.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved