文章目录
一、配置数据源
1. Maven中加入依赖(pom.xml)
<properties>
<java.version>1.8</java.version>
<druid.version>1.1.10</druid.version>
<mysql.version>8.0.17</mysql.version>
<lombok.version>1.18.10</lombok.version>
</properties>
<!--JPA-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--JDBC-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<!--Mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>
2. 配置数据源(application.yml)
(注:mysql 8.x与5.x的配置是不一样的)
spring:
# 配置Mysql数据源
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/boot?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
username: root
password: 123456
# 指定druid数据库连接池
type: com.alibaba.druid.pool.DruidDataSource
druid:
min-idle: 10 # 最小连接池数量
max-active: 50 # 最大连接活动数
max-wait: 10000 # 最大连接活动数 ms
initial-size: 5 # 数据库连接池初始化连接数
# 配置JPA属性
jpa:
database-platform: org.hibernate.dialect.MySQLDialect # 使用Mysql
show-sql: true # 打印数据库 SQL
hibernate:
ddl-auto: update #选择 Hibernate 数据定义语言( DDL 〕策略为 update
二、使用JPA(Hibernate)操作数据库
JPA定义了对象关系映射ORM)以及实体对象持久化的标准接口,所维护的核心是实体(entity bean),而这个实体是通过一个持久化上下文来使用的,这个上下文包含三部分:
- 对象关系影身描述
- 实体操作的API(CRUD)
- 查询语言(约定了面向对象的查询语言JPQL)
1. 创建一个表
create table t_user(
id int(12) not null auto_increment,
user_name varchar(60) not null,
sex int(3) not null default 1 ,
note varchar(256) null,
primary key (id)
)
2. 定义实体类
- User类
@Data
@Entity(name = "user") // 表明这是一个实体类
@Table(name = "t_user") // 对应映射的数据库中哪个表
public class User {
@Id // 表明这是主键
@GeneratedValue(strategy = GenerationType.IDENTITY) // 主键策略, 自增
private Long id;
@Column(name = "user_name") // 不同时,定义属性对应到表中那个列
private String userName;
private String note;
@Convert(converter = SexConverter.class)
private SexEnum sex;
}
- SexEnum 枚举
public enum SexEnum {
MALE(1, "男"),
FEMALE(2, "女");
private int id;
private String name;
SexEnum(int id, String name) {
this.id = id;
this.name = name;
}
public static SexEnum getEnumById(int id){
for (SexEnum sex : SexEnum.values()){
if (sex.getId() == id){
return sex;
}
}
return null;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
- SexConverter 转换器类
/***
* AttributeConverter<X, Y>
* y convertToDatabaseColumn(x) 作用将实体属性x转化为y存储到数据库中,即插入和更新操作时执行
* x convertToEntityAttribute(y) 作用将数据库中的字段y转化为实体属性x,即查询操作时执行
* created by yyz 2019-11-21 11:56
**/
public class SexConverter implements AttributeConverter<SexEnum, Integer> {
@Override
public Integer convertToDatabaseColumn(SexEnum sexEnum) {
return sexEnum.getId();
}
@Override
public SexEnum convertToEntityAttribute(Integer id) {
return SexEnum.getEnumById(id);
}
}
3. 定义JPA接口
public interface UserRepository extends JpaRepository<User, Long> {
// 1. JpaRepository 系统默认帮我们实现的方法, 如 findById(id)
// 2. JPA 查询语言(JPQL)
@Query("from user where user_name like concat('%',?1,'%') and note like concat('%',?2,'%')")
List<User> findUsers(String userName, String note);
//3. 按照一定规则命名的方法也可以在不写任何代码的情况下完成逻辑
List<User> findByUserNameLike(String userName);
User getUserById(Long id);
List<User> findByUserNameLikeOrNoteLike(String userName, String note);
}
4. JPA接口、 Bean包路径扫描
@SpringBootApplication
// 定义 JPA 接口扫描包路径
@EnableJpaRepositories(basePackages = "com.cq3jk.demodatabase.repository")
// 定义实体 Bean 扫描包路径
@EntityScan(basePackages = "com.cq3jk.demodatabase.entity")
public class DemoDatabaseApplication {
public static void main(String[] args) {
SpringApplication.run(DemoDatabaseApplication.class, args);
}
}
5. 配置JPA属性 (见上述2)
6. 测试
@RestController
@RequestMapping("/jpa")
public class UserController {
@Autowired
private UserRepository userRepository;
@GetMapping("/getUser")
public User getUser(Long id) {
User user = userRepository.findById(id).get();
return user;
}
@GetMapping("/getUsers")
public List<User> getUsers() {
List<User> users = userRepository.findUsers("杨", "谁");
return users;
}
}