-
Notifications
You must be signed in to change notification settings - Fork 121
database
sika-code edited this page Jul 20, 2019
·
3 revisions
database【数据库组件】
- 封装与数据库交互的组件
- 屏蔽访问数据库的细节
- 降低接入复杂度
- 提高开发效率
- 提供默认的数据操作方法
- 提供基础实体类
- 提供主键生成器
- 提供sql分析器
- 提供数据填充组件
名称 | 备注 |
---|---|
common | 基础配置和实体集合 |
interceptor | sql拦截分析器 |
primarikey | 主键组件 |
名称 | 备注 |
---|---|
BaseMapper | 基础Mapper、该Mapper不能被MappScan扫描到 |
DataBaseConfig | 数据源配置类 |
BaseEntity | 基础实体类、定义模板属性 |
BaseMetaObjectHandler | 基础的实体填充助手类 |
DefaultMetaObjectHandler | 默认的实体填充助手类 |
名称 | 备注 |
---|---|
SqlLogInterceptor | sql分析拦截器、打印sql、记录执行时间 |
SqlLogInterceptorProperties | sql分析拦截器属性 |
名称 | 备注 |
---|---|
PrimaryKeyConfig | 主键配置类 |
BaseKeyGenerator | 基础Key的生成者、所有key生成者的父接口 |
KeyGeneratorForSnowflake | 雪花算法主键生成器 |
SnowflakeIdAlgorithm | 雪花算法 |
BaseMapper
/**
* 示例Mapper
*
* @author daiqi
* @create 2018-12-03 16:42
*/
public interface DemoMapper extends BaseMapper<DemoEntity> {
/**
* <p>
* 根据查询条件获取继承BaseEntity的实体列表数据
* </p>
*
* @param query
* @return java.manager.List<T>
* @author daiqi
* @date 2018/12/3 16:45
*/
<DemoQuery> List<DemoEntity> listByQuery(@Param(value = "query") Query query);
}
DataBaseConfig
- 配置开关
- 配置mapper-locations
sika:
code:
jdbc:
fire: true
mybatis:
mapper-locations: classpath*:mapper/*.xml
spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource
dynamic:
enable: true
hikari:
# JDBC 配置(驱动类自动从url的mysql识别,数据源类型自动识别)
core:
minimum-idle: 10
maximum-pool-size: 20
auto-commit: true
idle-timeout: 600000
pool-name: DatebookHikariCP
max-lifetime: 1800000
connection-timeout: 30000
connection-test-query: SELECT 1
jdbc-url: jdbc:mysql://rm-wz9632z95v9v65458o.mysql.rds.aliyuncs.com:3306/dq_easy_cloud?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false
username: dq_easy_cloud
password: Easy-cloud
driver-class-name: com.mysql.jdbc.Driver
BaseEntity
@Data
public class BaseEntity<PRIMARY extends Serializable, BY> {
/** 主键 */
@TableId(type = IdType.ID_WORKER)
private PRIMARY id;
/** 创建者 若为空则保存的时候会自动根据规则填充 */
@TableField(fill = FieldFill.INSERT)
private BY createBy;
/** 创建时间 若为空则保存的时候自动填充 */
@TableField(fill = FieldFill.INSERT)
private Date createDate;
/** 更新者 若为空则更新的时候会自动根据规则填充*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private BY updateBy;
/** 更新时间 若为空更新的时候会自动填充 */
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateDate;
/** 版本号 乐观锁的基础支持 */
@Version
private Integer version;
/**
* 删除标志
*/
@TableLogic
private Integer isDeleted;
/**
* 可用标志
*/
private Integer available;
/**
* 备注
*/
private String remark;
}
/**
* 示例实体类
*
* @author daiqi
* @create 2018-08-03 14:59
*/
@Data
public abstract class DemoEntity extends BaseEntity<Long, String> {
private String userName;
}
BaseMetaObjectHandler、DefaultMetaObjectHandler
- Entity需要自动填充的属性添加@TableField(fill = FieldFill.INSERT_UPDATE),详细用法
- 自定义填充类并继承DefaultMetaObjectHandler或BaseMetaObjectHandler
- 配置填充Bean实例
public class User {
// 注意!这里需要标记为填充字段
@TableField(.. fill = FieldFill.INSERT)
private String fillField;
....
}
/**
* 示例的填充助手类
*
* @author daiqi
* @create 2019-05-29 17:40
*/
@Slf4j
public class DemoMetaObjectHandler extends StandardMetaObjectHandler {
/**
* <p>
* 保存的时候触发 填充方式根据具体需求2选1
* </p>
*
* @param metaObject
* @return void
* @author daiqi
* @date 2019/7/15 9:29
*/
@Override
public void insertFill(MetaObject metaObject) {
super.insertFill(metaObject);
// 方式一: 自动填充创建者、该方法只有createBy的值为空时才会进行填充
super.setFieldValByNameCustomer("createBy", "zhangsan", metaObject);
// 方式二: 自动填充创建者、该方法无论createBy的值是否为空都会进行填充
super.setFieldValByName("createBy", "zhangsan", metaObject);
}
/**
* <p>
* 更新的时候触发 填充方式根据具体需求2选1
* </p>
*
* @param metaObject
* @return void
* @author daiqi
* @date 2019/7/15 9:30
*/
@Override
public void updateFill(MetaObject metaObject) {
super.updateFill(metaObject);
// 方式一: 自动填充更新者、该方法只有updateBy的值为空时才会进行填充
super.setFieldValByNameCustomer("updateBy", "zhangsan", metaObject);
// 方式二: 自动填充更新者、该方法无论updateBy的值是否为空都会进行填充
super.setFieldValByName("updateBy", "zhangsan", metaObject);
}
}
/**
* 填充者配置类
*/
@Configuration
public class FillConfig {
@Bean
@ConditionalOnMissingBean
public DefaultMetaObjectHandler defaultMetaObjectHandler() {
return new DemoMetaObjectHandler();
}
}