zoukankan      html  css  js  c++  java
  • JPA学习笔记四:理论篇之CRUD

    定义一个TestObjDao接口继承自JpaRepository接口

    public interface TestObjDao extends JpaRepository<TestObj, Integer> {
        // 继承其父接口中的全部方法
    }
    

    1. save : 保存/更新

    如果指定了对象id,如在数据库中查到则更新;如未查到则添加;
    如果没有指定id,则添加。
    如:

    TestObj testObj = new TestObj();
    testObj.setName("Amy");
    testObj.setAge(1);
    
    testObjDao.save(testObj);
    

    2. 查询

    使用JpaRepository接口提供,并非自定义的查询方法
    查到后封装到一个Optional中
    列表查:findAll(),该方法可指定参数,如Sort,及升序、降序,分页查看。
    分页查:在JpaRepository父接口中,

    Pageable pageable = PageRequest.of(0, 2, Sort.Direction.DESC, "id");
    testObjDao.findAll(pageable);
    

    3. 删除

    分为两步:
    Step1: 根据id select查询到待删除记录
    Step2: 删除该记录

    4. 自定义查询

    都是通过实体来操作数据库,而非sql
    1)什么时候使用:当JpaRepository提供的接口无法满足业务需求时,使用自定义查询
    2)自定义查询写在TestObjDao中,有严格定义规范:
    List findByName(...)
    其中,返回值根据业务需要进行设置;
    方法名必须为findByXxx,Xxx需严格为属性名称;
    参数也根据业务需要进行设置。
    此外,也可通过方法名来实现条件查询,如findByNameAndAge、findByIdBetweenOrderById(Integer minId, IntegerMaxId)等。

    5. jpql查询

    如觉得自定义查询方法名比较繁琐,也可使用jpql查询。
    jpql是Java持久化语言,是对对象实体进行的查询。
    具体可为:
    SELECT attrName1, attrName2 FROM entityname
    需注意:
    1)不能出现数据库中的表名
    2)不能出现SELECT *
    3) SELECT等关键字不区分大小写
    4) 属性、实体名严格区分大小写

    @Query(value = "SELECT attrName1, attrName2 FROM entityname") 返回为Object[],需用Arrays.toString转换
    可用 @Query(value = "SELECT new ...(包名.类名) FROM entityname") 来返回对象本身

    步履不停
  • 相关阅读:
    Poj 2406--Power Strings(KMP)
    杭电2682--Tree(Prim)
    杭电1827--Summer Holiday(SCC + 缩点)
    杭电2181--哈密顿绕行世界问题(Dfs)
    杭电1269--迷宫城堡(强连通分量)
    南阳21--三个水杯(Bfs)
    杭电1203--I NEED A OFFER!(01背包)
    e.send和next(e)的区别
    python中yield与return的用法与区别
    迭代器
  • 原文地址:https://www.cnblogs.com/yuanyunjing/p/15414749.html
Copyright © 2011-2022 走看看