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,在控制台可以查看类是否导入。
生效:
未生效: