目录
内容
创建实体类
@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);