zoukankan      html  css  js  c++  java
  • SpringData学习02

    滴水川石

    关于Springdata自带的一些关键字查询就不做记录了,不能完成复杂SQL,实际工作中不会使用。

    写个样子:

       /**
         * Repository 声明方法的规范
         * 1. 查询以 find | read | get 开头
         * 2. 涉及到条件查询的时候,需要使用关键字(首字母大写)连接
         * */
        //根据名称查询
        Person getByName(String name);

    1、关于 Repository

    其子类后边再说,这里先大概了解 Repository

    1.1.Repository 接口是一个空接口,即标记接口
    1.2.若我们定义的接口继承类了Repository接口,则该接口会被Spring容器识别为一个Repository Bean,纳入到IOC容器中。
        extends Repository<Person, Integer>
     1.3.也可以通过 @RepositoryDefinition 注解声明
        @RepositoryDefinition(domainClass = Person.class, idClass = Integer.class)

     2、关于查询 

    2.1 使用 @Query 注解查询(无参)

    @Query("SELECT p FROM Person p")
    List<Person> getPersons();

     自动解析执行的SQL:

     2.2 占位符 传参

    @Query("SELECT p FROM Person p WHERE p.name = ?1 AND p.age = ?2")
    Person getPersonByNameAndAge(String name,Integer age);

     占位符传参的要求是 参数传递必须按照占位符的顺序

     2.3 命名参数绑定传参

    @Query("SELECT p FROM Person p WHERE p.name = :name AND p.age = :age")
    Person getPersonByNameAndAge2(@Param("age") Integer age, @Param("name") String name);

    命名参数绑定可以不要求传参顺序

     

    注意实参 的 传递和形参的名称没有任何关系

     2.4 使用原生SQL进行查询

    //使用原生SQL查询
        @Query(value="SELECT * FROM jpa_persons", nativeQuery=true)
        List<Person> getPersonList();

    注意要设置 : nativeQuery=true

     

     3、关于更新

    需要注意:

      需要 @Modifying 声明

    //更新
        @Modifying
        @Query(value="UPDATE Person p SET p.name = :name WHERE p.id = :id")
        int updatePersonNameById(@Param("id")Integer id, @Param("name")String name);

          更新的方法需要添加事务     

     

         事务在service层添加

    @Service
    public class PersonService {
    
        @Autowired
        private PersonRepository pRepository;
        
        @Transactional
        public void updateNameById(String name,Integer id){
            pRepository.updatePersonNameById(id, name);
        }
    }

     注意要在配置文件中开启自动扫描包 

     否则@Service 注解扫描不到

    <!-- 配置自动扫描的包 -->
        <context:component-scan base-package="com.cfb.learn"></context:component-scan>

     

    修改成功

     小结归纳:

    1.可以通过自定义的JPQL完成 UPDATE 和 DELETE 操作. 注意:JPQL不支持使用INSERT
    2.在@Query注解中编写JPQL语句,但必须使用@Modifying注解进行修饰,以通知SpringData这是一个update或delete操作
    3.UPDATE 或 DELETE 操作需要使用事务。此时需要在service层的方法上添加事务操作
    ::默认情况下SpringData的每个操作上有事务,但都是一个只读事务,他们不能完成修改操作

    —————————————————————————————————————————————————————————————————————————无论如何,心平气和

  • 相关阅读:
    vim 插件之NERD tree
    vim 插件之supertab
    离开页面时发送请求
    修改属性item1(1变化)
    node+express 中安装nodemon实时更新server.js
    vue封装element中table组件
    mysql常用语句
    mysql新建表
    node+express POST请求
    node+express 发送get请求
  • 原文地址:https://www.cnblogs.com/cfb513142804/p/7233561.html
Copyright © 2011-2022 走看看