标签:serve int cli frame class dep alias min 组合
一、MyBatis发展史
MyBatis原是apache的一个开源项目iBatis, 2010年6月这个项目由apache software foundation 迁移到了google code,随着开发团队转投Google Code旗下,ibatis3.x正式更名为Mybatis ,代码于2013年11月迁移到Github。
iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。
二、SpringBoot集成MyBatis
1、添加依赖
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.0</version> </dependency> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.1.0</version> </dependency> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.3</version> </dependency>
2、配置文件
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource # 配置当前要使用的数据源的操作类型
driver-class-name: oracle.jdbc.driver.OracleDriver # 配置ORACLE的驱动程序类
url: jdbc:oracle:thin:@localhost:1521:ORCL # 数据库连接地址
username: "plat_user" # 数据库用户名
password: 123
druid: # 进行数据库连接池的配置
min-idle: 5 # 数据库连接池的最小维持连接数
initial-size: 5 # 初始化提供的连接数
max-total: 5 # 最大的连接数
max-wait-millis: 200 # 等待连接获取的最大超时时间
mybatis:
type-aliases-package: com.example.demo.dao.mapper # 定义所有操作类的别名所在包
mapper-locations: classpath:com/example/demo/dao/config/**/*.xml # 所有的mapper映射文件
logImpl: org.apache.ibatis.logging.log4j2.Log4j2Impl # mybatis日志
pagehelper:
reasonable: false
supportMethodsArguments: true
params: pageNum=start;pageSize=limit;
3、注解
@SpringBootApplication @EnableDiscoveryClient @MapperScan("com.example.demo.dao.mapper") public class Application { public static void main(String[] args ) { SpringApplication.run(Application.class, args); } }
三、MyBatis深入
1、分页插件PageHelper
pagehelper使用时要注意版本号,重要的事情说三遍,一定要注意,一定要注意,如果版本号不对应,那么分页插件不会生效。
a) 添加依赖
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.1.0</version> </dependency> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.3</version> </dependency>
b) 实现
pagehelper使用有两种方式,配置文件方式和代码声明方式。
配置文件方式(yaml):
pagehelper:
reasonable: false
supportMethodsArguments: true
params: pageNum=start;pageSize=limit;
代码声明方式
@Bean public PageHelper pageHelper() { PageHelper pageHelper = new PageHelper(); Properties p = new Properties(); p.setProperty("offsetAsPageNum", "true"); p.setProperty("rowBoundsWithCount", "true"); p.setProperty("reasonable", "true"); pageHelper.setProperties(p); return pageHelper; }
2、多数据源支持
a) 添加依赖
添加依赖和单个数据与无区别,同“二、SpringBoot集成MyBatis ->1、添加依赖”。
b) 配置文件
spring:
datasource:
example1:
password: root
url: jdbc:mysql://127.0.0.1:3306/master?useUnicode=true&characterEncoding=UTF-8
driver-class-name: com.mysql.jdbc.Driver
username: root
type: com.zaxxer.hikari.HikariDataSource
example2:
password: root
url: jdbc:mysql://127.0.0.1:3306/slave1?useUnicode=true&characterEncoding=UTF-8
idle-timeout: 20000
driver-class-name: com.mysql.jdbc.Driver
username: root
type: com.zaxxer.hikari.HikariDataSource
c) 代码实现
@Bean("dataSource")// 将这个对象放入Spring容器中
@Primary // 表示这个数据源是默认数据源
@ConfigurationProperties(prefix = "spring.datasource.example1")// 读取application.properties中的配置参数映射成为一个对象 prefix表示参数的前缀
public DataSource getDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "sqlSessionFactory")// 表示这个数据源是默认数据源
@Primary // @Qualifier表示查找Spring容器中名字为test1DataSource的对象
public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource") DataSource datasource)
throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(datasource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapping/example1/*.xml"));// 设置mybatis的xml所在位置
return bean.getObject();
}
@Bean("dataSourceExample2")// 将这个对象放入Spring容器中
@ConfigurationProperties(prefix = "spring.datasource.example2")// 读取application.properties中的配置参数映射成为一个对象 prefix表示参数的前缀
public DataSource getDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "sqlSessionFactoryExample2")// 表示这个数据源是默认数据源
// @Qualifier表示查找Spring容器中名字为test1DataSource的对象
public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSourceExample2") DataSource datasource)
throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(datasource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapping/examplew/*.xml"));// 设置mybatis的xml所在位置
return bean.getObject();
}
3、去本地化配置(spring cloud config)
a) 项目配置文件
#日志文件名
logging:
file: ${spring.application.name}
#配置中心地址
logging:
config: http://172.17.30.111:9001/plat-config/test/develop/log4j2.yml?resolvePlaceholders=false&type=.yml
b) 日志配置文件
Configuration:
status: error
name: YAMLConfig
properties:
property:
- name: log_file
value: "${sys:LOG_FILE}"
- name: log_pattern
value: "%d{yyyy-MM-ddHH:mm:ss,SSS z} %t [${log_file},%X{X-B3-TraceId},%X{X-B3-SpanId},%X{X-B3-ParentSpanId}] %-5level %class{36} %L %M - %msg%xEx%n"
- name: base_path
value: "/java/apache-tomcat-8.0.36/webapps"
- name: file_name
value: "${base_path}/log/${log_file}.log"
- name: rolling_file_name
value: "${base_path}/backup/${log_file}-%d{yyyy-MM-dd}-%i.log.gz"
- name: every_file_size
value: 10M
Appenders:
Console:
name: Console
target: SYSTEM_OUT
PatternLayout:
Pattern: ${log_pattern}
ThresholdFilter:
level: trace
onMatch: ACCEPT
onMismatch: DENY
RollingFile:
name: RollingFile
fileName: ${filename}
filePattern: ${rolling_file_name}
PatternLayout:
Pattern: ${log_pattern}
Policies:
SizeBasedTriggeringPolicy:
size: ${every_file_size}
Kafka: #输出到Kafka
name: Kafka
topic: app_log
#Kafka appender ignoreExceptions 必须设置为false,否则无法触发Failover
ignoreExceptions: false
PatternLayout:
Pattern: ${log_pattern}
Property:
- name: bootstrap.servers
value: 172.17.30.143:9092
# KafkaClient包里默认值是60000ms,当Kafka宕机时,尝试写Kafka需要1分钟才能返回Exception,之后才会触发Failover,当请求量大时,log4j2 队列很快就会打满,之后写日志就Blocking,严重影响到主服务响应。所以要设置足够短,队列长度足够长
- name: max.block.ms
value: 20000
Failover: #此处的Failover Appender就是解耦对Kafka的依赖,当Kafka Crash时,日志触发Failover,写本地即可
name: Failover
primary: Kafka
#retryIntervalSeconds 是通过异常来切换的,所以可以适量加大间隔,比如上面的10分钟
retryIntervalSeconds: 600
Failovers:
AppenderRef:
- ref: Console
Loggers:
logger:
- name: org.apache.http
level: INFO
additivity: false
AppenderRef:
- ref: Console
- ref: RollingFile
- ref: Failover
- name: com.netflix.discovery
level: ERROR
additivity: false
AppenderRef:
- ref: Console
- ref: RollingFile
- ref: Failover
Root:
level: DEBUG
AppenderRef:
- ref: Console
- ref: RollingFile
- ref: Failover
c) 添加依赖
<dependency> <!-- 引入log4j2依赖 --> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> <dependency> <!-- 加上这个才能辨认到log4j2.yml文件 --> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-yaml</artifactId> </dependency>
注意:pom文件要添加yaml文件支持的依赖
附录: 《MyBatis中文官网地址》
标签:serve int cli frame class dep alias min 组合
原文地址:https://www.cnblogs.com/pinenut/p/11884419.html