SpringBoot2.x+Spring Data Jpa整合简书

SpringDataJpa由Spring基于Hibernate开发的一个JPA框架。可以极大的简化JPA的写法,可以在几乎不用写实现的情况下,实现对数据的访问和操作。与SpringBoot整合更是锦上添花,下面我将讲解其用法。

1. 实体类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
@Entity
@Table(name = "t_accountinfo")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

   
    @NotNull(message = "用户名不能为空")
    @Column(length = 64,nullable = false,unique = true)
    private String username;

    @NotNull(message = "密码不能为空")
    private String password;

    
    private int age;

    @Lob
    private String image;

    @Email(message = "邮箱格式错误")
    private String email;

    @Size(max=11,min=11,message="你所输入手机号不是11位")
    private String phone;

    @CreationTimestamp
    private Timestamp createTime;

    @UpdateTimestamp
    private Timestamp updateTime;
    
   //此处 get() set()省略。。。
}
1. @Entity:代表这是一个实体Bean;@Table():其中的name属性代表的是所映射数据库表的名字,如果没有@Table,默认生成类名对应的表。如:User(类)->user(表); HuUser(类)->hu_user(表)
2. @Id:代表这是一个主键;
3. @GeneratedValue()增长策略:strategy属性其中有四个用法:
  • TABLE:使用一个特定的数据库表格来保存主键。
  • SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。
  • IDENTITY:主键由数据库自动生成(主要是自动增长型)
  • AUTO:主键由程序控制。  
  • 如果你想字符串生成uuid可自定义生成策略:@GenericGenerator(name = “uuid”,strategy = “uuid”)@GeneratedValue(generator = “uuid”)
4.@Column()代表字段映射的一些属性
  • lenth:表示该字段的长度,默认为255
  • nullable:表示该字段是否为空,默认为ture;注解使用@NotNull: message:为空时抛出的错误信息
  • unqique:表示该字段是否唯一;默认为false;
  • 其他的没用过!!!
5. 字段约束
  • @Size表示字段一些约束:mix:最小长度;max:最大长度,message:表示违反约束抛出的错误信息
  • @Enail:表示该字段格式必须为邮箱格式,其中message表示不满足时抛出的错误信息
  • @Pattern:regexp属性:正则表达式,message属性:不满足时抛出的错误信息
6. @Lob:该字段映射表中该字段类型为text属性
7. @CreationTimestamp:表示插入数据自动生成时间; @UpdateTimestamp:更新数据时生成当前时间;
8. @OneToMany一对多,@ManyToOne多对一
  • mappedBy:用于双向关联时使用,值为放弃维护的表名,否则会引起数据不一致的问题
  • fetch:可取的值有FetchType.EAGER:即时加载;FetchType.LAZY:懒加载;@OneToMany中默认为懒加载
  • cascade:CascadeType.PERSIST(级联新建)、CascadeType.REMOVE(级联删除)、CascadeType.REFRESH(级联刷新)、CascadeType.MERGE(级联更新)、CascadeType.ALL(选择全部)
9. @ManyToOne多对一
  • optional 属性是定义该关联类对是否必须存在,值为false时,关联类双方都必须存在,如果关系被维护端不存在,查询的结果为null。 值为true 时, 关系被维护端可以不存在,查询的结果仍然会返回关系维护端,在关系维护端中指向关系被维护端的属性为null。 optional 属性的默认值是true。
  • 其他和 @OneToMany一样,注意:fetch默认为即时加载
9. @ManyToMany多对多
  • fetch默认为懒加载
  • 定义多对多时的其他配置:实例
1
2
3
4
5
//name:第三张表的表名;
joinColumns和inverseJoinColumns::name:字段名;referencedColumnName:绑定哪个字段名,nullable:是否可以为空;
 @JoinTable(name = "user_role",
            joinColumns = @JoinColumn(name = "user_id",referencedColumnName = "Id",nullable = false),
            inverseJoinColumns =@JoinColumn(name = "role_id",referencedColumnName = "id",nullable = false))
10. 其他
  • @NotNull:不能为空 message:为空时抛出的错误信息

2. 接口

这里我就讲解我所用的:

1
extends JpaRepository<User,Long>

定义一个接口继承此接口 <User,Long>第一个值为映射表中的类名,第二个值为此类的Id类型
默认的方法:

  • save:新增或修改一条数据;saveAll:新增或修改多条数据; 注意:当传入的数据没有id时,会是修改数据
  • delete:删除一条数据;deleteById:根据id删除数据;
  • findById:根据id查询信息,返回的是Optional<>类型;
  • finAll:查询所有信息;返回类型一个是List,一个是Page:分页的类型
  • 还有其他的方法暂时没研究;  

当然这些往往不够,还有一些自定义的方法:

  • 关键字—————–样例——————————–对应sql
  • And——————findByUsername——————…where username=?1
  • Or——————-findByUsernameOrAge————-…where username=?! or age=?2
  • Like—————–findByUsernameLike————-…where username like ?1
  • Between————–findByAgeBetween—————…where age between 1? and ?2
  • LessThan————–findByAgeLessThan————-…where age<?1
  • LessThanEqual————-findByAgeLessThanEqual————-…where age<=?1
  • GreaterThan—————findByAgeGreaterThan—————…where age>?1
  • GreaterThanEqual————-findByAgeGreaterThanEqual————-…where age>=?1

findDistinct:去重;

其他:还有其他关键字我就不写了,可以去查;

3. @Query

如果上面那些还不能达到你的要求,那就是用@Query

  • 属性:nativeQuery = true时 代表可以写原生的sql语句了。。对,没错原生的,不是hql语句;例子:
1
2
@Query(value = "SELECT c.id,c.name,c.create_time,c.update_time,c.comment FROM aimi_store.user_role AS a JOIN aimi_store.aimi_user AS  b ON a.user_id=b.id JOIN aimi_store.`role` AS  c ON a.role_id=c.id WHERE b.id=?1",nativeQuery = true)
List<Role> listRoleByUser(String Id);

没错,任何sql语句都可以写,所以,,可以和mybatis一较高下来了;
还有其他很多功能我就不一一说出来了,你们可以看文档;

1. 总结

Spring Data Jpa 是真的太强大了,不仅有默认的基本方法,分页简单;还可以写原生sql语句。和SpringBoot整合,简直完美!!!

转载于:https://my.oschina.net/u/4037000/blog/3045354

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值