SpringBoot3数据访问

SpringBoot3数据访问

SpringBoot整合 Spring、SpringMVC、MyBatis进行数据访问开发。

整合SSM场景

整合步骤

1、创建SSM整合项目

①数据库准备

sql 复制代码
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user`  (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `login_name` varchar(200) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '用户名称',
  `nick_name` varchar(200) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '用户昵称',
  `password` varchar(200) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '用户密码',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
INSERT INTO `t_user` VALUES (1, 'louie', '路易', '1a1a');

②场景导入,可以在创项目的时候进行选择

xml 复制代码
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>3.0.2</version>
</dependency>
<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <scope>runtime</scope>
</dependency>

③创建数据源

application.properties

properties 复制代码
#1、先配置数据源信息
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.url=jdbc:mysql://localhost:3306/springboot
spring.datasource.username=root
spring.datasource.password=zkpk

④创建实体类TUser

java 复制代码
package com.louis.bean;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @author XRY
 * @date 2023年07月13日17:02
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TUser {
    private Long id;
    private String loginName;
    private String nickName;
    private String password;
}

⑤创建Mapper接口

java 复制代码
public interface UserMapper {
    /**
     * 1、每个方法都在Mapper文件中有一个sql标签对应
     * 2、所有参数都应该用@Param进行签名,以后使用指定的名字在SQL中取值
     * @param id
     * @return
     */
    TUser getUserById(@Param("id") Long id);
}

⑥创建Mapper.xml文件

在写Mapper时比较麻烦,可以在IDEA中安装MyBatisX插件,它可以生成xml。

MyBatis使用简介

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.louis.mapper.UserMapper">

    <resultMap id="BaseResultMap" type="com.louis.bean.TUser">
            <id property="id" column="id" jdbcType="BIGINT"/>
            <result property="loginName" column="login_name" jdbcType="VARCHAR"/>
            <result property="nickName" column="nick_name" jdbcType="VARCHAR"/>
            <result property="password" column="password" jdbcType="VARCHAR"/>
    </resultMap>

    <sql id="Base_Column_List">
        id,login_name,nick_name,
        password
    </sql>
    <select id="getUserById" resultType="com.louis.bean.TUser">
        select * from t_user where id = #{id}
    </select>
</mapper>

⑦mapper扫描设置

java 复制代码
/**
 * 1、告诉MyBatis,扫描哪个包下的所有接口
 * 2、告诉MyBatis,每个接口的xml文件都在那里(使用配置)
 * mybatis.mapper-locations=classpath:/mapper/*.xml
 * 3、MyBatis自动关联绑定
 */

@MapperScan(basePackages = "com.louis.mapper.UserMapper")
@SpringBootApplication
public class Boot3SsmApplication {

    public static void main(String[] args) {
        SpringApplication.run(Boot3SsmApplication.class, args);
    }

}

application.properties

properties 复制代码
#2、配置整合mybatis
mybatis.mapper-locations=classpath:/mapper/*.xml
#开启驼峰命名规则
mybatis.configuration.map-underscore-to-camel-case=true

⑧测试连接是否成功

UserController

java 复制代码
@RestController
public class UserController {
    @Autowired
    UserMapper userMapper;

    /**
     * 返回User的json数据
     * @param id
     * @return
     */
    @GetMapping("/user/{id}")
    public TUser getUser(@PathVariable("id") Long id){
        TUser user = userMapper.getUserById(id);
        return user;
    }
}

SSM整合总结

①导入mybatis-spring-boot-starter

②配置数据源信息

③配置mybatis的mapper接口描述与xml映射文件扫描

④编写bean,mapper,生成xml,编写sql进行crud

⑤效果

a、所有sql写在xml中

b、所有mybatis配置写在application.properties下面

2、自动配置原理

jdbc场景的自动配置:配置了数据源等基本信息

mybatis-spring-boot-starter导入spring-boot-starter-jdbc,jdbc是操作数据库的场景

jdbc场景的几个自动配置

properties 复制代码
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
//数据源的自动配置,所有与数据源有关的配置都绑定在`DataSourceProperties`
//默认使用`HikariDataSource`
org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration
org.springframework.boot.autoconfigure.jdbc.JndiDataSourceAutoConfiguration
org.springframework.boot.autoconfigure.jdbc.XADataSourceAutoConfiguration
//基于XA二阶提交协议的分布式事务数据源
org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration
//数据源事务管理器

具有的底层能力:数据源、jdbcTemplate、事务

MyBatisAutConfiguration:配置了MyBatis的整合流程

mybatis-spring-boot-starter导入了mybatis-spring-boot-autoconfigure默认加载两个自动配置类

properties 复制代码
org.mybatis.spring.boot.autoconfigure.MybatisLanguageDriverAutoConfiguration
org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration
//MyBatis的所有配置邦定在`MybatisProperties`,必须在数据源配置号之后才配置
//给容器中放`SqlSessionFactory`组件,创建和数据库的一次会话
//给容器中放了`SqlSessionTemplate`组件。操作数据库
小贴士

如何分析场景导入后,开启了那些自动配置类?

方式一:

找classpath:/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中配置的所有值,就是要开启的自动配置类,但是每个类可能有条件注解,基于条件注解判断哪个类生效。
方式二:

在application.properties中添加配置debug=true,在控制台可以查看类是否导入。

生效:

未生效:

相关推荐
爱笑的眼睛116 分钟前
超越剪枝与量化:下一代AI模型压缩工具的技术演进与实践
java·人工智能·python·ai
阿里云云原生12 分钟前
Android App 崩溃排查指南:阿里云 RUM 如何让你快速从告警到定位根因?
android·java
历程里程碑14 分钟前
C++ 9 stack_queue:数据结构的核心奥秘
java·开发语言·数据结构·c++·windows·笔记·算法
醇氧29 分钟前
【Windows】从守护到终结:解析一个 Java 服务的优雅停止脚本
java·开发语言·windows
努力发光的程序员29 分钟前
互联网大厂Java求职面试实录
java·jvm·线程池·多线程·hashmap·juc·arraylist
小鹿学程序34 分钟前
FileZilla连接到虚拟机
java·服务器·开发语言
Haooog40 分钟前
Docker面试题(不定时更新)
java·docker·面试
soft20015251 小时前
从一次增删改操作开始:彻底理解 MySQL Buffer Pool 的地位与作用
数据库·mysql
晨曦5432101 小时前
MySQL与Python数学函数大比拼
python·mysql
feathered-feathered1 小时前
Redis基础知识+RDB+AOF(面试)
java·数据库·redis·分布式·后端·中间件·面试