1、当前的开发环境
使用spring boot 2.2.4
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
2、导入依赖包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<!--排除springboot2默认的数据源HikariCP,使用druid连接池-->
<exclusions>
<exclusion>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--第三方连接池:druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.21</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
<scope>runtime</scope>
</dependency>
3、application.yml 配置
spring:
# mysql 连接配置
datasource:
url: jdbc:mysql://192.168.1.12:3306/test?useUnicode=true&characterEncoding=UTF-8
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
# 使用druid连接池
type: com.alibaba.druid.pool.DruidDataSource
# 配置druid连接池
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 30000
filters: stat
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxOpenPreparedStatements: 20
sql-script-encoding: utf-8
#配置jpa
jpa:
#是否显示sql 语句
show-sql: true
# 更新数据库表结构
hibernate:
ddl-auto: update
如果仅仅配置了yml 不能把参数注入给dataSource的,所以还需要另外配置Config
4、配置Druid
/**
* druid 连接池配置
*/
@Configuration
public class DruidConfig {
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource druid() {
return new DruidDataSource();
}
// 配置监控
@Bean
public ServletRegistrationBean statViewServlet(){
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
return servletRegistrationBean;
}
@Bean
public FilterRegistrationBean webStatFilter(){
FilterRegistrationBean bean = new FilterRegistrationBean();
bean.setFilter(new WebStatFilter());
bean.setUrlPatterns(Arrays.asList("/*"));
return bean;
}
}
最后在浏览器打开localhost:8080/druid 就说明配置成功
5、上代码测试
1、建一个实体类
@Entity
@Table(name = "tb_user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "user_name")
private String name;
public void setId(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
2、建Repository类
/**
* 用户的dao
*/
public interface UserRepository extends JpaRepository<User,Integer> {
}
3、建一个controller
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserRepository userRepository;
@RequestMapping("/test")
public User test(){
User user = new User();
user.setName("testst");
return userRepository.save(user);
}
}
4、测试
在流量中输入http://localhost:8080/user/test
6、Druid各项配置说明
7、Spring Data JPA 中常用注解
一、java对象与数据库字段转化
1.@Entity:标识实体类是JPA实体,告诉JPA在程序运行时生成实体类对应表
2.@Table:设置实体类在数据库所对应的表名
3.@Id:标识类里所在变量为主键
4.@GeneratedValue:设置主键生成策略,此方式依赖于具体的数据库
5.@Basic:表示简单属性到数据库表字段的映射(几乎不用)
6.@Column:表示属性所对应字段名进行个性化设置
7.@Transient:表示属性并非数据库表字段的映射,ORM框架将忽略该属性
8.@Temporal:(很重要)
当我们使用到java.util包中的时间日期类型,则需要此注释来说明转化成java.util包中的类型。
注入数据库的类型有三种:
TemporalType.DATE(2008-08-08)
TemporalType.TIME(20:00:00)
TemporalType.TIMESTAMP(2008-08-08 20:00:00.000000001)
9.@Enumerated:(很重要)
使用此注解映射枚举字段,以String类型存入数据库
注入数据库的类型有两种:EnumType.ORDINAL(Interger)、EnumType.STRING(String)
10.@Embedded、@Embeddable:
当一个实体类要在多个不同的实体类中进行使用,而其不需要生成数据库表
@Embeddable:注解在类上,表示此类是可以被其他类嵌套
@Embedded:注解在属性上,表示嵌套被@Embeddable注解的同类型类
11.@ElementCollection:集合映射
12.@CreatedDate、@CreatedBy、@LastModifiedDate、@LastModifiedBy:(很重要)
表示字段为创建时间字段(insert自动设置)、创建用户字段(insert自动设置)、最后修改时间字段(update自定设置)、最后修改用户字段(update自定设置)
用法:
1、@EntityListeners(AuditingEntityListener.class):申明实体类并加注解
2、@EnableJpaAuditing:在启动类中加此注解
3、在实体类中属性中加上面四种注解
4、自定义添加用户