1、在创建项目的时候需要把JDBC API加上,这样就不用了自己去导依赖了
2、编写yaml文件连接数据库,填写数据源的基本信息。这里需要注意的点是springboot内置的MySql连接器是8.x版本的,所以在填写url参数时要加上时区(serverTimezone=UTC),还有驱动器driver中间加上cj。
spring:
datasource:
username: root
password: 123456
#?serverTimezone=UTC解决时区的报错
url: jdbc:mysql://localhost:3306/springboot?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
driver-class-name: com.mysql.cj.jdbc.Driver
3、配置完之后就可以去使用了,因为springboot已经帮我们在底层去配置好了,可以去测试类测试一下
@SpringBootTest
class SpringbootDataJdbcApplicationTests {
//DI注入数据源
@Autowired
DataSource dataSource;
@Test
public void contextLoads() throws SQLException {
//看一下默认数据源
System.out.println(dataSource.getClass());
//获得连接
Connection connection = dataSource.getConnection();
System.out.println(connection);
//关闭连接
connection.close();
}
}
查看结果可以发现,springboot的默认数据源是HikariDataSource ,当然我们也可以去更换。有了数据源之后就可以去使用JdbcTemplate了,可以去尝试普通的CRUD操作。
上面说到SpringBoot的默认数据源是HikariDataSource ,这个数据源是很优秀的,但是还有Druid也是比较好用的,Druid连接池能够起到很好的监控作用。
1、首先添加依赖
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druidartifactId>
<version>1.1.21version>
dependency>
2、在yaml中配置数据源,可以去测试类中测试导入成功没有。
spring:
datasource:
username: root
password: 123456
url: jdbc:mysql://localhost:3306/springboot?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource # 自定义数据源
3、切换成功后,还可以去设置数据源的其他参数,例如数据库连接池大小,等待时间等等。
spring:
datasource:
username: root
password: 123456
#?serverTimezone=UTC解决时区的报错
url: jdbc:mysql://localhost:3306/springboot?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
#Spring Boot 默认是不注入这些属性值的,需要自己绑定
#druid 数据源专有配置
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
#配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入
#如果允许时报错 java.lang.ClassNotFoundException: org.apache.log4j.Priority
#则导入 log4j 依赖即可,Maven 地址:https://mvnrepository.com/artifact/log4j/log4j
filters: stat,wall,log4j
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
导入log4j
<dependency>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
<version>1.2.17version>
dependency>
4、因为数据源的参数改变了,而不是使用springboot默认的,那么需要自己去装配,把DruidDataSource 添加到容器当中。
@Configuration
public class DruidConfig {
/*
将自定义的 Druid数据源添加到容器中,不再让 Spring Boot 自动创建
绑定全局配置文件中的 druid 数据源属性到 com.alibaba.druid.pool.DruidDataSource从而让它们生效
@ConfigurationProperties(prefix = "spring.datasource"):作用就是将 全局配置文件中
前缀为 spring.datasource的属性值注入到 com.alibaba.druid.pool.DruidDataSource 的同名参数中
*/
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource druidDataSource() {
return new DruidDataSource();
}
}
5、配置Druid数据源监控,Druid 数据源具有监控的功能,并提供了一个 web 界面方便用户查看,类似安装 路由器 时,人家也提供了一个默认的 web 页面。第一步需要设置 Druid 的后台管理页面,比如 登录账号、密码 等;配置后台管理。
//配置 Druid 监控管理后台的Servlet;
//内置 Servlet 容器时没有web.xml文件,所以使用 Spring Boot 的注册 Servlet 方式
@Bean
public ServletRegistrationBean statViewServlet() {
ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
// 这些参数可以在 com.alibaba.druid.support.http.StatViewServlet
// 的父类 com.alibaba.druid.support.http.ResourceServlet 中找到
Map<String, String> initParams = new HashMap<>();
initParams.put("loginUsername", "admin"); //后台管理界面的登录账号
initParams.put("loginPassword", "123456"); //后台管理界面的登录密码
//后台允许谁可以访问
//initParams.put("allow", "localhost"):表示只有本机可以访问
//initParams.put("allow", ""):为空或者为null时,表示允许所有访问
initParams.put("allow", "");
//deny:Druid 后台拒绝谁访问
//initParams.put("kuangshen", "192.168.1.20");表示禁止此ip访问
//设置初始化参数
bean.setInitParameters(initParams);
return bean;
}
配置完毕后,我们可以选择访问 :http://localhost:8080/druid/login.html,进入之后可以监控数据库的信息,还可以实时查看SQL执行情况,监控能力十分不错。
1、首先导入依赖
<dependency>
<groupId>org.mybatis.spring.bootgroupId>
<artifactId>mybatis-spring-boot-starterartifactId>
<version>2.1.1version>
dependency>
2、配置数据库连接信息和上面一样
3、创建实体类
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
}
4、在yaml中配置mybatis,设置封装的实体类和映射的mapper的xml文件路径
#整合mybatis,设置封装实体类别名和映射的mapper的xml文件路径
mybatis:
type-aliases-package: cn.zhku.pojo
mapper-locations: classpath:mybatis/mapper/*.xml
5、创建Mapper接口
//这注解表示该类是一个mybatis的mapper类
@Mapper
@Repository
public interface UserMapper {
List<User> findAll();
User findById(@Param("id") Integer id);
int addUser(User user);
int updateUser(User user);
int deleteById(Integer id);
}
6、对应的Mapper映射文件
<mapper namespace="cn.zhku.mapper.UserMapper">
<select id="findAll" resultType="User">
select * from user
select>
<select id="findById" parameterType="int" resultType="User">
select * from user where id=#{id}
select>
<insert id="addUser" parameterType="User">
insert into mybatis.user (username, birthday, sex, address) values (#{username},#{birthday},#{sex},#{address});
insert>
mapper>
7、maven配置资源过滤问题
<resources>
<resource>
<directory>src/main/javadirectory>
<includes>
<include>**/*.xmlinclude>
includes>
<filtering>truefiltering>
resource>
resources>
8、去测试类中进行测试,记得要注入数据源!
@SpringBootTest
class Springboot05MybatisApplicationTests {
@Autowired
DataSource dataSource;
@Autowired
UserMapper userMapper;
@Test
void contextLoads() {
/*List all = userMapper.findAll();
for (User user : all) {
System.out.println(user);
}*/
/*User byId = userMapper.findById(43);
System.out.println(byId);*/
userMapper.addUser(new User(null,"aaa",new Date(),"男","广州"));
}
}