Spring Data JPA的常见使用

目录

创建实体类

创建接口继承JspRepository

nativeQuery原生sql

参数处理

更新操作

if 动态参数设置 

集合参数传递

分页处理


内容

创建实体类

@Data  //lombok
@Entity //当前是实体类
@Table(name = "user_table") //映射的表名
public class User {
    @Id  //主键
    @GeneratedValue(strategy = GenerationType.IDENTITY)  //主键生成策略为自增
    private BigInteger userId;
    private String userName;
}

创建接口继承JspRepository

//创建接口继承JpaRepository  泛型1是实体类名   泛型2主键数据类型
interface UserRepository extends JpaRepository<User, BigInteger> {
    //最基本用法 会自动映射封装 注意:表名处使用User实体名 它会自动映射为user_table , hql半自动化语法
    @Query("select * from User")
    List<User> getUserList();  
}

nativeQuery原生sql

//nativeQuery表示是原生的sql, 不需要框架帮我们处理  这里表名就必须写user_table 不能写User
@Query("select * from user_table", nativeQuery = true)
List<User> getUserList2();

//在nativeQuery=true时使用#{#entityName} 动态获取User对象映射的表名
@Query("select * from #{entityName} u", nativeQuery = true)
List<User> getUserList3();

参数处理

//传递参数方式1:使用?x 表示使用方法的第几个参数 注意顺序就行
@Query(value = "select * from user_table where user_name like %?2% and user_id=?1", nativeQuery = true)
User getUserById(String userName, BigInteger userId)

//传递参数方式2:使用@Param("xx") 根据名字参数注入
@Query(value = "select * from user_table where user_name like %:name% and user_id=:id", nativeQuery = true)
User getUserById(@Param("id") BigInteger userId, @Param("name") String userName)

更新操作

//更新操作需要加@Modifying注解,并且加@Transactional注解在事务之中
//数据更新操作都会返回int,可用于业务判断是否操作成功  但是一般没使用,因为只要没抛异常,基本都是成功的
@Modifying
@Query(value = "update user_table set user_name = ?2 where user_id = ?1", nativeQuery = true)
int updateUserName(BigInteger userId, String userName);

//spring data可以根据你方法名生成sql语句,最后做一些简单操作要不然方法名过于长不好看
//这个方法和默认的 deleteById一样,如果想通过其他属性删除,就很方便
int deleteByUserId(BigInteger userId);

if 动态参数设置 

//因为spring data不像mybatis一样在mapper文件,可以加if for操作
//if判断 可以使用msql的if函数   如果是null 或 ''就不加这条件
@Query(value = "select * from user_table where if(?1 is null or ?1 = '', 1=1, user_name like %?1%)", nativeQuery = true)
User getUserById(String userName)

集合参数传递

//for循环 直接传入list即可
@Query(value = "select * from user_table where user_id in ?1", nativeQuery = true)
User getUserById(List<BigInteger> userId);

分页处理

//srping data实现分页功能,加上countQuery用于计算条数
//分页时必须传递Pageable分页参数,Pageable pageable = PageRequest.of(page - 1, PAGE_SIZE);
//返回Page对象 
//page.getTotalPages 获取总页数, 
//page.getContent     获取内容列表, 
//page.getNumber     获取当前页数 需要+1,
//page.getTotalElement    获取总条数
@Query(
    value =
        "SELECT * FROM user_table  "
            + " WHERE user_id = ?1 "
            + " AND user_name LIKE CONCAT('%',?2,'%') ",
    countQuery =
        "SELECT count(1) FROM user_table  "
            + " WHERE user_id = ?1 "
            + " AND user_name LIKE CONCAT('%',?2,'%') ",
    nativeQuery = true)
Page<User> updateUserName(BigInteger userId, String userName, Pageable pageable);
  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值