基础类框架整合
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