- 首先创建一个用于测试的数据库,创建一张user表,建表语句如下:
CREATE TABLE `user` (
`id` bigint(20) NOT NULL,
`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
`age` int(11) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
- 创建一个spring boot项目,项目结构如下:
- 导入maven依赖,这里主要是mybatis和mysql连接的相关依赖:
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
- 编写数据源配置文件,这里使用默认的HikariDataSource数据源:
spring:
datasource:
url: jdbc:mysql://localhost:3306/bg-learnsp?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.zaxxer.hikari.HikariDataSource
hikari:
auto-commit: true # 自动提交从池中返回的连接
minimum-idle: 5 #最小空闲连接,默认值10,小于0或大于maximum-pool-size,都会重置为maximum-pool-size
maximum-pool-size: 10 # 最大连接数,小于等于0会被重置为默认值10;大于零小于1会被重置为minimum-idle的值
idle-timeout: 50000 # 空闲连接超时时间,默认值600000(10分钟),大于等于max-lifetime且max-lifetime>0,会被重置为0;不等于0且小于10秒,会被重置为10秒
max-lifetime: 60000 # 连接最大存活时间,不等于0且小于30秒,会被重置为默认值30分钟.设置应该比mysql设置的超时时间短
connection-timeout: 60000 # 连接超时时间:毫秒,小于250毫秒,否则被重置为默认值30秒
connection-test-query: select 1 # 用于测试连接是否可用的查询语句
pool-name: mybatis01 # 连接池的用户定义名称,主要出现在日志记录和JMX管理控制台中以识别池和池配置
read-only: false # 从池中获取的连接是否默认处于只读模式
HikariCP是spring boot使用的默认数据源,上面配置文件中已经较为详细的叙述了各个常用参数的意义,如果想了解更多,可以访问HikariCP官网。
- 编写User实体类对象:
@Data
public class UserEntity {
private Long id;
private String name;
private Integer age;
}
- 创建UserMapper,进行数据库操作:
@Mapper
public interface UserMapper {
/**
* 通过id查询用户信息
*
* @param id
* @return
*/
@Results({
@Result(column = "id", property = "id"),
@Result(column = "name", property = "name"),
@Result(column = "age", property = "age")
})
@Select("SELECT * FROM USER WHERE id = #{id}")
UserEntity findUserById(@Param("id") Long id);
/**
* 插入用户信息
*
* @param user
* @return
*/
@Insert("INSERT INTO USER(ID,NAME, AGE) VALUES(#{id},#{name}, #{age})")
int insert(UserEntity user);
}
这里可以使用两种方式向系统注册Mapper,一种是在Mapper文件上使用@Mapper注解,另一种是使用@MapperScan注解,如下,在启动类上增加@MapperScan:
@SpringBootApplication
@MapperScan("com.learn.mapper")
public class SpLearnMybatis01Application {
public static void main(String[] args) {
SpringApplication.run(SpLearnMybatis01Application.class, args);
}
}
当Mapper文件比较多时,使用这种方式,更简便。
- 编写测试类:
@SpringBootTest
class SpLearnMybatis01ApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
void testUserMapper() {
UserEntity userEntity = new UserEntity();
userEntity.setId(1100L);
userEntity.setName("蒂尼西亚");
userEntity.setAge(40);
//保存用户
userMapper.insert(userEntity);
//查询用户
UserEntity user = userMapper.findUserById(1100L);
System.out.println(user);
}
}
测试输出结果:
UserEntity(id=1100, name=蒂尼西亚, age=40)
到这里,一个简单的spring boot整合mybatis,使用注解方式开发,配合HikariDataSource数据源的小案例就搭建好了。