Java后端爱上SpringBoot 第二节:Spring-Data-Jpa应用

何为Spring-Data-Jpa?

首先要明确的是JPA是一个规范,并不是一个框架,Spring-data-jpa就是一群Spring的抠脚大汉写的一个符合JPA规范的一个封装了不易上手的Hibernate的易上手DAO框架。

为什么要用Spring-Data-Jpa?

  • 能大大的简化我们DAO层的开发(这个现如今的DAO层框架都能做到,但是Spring-Data-Jpa做的更多)
  • 可以解放写SQL的工作量
  • 不用做数据库初始化建表语句的管理
  • Jdk生成要实行ORM(现在还没有做到),在DAO层从一大堆SQL转变成关系-对象的模式
  • 有成熟的生态圈
    还有别的一些好处,就在此不在说了,有兴趣的道友可以自己搜一下。

使用JPA的一些思想上的转变

  • 要把传统的在SQL上实现一大堆的业务逻辑分解成多的简单的业务逻辑
    贫道的栗子:在日常开发中,特别是三五年前的项目,有些程序员就是要用一个很大很大的SQL(超过100行的SQL)来做一个复杂的业务逻辑,他写的代码让后人无法可写。

  • 允许添加冗余的字段,以减少关联查询带来的效率问题

  • 在插入数据时尽量多做,在查询数据时尽量少做

一些链接

SpringBoot整合Spring-Data-Jpa

上一节其实都说了,在这里再啰嗦一遍吧。

  1. Maven添加依赖包
    <dependency>
   		<groupId>org.springframework.boot</groupId>
   		<artifactId>spring-boot-starter-data-jpa</artifactId>
   	</dependency>
  1. 添加数据库配置和JPA配置
spring:
###数据库配置
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/spring?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&allowPublicKeyRetrieval=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
    username: hyn
    password: hyn1234
###JPA配置
  jpa:
    properties:
      hibernate:
        hbm2ddl:
          auto: update
        dialect: org.hibernate.dialect.MySQL5InnoDBDialect
    show-sql: true
    generate-ddl: true
    database: mysql 

Spring-Data-Jpa应用

自动建表功能

创建一个实体SysUser

package com.hyn.spring.entity;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.UpdateTimestamp;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

/**
 * 
 * @Title: SysUser.java
 * @Package com.hyn.spring.domain
 * @Description: TODO
 * @author hyn  
 * @date 2018年12月9日 下午1:38:53
 * @version V1.0  
 */
@Entity
@Table(name = "sys_user")
@EntityListeners(AuditingEntityListener.class)
public class SysUser implements Serializable {
   

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Id
	@GenericGenerator(name = "idGenerator", strategy = "uuid") // 这个是hibernate的注解/生成32位UUID
	@GeneratedValue(generator = "idGenerator")
	/**
	 *  用户ID
	 */
	@Column(columnDefinition="varchar(36)  not null  comment '用户ID'  ")
	String id;

	/**
	 * 
	 * 用户状态
	 */
	@Column(columnDefinition = "enum('true','false') default  'true' not null comment '用户状态' ")
	String status;

	/**
	 *  邮箱
	 */
	@Column(columnDefinition = "varchar(20)  not null  default '' comment '用户邮箱'" )
	private String email;

	/**
	 *  登录用户名
	 */
	@Column(columnDefinition = "varchar(20)  not null unique default '' comment '登录用户名'" )
	private String loginName;

	/**
	 *  用户名名称
	 */
	@Column(columnDefinition = "varchar(10)  not null  default '' comment '用户名称'" )
	private String userName;

	/**
	 *  密码策略
	 */
	@Column(columnDefinition = "varchar(100)  not null  default '888888' comment '登录密码'" )
	private String password;

	/**
	 *  电话
	 */
	@Column(columnDefinition = "varchar(11)  not null unique default '' comment '手机号码'" )
	private String phone;

	/**
	 *  更新时间
	 */
	@Temporal(TemporalType.TIMESTAMP)    
	@Column(columnDefinition = "timestamp  default current_timestamp on update current_timestamp comment '更新时间'")
	@UpdateTimestamp
	private Date moditime;
	//省略get set

启动项目会生成自动建表语句,如果你没有看到自动建表,请检查你的配置:
在这里插入图片描述
spring.jpa.properties.hibernate.hbm2ddl.auto有几种状态,我这里去贴一下别人的:

  • validate 加载hibernate时,验证创建数据库表结构
  • create 每次加载hibernate,重新创建数据库表结构,这就是导致数据库表数据丢失的原因。
  • create-drop 加载hibernate时创建,退出是删除表结构
  • update 加载hibernate自动更新数据库结构
  • none 不自动建表,也不检查表结构

自动注入时间

细心的道友会发现为什么实体上会加一个 @EntityListeners(AuditingEntityListener.class) 这个注解,在这里解释一下,这个注解是用来自动更新时间用的,比如每个表都应该有一个moditime字段用来记录这条数据最后更新的时间,如果让自己手动去维护这个字段就很麻烦,JPA提供了一个 @UpdateTimestamp注解来自动更新moditime,@EntityListeners 是用来开启这个实体上自动更新时间的。不过除了需要加上这个注解以为,还去要在启动类上加上 @EnableJpaAuditing注解,来开启SpringBoot的Jpa的自动注解功能。

@SpringBootApplication
@EnableJpaAuditing
@EnableSwagger2
public class SpringFirstApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringFirstApplication.class, args);
	}
}

单表操作

新增数据

创建DAO层

package com.hyn.spring.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;

import com.hyn.spring.entity.SysUser;

public interface ISysUserRepository extends JpaRepository<SysUser, String>,JpaSpecificationExecutor<SysUser>{
   

}

单个新增

    @Override
	public String save(SysUserVO sysUserVO) {
   

		SysUser sysUser = new SysUser();
		sysUser.setEmail(sysUserVO.getEmail());
		sysUser.setLoginName(sysUserVO.getLoginName());
		sysUser.setPassword(sysUserVO.getPassword());
		sysUser.setPhone(sysUserVO.getPhone());
		sysUser.setStatus(sysUserVO.getStatus());
		sysUser.setUserName(sysUserVO.getUserName());
		iSysUserRepository.save(sysUser);
		return "success";
	}

批量新增

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值