No 2. JPA(Hibernate) + MySql 5.x 整合
注意提前安装好MySQL服务才能继续,本节。
1. 创建目录结构
2. 新增 JPA , MySql 依赖(pom.xml)
<!--mysql 依赖-->
<!--mysql依赖 与JPA 的依赖顺序会导致导包不成功-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
3. 更新配置文件(application.properties)
server.port=9527
# ============================== MySQL?? =============================================================================
spring.datasource.url = jdbc:mysql://127.0.0.1:3306/jwtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8
spring.datasource.username = root
spring.datasource.password = password
spring.datasource.driverClassName = com.mysql.cj.jdbc.Driver
# =================================== JPA ===============================================================================
# Specify the DBMS
spring.jpa.database = MYSQL
# Show or not log for each sql query ???? sql ??
spring.jpa.show-sql = true
# Hibernate ddl auto (create, create-drop, update) ?? create ???create????????????????????????
spring.jpa.hibernate.ddl-auto = update
# Naming strategy
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.DefaultNamingStrategy
# stripped before adding them to the entity manager ????
#spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
4. 完善项目结构
4.1 实体类基类
package com.lc.data.domain;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.GenericGenerator;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import org.springframework.format.annotation.DateTimeFormat;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
/**
* 抽象实体类
*/
@MappedSuperclass
@Data
@EntityListeners(AuditingEntityListener.class)
@Setter
@Getter
public abstract class BaseEntity implements Serializable {
//https://www.jianshu.com/p/3b384e873232
@Id
// @GenericGenerator(name = "uuid-key", strategy = "uuid2")
//自定义主键没搞通常
// @GenericGenerator(name = "uuidKey" ,strategy = "com.lc.data.utils.MyUuidKeyGenerator") //自定UUid
@GenericGenerator(name = "uuidKey" ,strategy = "org.hibernate.id.UUIDGenerator") // 框子已实现的主键策略
@GeneratedValue(generator = "uuidKey")
@Column(length = 36)
private String id;
@CreatedDate
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
@LastModifiedDate
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
}
4.1.1 创建实体类User
package com.example.createpj.data.entity.security;
import com.lc.data.domain.BaseEntity;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.io.Serializable;
//@Data //moke 测试?
@Entity(name = "user")
public class User extends BaseEntity {
@Column(length = 32)
public String name;
@Column(length = 18)
public String username;
public Integer status;
}
4.2 创建对应的 dao,service,controller层
package com.example.createpj.data.service;
import com.example.createpj.data.entity.security.User;
import com.example.createpj.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
@Autowired
UserRepository userRepository;
public User saveUser(User user, Boolean isFlush) {
return userRepository.save(user);
}
public List<User> findAll() {
return userRepository.findAll();
}
public List<User> getByName(String name) {
return userRepository.getByName(name);
}
public List<User> getByUsername(String username) {
return userRepository.getByUsername(username);
}
}
package com.example.createpj.repository;
import com.example.createpj.data.entity.security.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface UserRepository extends JpaRepository<User, String> {
List<User> getByName(String name);
List<User> getByUsername(String username);
List<User> findAll();
}
package com.example.createpj.data.utils;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
public class Result {
private int code = 200;
private String msg = "操作成功";
private Object data;
public Result(int code,String msg){
this.code = code;
this.msg = msg;
}
public Result(Object data){
this.data = data;
}
}
package com.example.createpj.data.utils;
import org.hibernate.HibernateException;
import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.id.IdentifierGenerator;
import java.io.Serializable;
import java.util.UUID;
/**
* 自定义主键生成策略
* com.lc.data.utils.MyIdGenerator IdentityGenerator
*/
public class MyUuidKeyGenerator implements IdentifierGenerator {
@Override
public Serializable generate(SharedSessionContractImplementor sharedSessionContractImplementor, Object o) throws HibernateException {
return (Serializable)UUID.randomUUID().toString();
}
}
package com.example.createpj;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
@SpringBootApplication
@EnableJpaAuditing //使注解自动插入时间的注解生效 @CreatedDate @LastModifiedDate
public class CreatePjApplication {
public static void main(String[] args) {
SpringApplication.run(CreatePjApplication.class, args);
}
}
5. 启动,并访问接口插入第一条数据
5.1 查看表是否新建成功
5.2 访问接口插入第一条数据
点击新增:localhost:9527/user/saveUser?username=12323491&name=测试过h1216
确认是否新增成功
本节结束。