Java——持久层之JPA详解

前言

Java Persistence API ,连接数据库的多种方法中:
最基本、最繁琐的JDBC
简化了持久层代码的JPA
框架级别的 Hibernate 、Mybatis 、 Mybatis

一、使用JPA (SpringBoot项目)

  1. 导入jar包
    spring-boot-starter-data-jpa
  2. JPA配置
# 数据库的基础配置
spring.datasource.url = 
spring.datasource.deiverClassName = 
spring.datasource.username = 
spring.datasource.password = 

# 帮助开发的配置
spring.jpa.properties.hibernate.hbm2ddl.auto=update
spring.jpa.show-sql = true
  1. 配置实体类
import javax.persistence.*;

@Entity                 // 表明是个对应数据库的实体类
@Table(name="t_users")         //对应表名
@Data                  // 用到了lombok插件,自动生成getter、setter
public class Users {

	@Id	  //表明该属性为主键
	@GeneratedValue(strategy=GenerationType.IDENTITY)//主键生成策略
	@Column(name="id")  //对应表中的字段名
	private Integer id;
	
	@Column(name="name")
	private String name;
	
	@Column(name="age")
	private Integer age;
	
	@Column(name="address")
	private String address;

	@ManyToOne(cascade = CascadeType.PERSIST)	//表示多方
	@JoinColumn(name ="role_id")	//维护一个外键,外键在Users一侧
	private Roles roles;
}

!!! 属性类型别用基本类型,用封装类型

  1. 编写DAO
    Spring Boot提供了许多接口,我们这里用第4个
     1、Repository接口
     2、CrudRepository接口
     3、PagingAndSortingRepository接口
     4、JpaRepository接口
     5、JPASpecificationExecutor接口
/**
 * 参数一 T :当前需要映射的实体
 * 参数二 ID :当前映射的实体中的主键的类型
 *
 */
@Repository
public interface UserRepository extends JpaRepository<User, Integer> {

    //手写sql
    @Query(value = "update user set name=?1 where id=?4",nativeQuery = true)   //占位符传值形式
    @Modifying                     
    int updateById(String name,int id);

    @Query("from User u where u.username=:username")   //SPEL表达式
    User findUser(@Param("username") String username);// 参数username 映射到数据库字段username
}

@Query用来执行自定义sql的方法,nativeQuery=true标识使用原生SQL
@Modifying则标识该方法支持insert

二、常用注解

1.修饰实体类

  • @Entity
      表明这是个实体类
  • @Table
      表明对应的表
  • @DynamicInsert
      insetr时,生成动态SQL(有几个参数,sql语句就加几个字段)
  • @DynamicUpdate
      update时,生成动态SQL(有几个参数,sql语句就加几个字段)

2.修饰成员变量

  • @Id
      表明该属性为主键
  • @Column
      表明该属性对应了表中的字段
  • @CreatedDate、@CreatedBy、@LastModifiedBy、@LastModifiedDate
      需要在类上加上注解@EntityListeners(AuditingEntityListener.class),其次在application启动类中加上注解EnableJpaAuditing,
      这个时候,在save方法被调用的时候,时间字段会自动设置并插入数据库,但是CreatedBy和LastModifiedBy并没有赋值,因为需要实现AuditorAware接口来返回你需要插入的值。
@Configuration
public class UserIDAuditorBean implements AuditorAware<Long> {
    @Override
    public Long getCurrentAuditor() {
        SecurityContext ctx = SecurityContextHolder.getContext();
        if (ctx == null) {
            return null;
        }
        if (ctx.getAuthentication() == null) {
            return null;
        }
        if (ctx.getAuthentication().getPrincipal() == null) {
            return null;
        }
        Object principal = ctx.getAuthentication().getPrincipal();
        if (principal.getClass().isAssignableFrom(Long.class)) {
            return (Long) principal;
        } else {
            return null;
        }
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值