mybatis 起步依赖:完成 mybatis 对象自动配置,对象放在容器中pom.xml 配置文件中指定将 src/main/java 目录中的 xml 文件编译dao 接口
mapper.xml 文件
service 层
service 接口和实现类dao 的方法完成数据库操作,实现具体业务逻辑controller ,访问 service 方法实现业务application.properties 配置文件
spring:
# 配置数据源,默认框架中封装的 HikariDataSource
datasource:
#自定义数据源类型
type: com.alibaba.druid.pool.DruidDataSource
#驱动类: MySQL 8.0 新的驱动文件,速度更快
driver-class-name: com.mysql.cj.jdbc.Driver
# MySQL 连接的 url
# useUnicode 使用Unicode编码,编码格式 UTF-8
# serverTimezone:执行时区
# GMT:标准时区;%2B8:+8小时
url: jdbc:mysql://localhost:3306/demo01?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
username: root
password: 123456
UTC:全球标准时间
GMT:格林威治标准时间
需要导入 SpringBoot 中的 Druid 起步依赖才能自动配置
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druid-spring-boot-starterartifactId>
<version>1.2.8version>
dependency>
spring:
# 配置数据源
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/demo01?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
username: root
password: 123456
type: com.alibaba.druid.pool.DruidDataSource
# 配置 druid 连接属性
druid:
# 初始化连接数
initialSize: 5
# 最小连接数
minIdle: 5
# 最大连接数
maxActive: 20
# 最大等待时间,配置获取连接等待超时,时间单位都是毫秒ms
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,又作为 testWhileIdle 执行的依据
timeBetweenEvictionRunsMillis: 60000
# 连接保持空闲而不被驱逐的最小时间
minEvictableIdleTimeMillis: 300000
# 用来检测连接是否有效的 sql,必须是一个查询语句
# mysql 中为 select 'x'、oracle 中为 select 1 from dual
validation-query: select 'x'
# 申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效
# 建议配置为true,不影响性能,并且保证安全性
testWhileIdle: true
# 申请连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
testOnBorrow: false
# 归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
testOnReturn: false
# 是否缓存preparedStatement,即 PSCache;MySQL5.7 不要开
# 使用了MyBatis且使用了$的值引入方式,则无需担心SQL注入问题。Prepared statement不再需要
# PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
poolPreparedStatements: true
# 启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true
maxPoolPreparedStatementPerConnectionSize: 20
# 合并多个 DruidDataSource 的监控数据
useGlobalDataSourceStat: true
# 通过别名的方式配置扩展插件
# 监控统计:stat, 日志:log4j,防御SQL注入:wall
# wall 用于防火墙;SpringBoot 中没有 log4j,改成了 log4j2
filters: stat,wall,log4j2
# 通过 connectProperties 属性来打开 mergeSql 功能;慢 SQL 记录
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
# 配置 StatFilter,或者在配置类中手动配置
web-stat-filter:
# 默认为 false,设置为 true 启动
enabled: true
# 被过滤的请求路径
url-pattern: "/*"
# 不被过滤的请求
exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"
# 配置StatViewServlet,或者在配置类中手动配置
stat-view-servlet:
url-pattern: "/druid/*"
# 允许访问 ip
allow: 127.0.0.1
# 设置访问 druid 监控页的账号和密码,默认没有
login-username: admin
login-password: 123456
# 禁止访问 ip
deny: 192.168.1.102
# 是否可以重置
reset-enable: true
# 启用
enabled: true
mybatis:
# mapper 文件映射
mapper-locations: classpath:mapper/*.xml
# 打印 sql 语句执行日志到控制台
configuration.log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# 类别名配置
type-aliases-package: mybatis2.pojo
server:
port: 80
/*
* Druid 配置类
*/
@Configuration
public class DruidConfig {
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource druidDatasource() {
return new DruidDataSource();
}
/*
* 配置 Druid 监控管理后台的Servlet;
* 内置 Servlet 容器没有 web.xml 文件,所以使用 Spring Boot 的注册 Servlet 方式
*/
@Bean
public ServletRegistrationBean statViewServlet() {
ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
// 参数可以在 StatViewServlet 的父类 ResourceServlet 中找到
Map<String, String> initParams = new HashMap<>();
//后台登录账号密码设置
initParams.put("loginUsername", "admin");
initParams.put("loginPassword", "123456");
//默认就是允许所有访问
initParams.put("allow", "");
//deny:Druid 后台拒绝谁访问,表示禁止此ip访问
initParams.put("deny", "192.168.10.132");
//是否可以重置数据
initParams.put("resetEnable","false");
//设置初始化参数
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,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
bean.setInitParameters(initParams);
//设置过滤路径
bean.setUrlPatterns(Arrays.asList("/*"));
return bean;
}
}
@Mapper 注解在 Dao 接口上
@Repository 注解将 bean 注入到 容器
@Mapper
//@Repository
public interface DemoDao {
//方法定义略
}
@Mapperscan 注解在主启动类
basePackages 指定 dao 接口所在包
@Mapper@SpringBootApplication
@MapperScan(basePackages = "springboot_mybatis.dao")
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
mapper.xml 文件放到 resources 资源目录下resources 目录下资源文件application.properties 文件中指定 mapper 文件路径#指定 mapper 文件位置:mapper 目录下所有 xml 文件
mybatis.mapper-locations=classpath:mapper/*.xml
#打印 sql 语句执行日志
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
DataSourceTransactionManagerSpring 框架中的 @Transaction 注解aspecjt 框架在 xml 配置文件中声明事务控制的内容仍可使用 Spring 中方式进行
@Transactional
@EnableTransactionManagement