Spring-boot中使用Spring-data-jpa操作DB

依赖

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

实体类

@Entity
public class User {

    @Id
    @GeneratedValue
    private Long id;

    @Column(nullable = false)
    private String name;

    @Column(name= "device_id")  //解决对应数据库字段有下划线的情况
    private Integer deviceId;

    //省略getter setter constructer
}

各种 sql 情况的示例 ( JPQL类似于hibernate的hql,查询的是对象名而非表名 )

  • 索引参数
/**
 *  ?1 ?2 表示参数的占位符,需要和方法中所传递的参数顺序一致。X是从1开始。
 */ 
@Query("SELECT * FROM Person p WHERE p.lastName = ?1 AND p.email = ?2")
List<Person> testQueryAnnotationParams1(String lastName, String email);
  • 命名参数 (推荐使用此方式,不用管参数的顺序)
@Query("SELECT * FROM Person p WHERE p.lastName = :lastName AND p.email = :email")
List<Person> testQueryAnnotationParams2(@Param("email") String email, @Param("lastName") String lastName);
  • LIKE关键字的查询
/**
 *  like查询 使用索引参数
 */ 
@Query("SELECT p FROM Person p WHERE p.lastName LIKE %?1% OR p.email LIKE %?2%")
List<Person> testQueryAnnotationLikeParam(String lastName, String email);

/**
 *  like查询 使用命名参数
 */ 
@Query("SELECT p FROM Person p WHERE p.lastName LIKE %:lastName% OR p.email LIKE %:email%")
List<Person> testQueryAnnotationLikeParam3(@Param("email") String email, @Param("lastName") String lastName);

//测试
personRepsitory.testQueryAnnotationLikeParam("A", "A@126.com");
  • 原生SQL查询 (设置nativeQuery=true)
@Query(value = "SELECT count(id) FROM tb_persons", nativeQuery = true)
long getTotalCount();
  • @Modifying注解
  • @Transactional注解
@Transactional
@Modifying
@Query("UPDATE Person p SET p.email = :email WHERE p.id = :id")
void updatePersonEmail(@Param("id") Integer id, @Param("email") String email);

注意

1、在@Query注解中编写JPQL(@Query注解中的sql语句)实现delete和update操作的时候必须加上@modifying注解,以通知Spring Data 这是一个delete或update操作。
2、delete或者update操作需要使用事务,添加@Transactional注解即可。否则报错:Executing an update/delete query
3、注意JPQL(@Query注解中的sql语句)不支持insert操作。


2017/10/27更新
说明一个点:实体类的字段比数据库表的字段少也是可以的.只要对应关系正确就行.
数据库表字段太多,又想用JPA操作,只需要实体类写出需要用到的字段就可以了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fool_dawei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值