mybatis注解版
一个参数的时候, 参数可以使用Param(’'username") String username,当然也可以使用String username,那么什么时候使用@Param这个注解呢,当方法参数为一个的时候,可以使用,但是前提是你的@select中的查询的时候不能使用 ${} ,只可以使用 #{}
不使用@Param注解的满足条件
- 方法就有一个参数
- 方法上的@Select中的查询语句必须使用#{},而不是 。 小 建 议 , 最 好 不 使 用 {}。小建议,最好不使用 。小建议,最好不使用{},防止sql注入攻击
@Select("select * from user where username=#{username}")
public User findByName(String username);
当参数为多个的时候,这个时候必须使用@Param,否则会报错。
@Select("select * from user where username=#{username} and password=#{password}")
public User findByUser(@Param("username") String username,@Param("password") String password);
SpringDataJPA注解版
nativeQuery指的是原生的sql
@Query(value = "select * from book where name=?1", nativeQuery = true)
List<Book> findByName(String name);
当然你也可以选择不使用原生的sql语句
@Query(value = "select name,author,price from Book b where b.name like %:name%")
List<Book> findByNameMatch(@Param("name") String name);
注意:什么时候使用@Param的问题又来了,在springDataJPA中,如果你想使用?1 ?2 …这种带问号的语句格式,这个时候你就可以不用带@Param,但是你如果使用 :name 这种格式,就必须使用@Param
@Query(value = "select name,author,price from Book b where b.name = :name AND b.author=:author AND b.price=:price")
List<Book> findByNamedParam(@Param("name") String name, @Param("author") String author,
@Param("price") long price);
总结:
- 在springboot中强烈建议使用springDataJPA,Spring官方封装的特别好,我们只需要继承JpaRepository<类,类ID类型>就可以满足需要的基本查询
- 对分页也进行了很好的封装,PageRequest是个很好的分页选择,下个博客我要写关于springBoot中的分页查询以及多条件查询,这个技术我在我的前面博客中提到的项目南阳理工下载中心这个项目中使用到
- 希望我的分享对你有帮助