springBoot学习笔记-16-整合JDBC


1、创建新项目.

选中JDBC API 和 MySQL Driver

2、编写 application.properties配置文件 – 数据库连接.

注意:serverTimezone 必须写,SpringBoot默认mysql8 ,mysql8需要配置时区

# 数据库连接
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=mysql
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

3、获取数据源 和 连接.

数据源使用 DataSource 自动注入即可

连接 调用 dateSource.getConnection()

SpringBoot 中使用的 默认数据库连接池 是 Hikari

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

@SpringBootTest
class DataApplicationTests {

    @Autowired
    DataSource dataSource;

    @Test
    void contextLoads() throws SQLException {
        // 查看默认的数据源 class com.zaxxer.hikari.HikariDataSource
        System.out.println(dataSource.getClass());

        // 获取数据库的连接
        Connection connection = dataSource.getConnection();

        // xxx Template : SpringBoot 写好的Bean 可以直接用
        // jdbcTemplate
        // redisTemplate
        // ...

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

4、xxxTemplate的使用.

CRUD : 原生

@RestController
public class JDBCController {

    @Autowired
    JdbcTemplate jdbcTemplate;

    // 查询数据库的所以信息
    @RequestMapping("/userList")
    public List<Map<String, Object>> userList(){
        String sql = "select * from mybatis.user";
        List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
        return maps;
    }

    @RequestMapping("/addUser")
    public String addUser(){
        String sql = "insert into mybatis.user(name,pwd) values('heihei','buheihei')";

        Integer update = jdbcTemplate.update(sql);
        return update.toString();
    }

    @RequestMapping("/updateUser")
    public String updateUser(){
        String sql = "update mybatis.user set name = ?,pwd = ? where id = ?";

        // 参数
        Object[] params = {"kaikai","liuminkai",2};

        Integer update = jdbcTemplate.update(sql, params);
        return update.toString();
    }

    @RequestMapping("/deleteUser")
    public String deleteUser(){
        String sql = "delete from mybatis.user where id = ?";

        Integer update = jdbcTemplate.update(sql, 1);
        return update.toString();
    }
}

5、整合DruidDataSource数据源.

引入依赖.

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.24</version>
</dependency>

配置文件中 指定数据源.

# 数据库连接
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=mysql
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# 指定数据源
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

druid的配置(需要导入log4j).

# druid 数据源专有配置
spring.datasource.druid.initial-size=5
spring.datasource.druid.min-idle=5
spring.datasource.druid.max-active=20
spring.datasource.druid.max-wait=60000
spring.datasource.druid.time-between-eviction-runs-millis=60000
spring.datasource.druid.min-evictable-idle-time-millis=300000
spring.datasource.druid.validation-query=SELECT 1 FROM DUAL
spring.datasource.druid.test-while-idle=true
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-on-return=false
spring.datasource.druid.pool-prepared-statements=true

# 配置监控统计拦截的filters、stat:监控统计、log4j:日志记录、wall、防御sql注入
# 使用日志 需要导入 log4j
spring.datasource.druid.filters=stat,wall,log4j
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20
spring.datasource.druid.use-global-data-source-stat=true
spring.datasource.druid.connection-properties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
<!-- log4j -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

DruidConfig.

@Configuration
public class DruidConfig {

    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource druidDataSource(){
        return new DruidDataSource();
    }

    // 后台监控 这个相当于 Web.xml
    // 因为 SpringBoot 内置了 servlet容器,所以没有web.xml
    // 替代方法 ServletRegistrationBean
    @Bean
    public ServletRegistrationBean statViewServlet(){
        ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(),"/druid/*");

        // 后台需要有人登陆,账号密码配置
        HashMap<String,String> initParameters = new HashMap<>();
        // 增加配置
        initParameters.put("loginUsername","admin");// 这两个是固定的
        initParameters.put("loginPassword","123456");

        // 允许谁可以访问 后面是ip地址
        initParameters.put("allow","");
        // 禁止谁访问 initParameters.put("名字","ip") deny

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

    // filter
    @Bean
    public FilterRegistrationBean webStatFilter(){
        // 创建过滤器
        FilterRegistrationBean bean = new FilterRegistrationBean();
        bean.setFilter(new WebStatFilter());

        // 可以过滤的请求
        bean.addUrlPatterns("/*");
        // 忽略
        bean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        return bean;
    }
}

编写完以上代码后 启动项目 可以 直接访问 localhost:8080/druid/login.html 使用设置好的账号密码进行登录,查看后台信息

6、整合MyBatis框架.

引入依赖.

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.3</version>
</dependency>

连接数据库.

# 数据库连接 application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=mysql
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

编写实体类 和 Mapper接口.

实体类

// 使用了lombok 需要引入依赖 和 安装插件
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private Integer id;
    private String name;
    private String pwd;
}

Mapper接口

@Mapper 表示这是一个mybatis 的 mapper类 : Dao

@Repsitory 被spring容器接管

@Mapper //表示这是一个mybatis 的 mapper类 : Dao
@Repository // spring容器接管
public interface UserMapper {

    List<User> queryUserList();

    User queryUserById(Integer id);

    Integer addUser(User user);

    Integer updateUser(User user);

    Integer deleteUser(Integer id);
}

创建Mapper.xml(需要在resource目录下).

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">
<mapper namespace="com.liuyou.mapper.UserMapper">

</mapper>

配置文件中,设置MyBatis.

# MyBatis
# 别名
mybatis.type-aliases-package=com.liuyou.pojo 
# 本地配置文件
#mybatis.config-location=
# 绑定Mapper.xml 注意:classpath: 后别跟 /
mybatis.mapper-locations=classpath:mapper/*.xml

编写SQL,在对应的Mapper.xml中.

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

<delete id="deleteUser" parameterType="int">
    delete from mybatis.user
    whehe
    id = #{id}
</delete>

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

<select id="queryUserList" resultType="user">
    select * from mybatis.user
</select>

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

编写控制层(这里直接跳过业务层,直接Controller调Dao).

真实情况下,必须写业务层

结果展示.

查询所有用户

查询所有用户

查询单个用户

查询单个用户

新增一个用户

新增一个用户

新增成功

修改一个用户

修改一个用户

修改成功

删除一个用户

删除一个用户

移除成功


文章作者: liuminkai
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 liuminkai !
评论
 上一篇
springBoot学习笔记-17-SpringSecurity springBoot学习笔记-17-SpringSecurity
SpringSecurity. Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。 它是保护基于spring的应用程序的事实标准。 Spring Security是一个重点为Java应用程序提供身份验证和授权
2020-09-30
下一篇 
springBoot学习笔记-14-添加员工 springBoot学习笔记-14-添加员工
添加员工.1、增加添加按钮.<a class="btn btn-success btn-sm float-right" th:href="@{/emp}" >添加</a> 2、填写添加 页面 add.html. 这里直接拷贝
2020-09-29
  目录