在Springboot中集成并使用JPA

本文介绍了如何在SpringBoot项目中整合JPA,包括引入JPA依赖、实体类与表的映射、JpaRepository接口配置、JPA基本注解的使用、JPQL内建函数以及SQL操作的最佳实践。
摘要由CSDN通过智能技术生成

一、整合JPA

1.在项目中导入JPA的包

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

2.编写实体类,并与表之间做映射,同时需要配置好映射关系        

@Entity //实体类
public class User {

    @Id //主键
    @GeneratedValue(strategy = GenerationType.IDENTITY)//自增
    private Integer id;

    @Column(name = "user_name",length = 50) //对应数据库的列
    private String userName;
    @Column 
    private String password;

 3.编写一个接口继承JpaRepository

public interface UserRepository extends JpaRepository<User,Integer> {
//......
}

4.配置JPAProperties

spring:  
 jpa:
    hibernate:
      ddl-auto: update #更新或者创建数据表结构
    show-sql: true #是否在控制台显示sql

二、JPA的基本注解

1.@Entity

        标注实体类,并将其映射到指定的数据库表。

2.@Table

        当实体类与数据库的表名不同名时,使用此注解进行标注说明,与@Entity并列使用,可以用于单独的语句行,也可以与声明语句同行。

        其中name属性用于指定数据库的表名,catalog属性用于指定数据库中的目录,schema用于指定数据库的模式,uniqueConstraints 通常会用来设置约束条件,一般不设置。

3.@Id

        标注实体类的映射为数据库的主键列,也可以放到属性的getter方法之前。

4.@GeneratedValue

         用于标注主键的自动生成策略,通过属性strategy进行指定,默认JPA会自动选择一个最适合       底层数据库的主键生成策略。

         在GenerationType 中定义了如下策略:

        - IDENTITY:使用数据库id自增的方式进行自增,Oracle不支持。

        - AUTO:默认模式,JPA自动去选择合适的策略。

        - SEQUENCE:通过序列产生主键,使用@SequenceGenerator注解去指定序列的名字,Mysql不支持。

        - TABLE:通过表来产生主键,使用此策略方便数据库的移植。

5.@Basic

        是实体类与数据库字段映射时最简单的类型,有两个属性,fetch和optional属性,其中fetch用来指定属性的加载机制, 包含两个值,EAGER表示主支抓取,LAZY 表示延迟加载,默认情况下为 EAGER;而optional则用来表示该属性是否允许为null,默认是true。

6.@Column

        用于实体类的属性与数据库的列名不同时,可用于标注name、unique、nullable、length等属性。

7.@Transient

        添加数据库表中不存在的字段时,需要使用到该注解。

8.@Temporal

        该注解用于帮Java的Date(DATE, TIME, 和 TIMESTAMP)类型进行格式化,来调整精度。

三、JPQL的内建函数

1.字符串处理函数

  • - concat():字符串合并/连接函数。
  • - substring():取字符串函数。
  • - trim():从字符串中去掉首或者尾指定的字符或者空格。
  • - lower()、upper():字符串的大小写转换。
  • - length():字符串的长度。
  • - locate():从一个字符串中找到另一个字符串出现的位置,若没有找到返回0。

2.算数函数

  • - abs():绝对值。
  • - mod():取模运算。
  • - sqrt():平方根。
  • - size():求集合元素的个数

3.日期函数

        主要有三个为current_date、current_time和current_timestamp吗,无需参数,返回服务器上当前的日期时间和时间戳。

四、SQL

1.不能使用 select *,若要查询所有需要取别名,如:

select u from User u    //查询user表中的信息 

2.如果是更新或删除的操作,在方法上面需要加@Modifying 注解,如:

    @Modifying
    @Transactional
    @Query("update User set password=?1 where  id = ?2")
    void updatePassword( String password,Long id);

3.用@Param 注解代替参数占位符,使用 :firstname去替换方法里的参数,如:

 @Query("select u from User u where u.firstname = :firstname or u.lastname = :lastname")
  User findUserByLastnameOrFirstname(@Param("lastname") String lastname,
                                 @Param("firstname") String firstname);

 4.使用 nativeQuery=true,语句可以直接放到数据库中执行,如:

@Query(value="select u from User u ",nativeQuery = true) List<User> getUser();

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值