6、原生SQL
JPA除了对JPQL提供支持外,还对原生SQL语句也提供了支持 。下面小节一起来看看吧 。6、1 查询单个示例代码:
@Testpublic void getSingle() {EntityManager entityManager = JPAEntityFactory.getEntityManager();// 等同于 获取连接String sql = "select cid, cname, credit, end, num, start " +"from yootk.course where cid = ?1";Query query = entityManager.createNativeQuery(sql); // 预处理sqlquery.setParameter(1, 1);Course course = (Course) query.getSingleResult();loggerFactory.info("【执行结果】:{}",course ); // 执行sqlJPAEntityFactory.close();// 关闭连接}
执行结果:java.lang.ClassCastException: class [Ljava.lang.Object; cannot be cast to class look.word.po.Course修改代码
意思是 query.getSingleResult() 不能转换成 Course类
文章插图
执行结果:
【执行结果】:[1, Spring编程实战, 5, 2022-12-30, 88, 2022-09-19]6、2 查询多个实例代码:
可以发现,query.getSingleResult() 返回的是一个数组对象 。不能转换成Course也是正常的 。后续文章会解决这个问题
@Testpublic void getAllCourse() {EntityManager entityManager = JPAEntityFactory.getEntityManager();// 等同于 获取连接String sql = "select cid, cname, credit, end, num, start " +"from yootk.course ";Query query = entityManager.createNativeQuery(sql); // 预处理sqlList list = query.getResultList();// 执行sqlfor (Object o : list) {loggerFactory.info("【执行结果】:{}", o);}JPAEntityFactory.close();// 关闭连接}
执行结果:【执行结果】:[1, Spring编程实战, 5, 2022-12-30, 88, 2022-09-19]6、3 分页模糊查询示例代码:
【执行结果】:[5, SpringCloud编程实战, 5, 2022-12-30, 88, 2022-09-19]
【执行结果】:[6, SSM编程实战, 5, 2022-12-30, 88, 2022-09-19]
@Testpublic void getAllCourseSplit() {int current = 2;int lineSize = 3;String keyWord = "%Spring%";EntityManager entityManager = JPAEntityFactory.getEntityManager();// 等同于 获取连接String sql = "select cid, cname, credit, end, num, start " +"from yootk.course where cname like :k1";Query query = entityManager.createNativeQuery(sql); // 预处理sqlquery.setFirstResult((current - 1) * lineSize); // 等同于 limit ?query.setMaxResults(lineSize); //// 等同于 limit ?,?query.setParameter("k1", keyWord);List list = query.getResultList();// 执行sqlfor (Object o : list) {loggerFactory.info("【执行结果】:{}", o);}JPAEntityFactory.close();// 关闭连接
执行结果:执行的sql: select cid,cname,credit,end,num,start from yootk.course where cname like ? limit ?,?6、4 count
统计 模糊匹配到的行数
//统计行数@Testpublic void getAllCourseCount() {String keyWord = "%Spring%";EntityManager entityManager = JPAEntityFactory.getEntityManager();// 等同于 获取连接String sql = "select count(*) from yootk.course where cname like :k1";Query query = entityManager.createNativeQuery(sql); // 预处理sqlquery.setParameter("k1", keyWord);loggerFactory.info("【执行结果】:{}", query.getSingleResult());// 执行sqlJPAEntityFactory.close();// 关闭连接}
执行结果执行的sql: select count(*) from yootk.course where cname like ?6、5 更新
例如:我们想把学分小于5的课程全部提高到5
- 注意到:我们当前是未开启事务的,观察程序执行结果 。
@Testpublic void getUpdateCourse() {// 例如:我们想把学分小于5的课程全部提高到5EntityManager entityManager = JPAEntityFactory.getEntityManager();// 等同于 获取连接//entityManager.getTransaction().begin(); // 开启事务String sql = "update yootk.course as c set c.credit = ?1 where c.credit <?2";Query query = entityManager.createNativeQuery(sql); // 预处理sqlquery.setParameter(1, 5);query.setParameter(2, 5);loggerFactory.info("【执行结果】:{}", query.executeUpdate());// 执行sql//entityManager.getTransaction().commit(); // 提交事务JPAEntityFactory.close();// 关闭连接}
经验总结扩展阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 五光十色的鲜花对吗
- 500KB的电子书有多少字
- 最新五行穿衣指南2023年10月22日 2023年穿衣五行颜色
- 2024年十月廿八出生陆姓女孩名字生辰八字五行查询
- 2024年十月廿八出生叶姓女孩名字生辰八字五行查询
- 2024年十月廿八出生李姓女孩名字生辰八字五行查询
- 2024年十月三十出生杨姓女孩名字叫什么生辰八字五行查询
- 2024年十月三十出生谭姓女孩名字叫什么生辰八字五行查询
- 2024年十月三十出生夏姓女孩名字叫什么生辰八字五行查询
- 阎姓女孩名字2024年11月28日出生的生辰八字五行查询