SpringBoot Web 学习笔记(3)

本文介绍了如何在SpringBoot项目中整合JDBC、Druid数据源以及MyBatis,包括配置步骤、测试方法以及相关组件的使用。详细讲解了SpringBoot如何通过SpringData简化数据库操作,Druid数据源的监控和性能优化功能,以及MyBatis的实体类、Mapper接口和XML配置文件的创建。通过实例展示了数据的增删改查操作。
摘要由CSDN通过智能技术生成

无论是关系型数据库还是非关系型数据库,Spring Boot 底层都是采用 Spring Data 的方式统一进行处理。

一、整合 JDBC 使用

1、新建 SpringBoot 项目,还要导入 Web 依赖

在这里插入图片描述

2、新建yaml配置文件: application.yml
spring:
  datasource:
    username: 'root'
    password: ''
    url: jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.cj.jdbc.Driver
3、使用 SpringBoot 单元测试进行测试:
@SpringBootTest
class Springboot05DataApplicationTests {

    @Autowired
    DataSource dataSource;

    @Test
    void contextLoads() throws SQLException {
        // 查看一下默认的数据源
        System.out.println(dataSource.getClass());
        // 获得数据库连接
        Connection connection = dataSource.getConnection();
        System.out.println(connection);

        // xxxTemplate : SpringBoot 已经配置好的 Bean,拿来即用

        // 关闭数据库连接
        connection.close();
    }
}

新建一个 controller 进行测试:

@RestController
public class JDBCController {

    @Autowired
    JdbcTemplate jdbcTemplate;

    // 查询数据库的所有信息
    // 没有实体类,使用 Map 获取信息
    @GetMapping("/userList")
    public List<Map<String, Object>> userList(){
        String sql = "select * from user";
        List<Map<String, Object>> list_maps = jdbcTemplate.queryForList(sql);
        return list_maps;
    }

    // 可以实现增删改查
    @GetMapping("/updateUser/{id}") 	// 访问地址:http://localhost:8080/updateUser/id
    public String updateUser(@PathVariable("id")Integer id){
        String sql = "update mybatis.user set name=?, pwd=? where id=" + id;
        // 封装
        Object[] objects = new Object[2];
        objects[0] = "面包+";
        objects[1] = "aaaaa";
        jdbcTemplate.update(sql, objects);

        return "Update-Ok";
    }
}

二、整合 Druid 数据源

1、简介

Druid 是一个JDBC组件,它包括三部分:

  • DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系。
  • DruidDataSource 高效可管理的数据库连接池。
  • SQLParser

Druid可以做什么?

  1. 可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。

  2. 替换DBCPC3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。

  3. 数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。

  4. SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-LoggingLog4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。

2、使用

导入依赖

<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.4</version>
</dependency>

配置文件配置数据源

spring:
  datasource:
  ...
  type: com.alibaba.druid.pool.DruidDataSource

使用 一、 中的单元测试可以查看配置后使用的数据源。

Druid 的一些配置

spring:
  datasource:
    ...
    
    # SpringBoot 默认是不注入这些的,需要自己绑定
    # 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.Properity
    # 则导入log4j 依赖就行
    filters: stat,wall,log4j
    maxPoolPreparedStatementPerConnectionSize: 20
    useGlobalDataSourceStat: true
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

一样能使用 一、中的 controller 进行测试。

新建 config 包下新建 DruidConfig 配置类。@Bean : 注册到容器中

@Configuration
public class DruidConfig {

    @ConfigurationProperties(prefix = "spring.datasource")      // 与 application.yml 绑定
    @Bean
    public DataSource druidDataSource(){
        return new DruidDataSource();
    }

    // 后台监控 (访问 /druid/*  进入后台监控界面)
    // 因为 SpringBoot 内置了 Servlet 容器,所以没有 web.xml. 替代方法:ServletRegistrationBean
    // 相当于 web.xml 配置这个 Servlet: ServletRegistrationBean
    @Bean
    public ServletRegistrationBean statViewServlet(){
        ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
        // 后台需要有人登陆,就是账号和密码
        HashMap<String, String> initParameters = new HashMap<>();
        // 增加配置
        initParameters.put("loginUsername", "admin");   // 登陆的 key 是固定的 loginUsername, loginPassword
        initParameters.put("loginPassword","123456");

        // 允许谁访问
        initParameters.put("allow", "");   // "localhost" ==> 允许本机访问

        // 禁止谁访问 initParameters.put("mianbao", "192.198.10.10");

        bean.setInitParameters(initParameters);   // 设置初始化参数
        return bean;
    }

    // filter
    @Bean
    public FilterRegistrationBean webStatFilter(){
        FilterRegistrationBean<Filter> bean = new FilterRegistrationBean<>();
        bean.setFilter(new WebStatFilter());
        // 可以过滤哪些请求
        HashMap<String, String> initParameters = new HashMap<>();

        // 这些东西不用统计
        initParameters.put("exclusions", "*.js, *.css, /druid/*");    // 点到 WebStatFilter 里,查看可配置选项

        bean.setInitParameters(initParameters);
        return bean;
    }
}

三、整合 MyBatis

1、新建 SpringBoot 项目

导入整合包:mybatis-spring-boot-starter (非官方) 。 官方的是: spring-boot-starter-xxxx

<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.4</version>
</dependency>

使用 SpringBoot 单元测试进行测试 (一、的3、)

2、使用测试
2.1 新建 pojo包,新建与数据库映射的实体类 User。
public class User {
    private int id;
    private String name;
    private String pwd;
    
    // getter and setter
}
2.2 新建 mapper包,新建 UserMapper 接口。

在 UserMapper 接口上加上注解 @Mapper ,这个注解表示了这是一个 Mybatis 的 mapper 类。

@Mapper         // 这个注解表示了这是一个 Mybatis 的 mapper 类:
@Repository     // Dao 层组件的注解
public interface UserMapper {

    List<User> queryUserList();

    User queryUserById(int id);

    int addUser(User user);

    int updateUser(User user);

    int deleteUser(int id);

}

也可以在启动类加上注解 @MapperScan("com.example.mapper")

2.3 在 resources 下新建 mybatis/mapper/UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace 定义一个对应的 Dao/Mapper 接口 -->
<mapper namespace="com.example.mapper.UserMapper">
    <select id="queryUserList" resultType="User">
        select * from mybatis.user
    </select>

    <select id="queryUserById" resultType="User">
        select * from mybatis.user where id = #{id}
    </select>

    <insert id="addUser" parameterType="User">
        insert into mybatis.user(id, name, pwd) VALUES(#{id}, #{name}, #{pwd})
    </insert>

    <update id="updateUser" parameterType="User">
        update mybatis.user set name = #{name}, pwd = #{pwd} where id = #{id}
    </update>

    <delete id="deleteUser" parameterType="int">
        delete from mybatis.user where id = #{id}
    </delete>
</mapper>
2.4 配置文件整合MyBatis
spring.datasource.username=root
spring.datasource.password=
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai

# 整合 MyBatis
# Mybatis 的别名配置 
mybatis.type-aliases-package=com.example.pojo
# Mapper 的地址配置 classpath: 指的是 resource
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
2.5 编写 controller 进行测试
@RestController
public class UserController {

    @Autowired
    private UserMapper userMapper;

    @GetMapping("/queryUserList")
    public List<User> queryUserList(){
        List<User> userList = userMapper.queryUserList();
        for (User user : userList) {
            System.out.println(user.toString());
        }
        return userList;
    }
    
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值