SpringBoot(二)整合JDBC和Mybatis

SpringBoot(二)

SpringBoot整合JDBC:

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整合Druid:

上面说到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执行情况,监控能力十分不错。

SpringBoot整合Mybatis

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(),"男","广州"));
    }

}

你可能感兴趣的:(笔记)