基础类框架整合

springboot快速整合版本,引入starter的jar包,maven配置:

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

引入数据库驱动包:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
maven配置:
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<scope>runtime</scope>
</dependency>
<!--让oracle支持 ZHS16GBK的字符集-->
<dependency>
<groupId>com.oracle.database.nls</groupId>
<artifactId>orai18n</artifactId>
</dependency>

在application里面配置对应参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#oracle
#spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
#spring.datasource.url=jdbc:oracle:thin:@192.168.1.232:1521/ORCL
#spring.datasource.username=east2
#spring.datasource.password=123456

#sqlserver
#spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
#spring.datasource.url=jdbc:sqlserver://192.168.1.232:1433;DatabaseName=EAST2;trustServerCertificate=true
#spring.datasource.username=EAST2
#spring.datasource.password=123456

#mysql
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.1.232:3306/east2
spring.datasource.username=root
spring.datasource.password=123456

其他数据库对应配置

1
2
3
#spring.jpa.database=sql_server
#spring.jpa.properties.hibernate.default_schema = schema
#spring.jpa.properties.hibernate.dialect=

集成druid数据源

druid官网地址:

https://github.com/alibaba/druid/tree/1.2.16

2023-3-6最新版本1.2.16

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#1.引入starter的pom即可
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.16</version>
</dependency>

#2.单独引入druid的jar包,并注入DruidDataSource到IOC容器中
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.16</version>
</dependency>

#对应配置类:
@Configuration
public class DruidConfig {

@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource druidDataSource() {
return new DruidDataSource();
}
}

配置druid监控

只需要将StatViewServlet和WebStatFilter分别注册到ServletRegistrationBean和FilterRegistrationBean组件中去即可,代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@Configuration
public class DruidConfig {
//配置Druid的监控
//1、配置一个管理后台的Servlet
@Bean
public ServletRegistrationBean statViewServlet(){
ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
Map<String,String> initParams = new HashMap<>();
initParams.put("loginUsername","admin");
initParams.put("loginPassword","123456");
initParams.put("allow","");//默认就是允许所有访问
bean.setInitParameters(initParams);
return bean;
}

//2、配置一个web监控的filter
@Bean
public FilterRegistrationBean webStatFilter(){
FilterRegistrationBean bean = new FilterRegistrationBean();
bean.setFilter(new WebStatFilter());
Map<String,String> initParams = new HashMap<>();
initParams.put("exclusions","*.js,*.css,/druid/*");
bean.setInitParameters(initParams);
bean.setUrlPatterns(Arrays.asList("/*"));
return bean;
}
}

JPA通过定义实体类自动创建表

springboot配置类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//ddl-auto为关键,一般会设置为update

spring:
## 数据源配置
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/USER_CORE?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
username: root
password: 123456
jpa:
show-sql: true
hibernate:
## 自动创建表
ddl-auto: update
naming:
physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
## 存储引擎切换为InnoDB
database-platform: org.hibernate.dialect.MySQL5InnoDBDialect

表映射的java的pojo一定要加上entity注解才能生效

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
//@Table会数据库表名映射
//@Id为主键映射
//@GeneratedValue为生成策略
//@SequenceGenerator为oracle的主键序列生成策略
//@Column为字段名映射,columnDefinition属性为定义字段的其他描述
package com.swordgate.report.entity;

import com.swordgate.report.common.ProjectParam;
import lombok.Data;
import javax.persistence.*;

@Data
@Entity
@Table(name = "SYS_USER")
public class UserEntity extends BaseEntity{

@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = ProjectParam.TABLE_GENERATED_VALUE)
@SequenceGenerator(sequenceName = "SYS_USER_SEQ", allocationSize = 1, name = ProjectParam.TABLE_SEQUENCE_GENERATOR)
@Column(name = "ID", columnDefinition = ProjectParam.COLUMN_TYPE_BIGINT+" COMMENT '主键,自动生成数值'")
private Long id;

@Column(name = "LOGIN_ID", columnDefinition = ProjectParam.COLUMN_TYPE_VARCHAR+"(30) COMMENT '登录账号'")
private String loginId;

@Column(name = "PASSWORD", columnDefinition = ProjectParam.COLUMN_TYPE_VARCHAR+"(100) COMMENT '登录密码'")
private String password;

@Column(name = "EN_NAME", columnDefinition = ProjectParam.COLUMN_TYPE_VARCHAR+"(30) COMMENT '英文姓名'")
private String enName;

@Column(name = "CN_NAME", columnDefinition = ProjectParam.COLUMN_TYPE_VARCHAR+"(30) COMMENT '中文名'")
private String cnName;

@Column(name = "TEL_PHONE", columnDefinition = ProjectParam.COLUMN_TYPE_VARCHAR+"(30) COMMENT '电话号码'")
private String telPhone;

@Column(name = "EMAIL", columnDefinition = ProjectParam.COLUMN_TYPE_VARCHAR+"(30) COMMENT '邮箱'")
private String email;

@Column(name = "IP_ACCESS", columnDefinition = ProjectParam.COLUMN_TYPE_VARCHAR+"(30) COMMENT 'IP访问绑定地址'")
private String ipAccess;

@Column(name = "IS_FORBIDDEN", columnDefinition = ProjectParam.COLUMN_TYPE_INT+" COMMENT '是否被禁用(0:未禁用;1:禁用)'")
private Integer isForbidden;

@Column(name = "IS_LOCKED", columnDefinition = ProjectParam.COLUMN_TYPE_INT+" COMMENT '是否被锁定(0:未锁定;1:锁定'")
private Integer isLocked;

@Column(name = "DEPT_ID", columnDefinition = ProjectParam.COLUMN_TYPE_BIGINT+" COMMENT '是否被锁定(0:未锁定;1:锁定'")
private Long deptId;

@Column(name = "ORG_ID", columnDefinition = ProjectParam.COLUMN_TYPE_BIGINT+" COMMENT '是否被锁定(0:未锁定;1:锁定'")
private Long orgId;

@Column(name = "ROLE_ID", columnDefinition = ProjectParam.COLUMN_TYPE_BIGINT+" COMMENT '是否被锁定(0:未锁定;1:锁定'")
private Long roleId;


}

如果有公共字段,建议定义在父类使用,使用注解@MappedSuperclass,其他和pojo类一样

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
//@CreatedDate 执行insert操作时自动插入时间
//@LastModifiedDate 执行update操作时自动修改时间
//@CreatedBy 有谁添加数据
//@LastModifiedBy 有谁修改数据
//@CreatedBy和@LastModifiedBy需要自定义添加审计监听
//(@EntityListeners({AuditingEntityListener.class})//审计监听)
package com.swordgate.report.entity;

import com.swordgate.report.common.ProjectParam;
import lombok.Data;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import javax.persistence.Column;
import javax.persistence.EntityListeners;
import javax.persistence.MappedSuperclass;
import java.util.Date;

@Data
@EntityListeners({AuditingEntityListener.class})//审计监听
@MappedSuperclass
public class BaseEntity {

@Column(name = "IS_DELETED", columnDefinition = ProjectParam.COLUMN_TYPE_INT+" COMMENT '是否被删除(0:未删除;1:已删除'")
private Integer isDeleted;

@CreatedDate
@Column(name = "CREATE_DATE", columnDefinition = ProjectParam.COLUMN_TYPE_DATETIME+" COMMENT '数据生成日期时间,YYYY-mm-DD HH:MM:SS'")
private Date createDate;

@LastModifiedDate
@Column(name = "UPDATE_DATE", columnDefinition = ProjectParam.COLUMN_TYPE_DATETIME+" COMMENT '数据最后一次更新日期时间,YYYY-mm-DD HH:MM:SS'")
private Date updateDate;

@CreatedBy
@Column(name = "CREATED_BY", columnDefinition = ProjectParam.COLUMN_TYPE_VARCHAR+"(30) COMMENT '数据生成创建人, 默认为root'")
private String createdBy;

@LastModifiedBy
@Column(name = "LAST_MODIFIED_BY", columnDefinition = ProjectParam.COLUMN_TYPE_VARCHAR+"(30) COMMENT '最近修改人, 默认为root'")
private String lastModifiedBy;


}

//自定义审计监听类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package com.swordgate.report.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.domain.AuditorAware;

import java.util.Optional;

@Slf4j
@Configuration
public class AuditorAwareConfig implements AuditorAware<String> {

@Override
public Optional<String> getCurrentAuditor() {
//TODO 待实现取登录人的login_ID
return Optional.of("root");
}
}

//启动类开启审计监听功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package com.swordgate.report;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@SpringBootApplication
@EnableJpaAuditing(auditorAwareRef = "auditorAwareConfig")//开启审计监听功能
public class ReportApplication {

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

}

参考文档:

1.https://segmentfault.com/a/1190000039005979

2.https://gitbook.cn/books/5d7e2d5ac287aa0583c981e7/index.html

3.https://blog.51cto.com/luckyqilin/5952006 -项目整合druid监控主要参考这篇文章

4.https://segmentfault.com/a/1190000039005979 -配置项说明

5.https://cloud.tencent.com/developer/article/1952540 –自动保存操作人,操作时间

6.https://www.jb51.net/article/205069.htm –自动保存操作人,操作时间

7.https://blog.51cto.com/u_7341513/6089786 –自动保存操作人,操作时间

2.应用类整理

1.分页查询的操作整理

数据库字段和实体类属性映射不匹配的jpa组件说明使用参考博客:

https://blog.csdn.net/dickysun1987/article/details/90264142