SpringDataJpa入门之三种查询方式(二)

一、使用JPQL查询

jpql:面向对象操作(查询数据字段和表名可以直接写成实体类的属性和类名)
sql:面向数据库操作

1.编写Dao层接口:

1.单个条件查询

  • 使用jpql中的@Query自定义查询语句
  • ?:代表占位符
  • 1:代表参数1
/**
     * 根据姓名查询用户
     * 使用jpql中的@Query自定义查询语句
     *  ?:代表占位符
     *  1:代表参数1
     *
     */
    @Query(value = "from Users where name = ?1")
    public abstract Users  findUsersByName(String name);

2.多个条件查询

/**
     *  根据姓名和id查询
     */
    @Query(value = "from Users where name = ?2 and id = ?1")
    public abstract Users findUsersByNameAndId(Integer id,String name);

3.update数据

  • @Query : 代表的是进行查询 ,声明此方法是用来查询
  • @Modifying : 当前执行的是一个更新操作
/**
     *  根据id修改姓名
     * @Query : 代表的是进行查询
     *      声明此方法是用来查询
     * @Modifying
     *      当前执行的是一个更新操作
     */
    @Query(value = "update from Users set name = ?1 where id = ?2")
    @Modifying
    public abstract void updateUsers(String name,Integer id);

2.测试接口

1.单个条件查询

 @Test
    public void findByName(){
        Users wm123 = usersDao.findUsersByName("wm123");
        System.out.println(wm123);
    }

2.多个条件查询

 @Test
    public void findUsersByNameAndId(){
        Users wm123 = usersDao.findUsersByNameAndId(1, "wm123");
        System.out.println(wm123);
    }

3.更新信息

  • springDataJpa中使用jpql完成 更新/删除操作
  • 需要手动添加事务支持 @Transactional
  • 默认执行结束之后,会回滚事务,需要添加不自动回滚
  • @Rollback :设置是否自动回滚
 /**
     * 测试jpsql的更新操作
     *  springDataJpa中使用jpql完成 更新/删除操作
     *      需要手动添加事务支持
     *      默认执行结束之后,会回滚事务
     * @Rollback :设置是否自动回滚
     *
     */
    @Test
    @Transactional
    @Rollback(value = false)
    public void updateTest(){
        usersDao.updateUsers("wmwd123",2);
    }

二、本地sql编写

1.编写Dao层接口:

  • 使用sql语句查询所有结果集
  • 1.特有的查询:需要在dao层上配合方法
  • 2.在新添加的方法 上,使用注解配置sql查询语句
  • 3.注解@Query:
    value:jpql语句 | sql语句
    nativeQuery : false(使用jpql语句) | true(使用sql语句)
    是否使用本地查询
   /**
     * 使用sql语句查询所有结果集
     *      1.特有的查询:需要在dao接口上配合方法
     *      2.在新添加的方法上,使用注解的形式配置sql查询语句
     *      3.注解: @Query
     *          value : jpql语句  | sql语句
     *          nativeQuery : false(使用jpql查询) | true(使用本地查询:sql查询)
     *          是否使用本地查询
     */
    @Query(value = "select * from Users ",nativeQuery = true)
    public abstract List<Users> findAllBySQL();

2.测试接口:

 @Test
    public void findTest(){
        List<Users> allBySQL = usersDao.findAllBySQL();
        System.out.println(allBySQL);
    }

三、方法名称规则查询

1.编写Dao层接口:

  • 方法名称规则查询:是对jpql查询,更加深入的一层封装,我们只需要按照SpringDataJpa提供的方法名称规则定义方法,不需要再去配置jpql语句

findBy开头:代表查询
对象中属性的名称(首字母大写)
含义:根据属性名称进行查询
在springdatajpa的运行阶段
会根据方法名称进行解析 findBy from xxx(实体类)
属性名称 where name =
1.findBy+属性名(根据属性名称进行查询)
2.findBy+属性名+查询方式(Like|isnull)
3.多条件查询
findBy+属性名+查询方式+多条件的连接符(and|or)+属性名+查询方式

 /**
     * 方法名称规则查询
     *      是对jpql查询,更加深入的一层封装
     *      我们只需要按照SpringDataJpa提供的方法名称规则定义方法,不需要再去配置jpql语句
     *          findBy开头:代表查询
     *              对象中属性的名称(首字母大写)
     *          含义:根据属性名称进行查询
     *
     *      在springdatajpa的运行阶段
     *          会根据方法名称进行解析 findBy from xxx(实体类)
     *                               属性名称 where name =
     *     1.findBy+属性名(根据属性名称进行查询)
     *     2.findBy+属性名+查询方式(Like|isnull)
     *     3.多条件查询
     *     findBy+属性名+查询方式+多条件的连接符(and|or)+属性名+查询方式
     *
     */

    public abstract Users findByIdAndNameLike(Integer id,String name);

2.测试接口:

  @Test
    public void findLikeName(){
        Users users = usersDao.findByIdAndNameLike(1, "wm%");
        System.out.println(users);
    }

你可能感兴趣的:(新姿势)