Hibernate基础

网友投稿 564 2022-11-22

Hibernate基础

Hibernate基础

1.javaEE常用的开源框架

2.Hibernate简介

ORM: Object RalationShip Mapping 实体关系映射框架table class数据表-----> 实体类字段 ------> 属性

3. Hibernate环境搭建

3.1 创建测试表

3.2 插入测试表

3.3 新建Java工程

org.hibernate hibernate-core 5.0.1.Final mysql mysql-connector-java 5.1.38

3.5 配置Hibernate的配置文件:hibernate.cfg.xml

3.6 配置文件:hibernate.cfg.xml

org.hibernate.dialect.MySQLDialect jdbc:mysql://192.168.132.128:3306/hibernatedb com.mysql.jdbc.Driver root 123

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 list = query.list(); for (Emp emp : list) { System.out.println(emp); } session.close(); }

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 list = session.createQuery("from Emp").list(); //适合查询少量的数据 for (Emp emp : list) { System.out.println(emp); } }

方式2:

@Test public void testQuery2(){ Iterator it = session.createQuery("from Emp").iterate(); //性能高 while(it.hasNext()){ Emp emp = it.next(); System.out.println(emp); } }

5.2 投影查询

查询表中的某几列

@Test public void testQuery3(){ List names = session.createQuery("select ename from Emp").list(); for (String s : names) { System.out.println(s); } } @Test public void testQuery4(){ List values = session.createQuery("select ename,sal,hiredate from Emp").list(); for (Object[] o : values) { System.out.println(o[0]+"---"+o[1]+"---"+o[2]); } } @Test public void testQuery5(){ // new Emp(ename,sal,hiredate) 调用Emp类的构造方法 让构造方法封装为对象 List list = session.createQuery("select new Emp(ename,sal,hiredate) from Emp").list(); for (Emp e : list) { System.out.println(e); } }

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 list = query.list(); for (Object[] o : list) { System.out.println(o[0]+"--"+o[1]+"--"+o[2]); } }

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 list = query2.list(); for (Emp emp : list) { System.out.println(emp); } System.out.println("当前页码:"+pageIndex); System.out.println("每页大小:"+pageSize); System.out.println("数据总量:"+totalCount); System.out.println("总页数:"+pageCount); }

5.6 条数限制

@Test public void testQuery8(){ Query query = session.createQuery("from Emp order by sal desc"); query.setFirstResult(0); query.setMaxResults(5); List list = query.list(); for (Emp emp : list) { System.out.println(emp); } }

6.Hibernate对象的三种状态(面试题)

7.Hibernate逆向生成表

8.Hibernate常见的类型

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:IO流专题-缓冲流
下一篇:springboot动态调用实现类方式
相关文章

 发表评论

暂时没有评论,来抢沙发吧~