当前位置:   article > 正文

在Springboot中集成并使用JPA_spring boot集成jpa

spring boot集成jpa

一、整合JPA

1.在项目中导入JPA的包

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-data-jpa</artifactId>
  4. </dependency>

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

  1. @Entity //实体类
  2. public class User {
  3. @Id //主键
  4. @GeneratedValue(strategy = GenerationType.IDENTITY)//自增
  5. private Integer id;
  6. @Column(name = "user_name",length = 50) //对应数据库的列
  7. private String userName;
  8. @Column
  9. private String password;

 3.编写一个接口继承JpaRepository

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

4.配置JPAProperties

  1. spring:
  2. jpa:
  3. hibernate:
  4. ddl-auto: update #更新或者创建数据表结构
  5. 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();

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/784195
推荐阅读
相关标签
  

闽ICP备14008679号