探索app小游戏的多样化发展与未来趋势
550
2022-11-22
Hibernate基础
1.javaEE常用的开源框架
2.Hibernate简介
ORM: Object RalationShip Mapping 实体关系映射框架table class数据表-----> 实体类字段 ------> 属性
3. Hibernate环境搭建
3.1 创建测试表
3.2 插入测试表
3.3 新建Java工程
3.5 配置Hibernate的配置文件:hibernate.cfg.xml
3.6 配置文件:hibernate.cfg.xml
org.hibernate.dialect.MySQLDialect
3.7 创建实体类
3.8 创建映射文件:Emp.hbm.xml
3.9 配置映射文件
3.10 测试
@Test public void test1(){ //1.加载配置文件 Configuration configure = new Configuration().configure(); SessionFactory sessionFactory = configure.buildSessionFactory(); //3.获取session (与数据库的会话) Session session = sessionFactory.openSession(); //4.获取一个查询接口实现 Query query = session.createQuery("from com.bruceliu.bean.Emp"); // HQL语句: Hibernate Query Lanauage List
3.11 Hibernate显示生成的SQL
4.Hibernate基础使用
4.1新增
Hibernate执行增删改的时候需要开启事务支持
@Test public void testAdd(){ Transaction tx = session.beginTransaction(); //开启事务 try { Emp e=new Emp("猪八戒", "弼马温", 7369, new Date(), 2000.0, 200, 20); Serializable id = session.save(e); //新增数据库,返回生成的主键值 System.out.println("新增成功,主键为:"+id); tx.commit();//提交事务 } catch (Exception e) { tx.rollback();//回滚事务 e.printStackTrace(); } }
4.2 根据主键查询
方式1
@Test public void testGetById(){ Query query = session.createQuery("from Emp where empno=?"); query.setParameter(0, 7936); Emp e = (Emp) query.uniqueResult(); // 查询唯一的一条结果集 uniqueResult() 如果有多条将会报错!如果查询不到返回 null System.out.println(e); }
方式2
@Test public void testGetById2(){ Emp e = session.get(Emp.class, 7936); //根据主键查询 System.out.println(e); } @Test public void testGetById3(){ Emp e = session.load(Emp.class, 7936); //根据主键查询 System.out.println(e); }
4.3 更新
@Test public void testUpdate(){ Transaction tx = session.beginTransaction(); try { Emp emp = session.get(Emp.class, 7936); emp.setEname("猪无能"); emp.setDeptno(30); emp.setJob("天棚元帅"); emp.setSal(5000.0); session.update(emp); //更新 tx.commit(); System.out.println("更新成功~"); } catch (Exception e) { tx.rollback(); e.printStackTrace(); } }
4.4 删除
方式1
@Test public void testDelete(){ Transaction tx = session.beginTransaction(); try { Query query = session.createQuery("delete from Emp where empno=?"); query.setParameter(0, 7936); int count = query.executeUpdate(); System.out.println(count); //返回受影响的行数 tx.commit(); } catch (Exception e) { tx.rollback(); e.printStackTrace(); } }
方式2
@Test public void testDelete2(){ Transaction tx = session.beginTransaction(); try { Emp e=new Emp(); e.setEmpno(7937); session.delete(e); //根据主键查询 System.out.println("删除成功~~"); tx.commit(); } catch (Exception e) { tx.rollback(); e.printStackTrace(); } }
5. Hibernate查询
5.1 全查
方式1:
@Test public void testQuery1(){ List
方式2:
@Test public void testQuery2(){ Iterator
5.2 投影查询
查询表中的某几列
@Test public void testQuery3(){ List
5.3 聚合查询
Max() 求最大值Min() 求最小值Avg() 求平均值Sum() 求综合Count() 求总数
/* * 查询20号部门的最高薪资 最低薪资 平均薪资 */ @Test public void testQuery6(){ Query query = session.createQuery("select max(sal),min(sal),avg(sal) from Emp where deptno=?"); query.setParameter(0, 20); Object[] result = (Object[]) query.uniqueResult(); System.out.println(result[0]+"--"+result[1]+"--"+result[2]); }
5.4 分组查询
@Test public void testQuery7(){ Query query=session.createQuery("select avg(sal),count(empno),deptno from Emp group by deptno having count(empno)>=5 order by deptno desc"); List
5.5 分页查询
@Test public void yesyQueryPage(){ //1.获取数据总量 Query query1 = session.createQuery("select count(empno) from Emp"); int totalCount = Integer.parseInt(query1.uniqueResult().toString()); //2.计算总页数 int pageIndex=5; //当前页面 int pageSize=3; //每页大小 int pageCount= (totalCount%pageSize==0)?(totalCount/pageSize):(totalCount/pageSize+1); //3.每页数据 Query query2 = session.createQuery("from Emp"); query2.setFirstResult((pageIndex-1)*pageSize); //设置开始查询的位置 query2.setMaxResults(pageSize); //设置每次查询的个数 List
5.6 条数限制
@Test public void testQuery8(){ Query query = session.createQuery("from Emp order by sal desc"); query.setFirstResult(0); query.setMaxResults(5); List
6.Hibernate对象的三种状态(面试题)
7.Hibernate逆向生成表
8.Hibernate常见的类型
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~