spring-boot整合mybatis
- 引入相关依赖
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--druid连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<!--mybatis依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
- 创建实体类
1.可以通过手动去创建entity
2.在pycharm中连接数据库,然后反向生成pojo类
生成的是实体类如下:
package com.heu.mall.mall_order.entity;
import lombok.Data;
/**
* @author wsq
*/
@Data
public class Air {
private Integer id;
private Integer districId;
private java.util.Date monitorTime;
private Integer pm10;
private Integer pm25;
private String monitoringStation;
private java.util.Date lastModifyTime;
}
- 构建实体类的mapper接口
package com.heu.mall.mall_order.mapper;
import com.heu.mall.mall_order.entity.Air;
import java.util.List;
/**
* @author wsq
*/
public interface AirMapper {
/**
* 返回所有数据
* @return
*/
List<Air> findAll();
}
为了使mybatis能够发现扫描到mapper类,需在根应用上加上MapperScan注解
@SpringBootApplication
// basePackages:mapper接口的包路径
@MapperScan(basePackages = "com.heu.mall.mall_order.mapper")
public class MallOrderApplication {
public static void main(String[] args) {
SpringApplication.run(MallOrderApplication.class, args);
}
}
- 创建mapper接口的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对应命名空间-->
<mapper namespace="com.heu.mall.mall_order.mapper.AirMapper">
<!--resultMap这里使用的是别名的形式,需要设置别名的映射-->
<select id="findAll" resultType="Air">
select * from air
</select>
</mapper>
该步骤中,为了使的我们创建的xml生效,以及解决xml中别名映射、数据库字段转为实体类的驼峰格式属性的问题,我们需要在yml文件中做以下配置:
# mybatis 配置
mybatis:
# 扫描映射文件
mapper-locations: classpath:mapper/*.xml
# 别名扫描的包
type-aliases-package: com.heu.mall.mall_order.entity
# mysql中字段是"_"分割,而我们程序中是驼峰的形式
configuration:
map-underscore-to-camel-case: true
- 测试
首先,我们需要给项目配置好数据库连接,将如下配置加入application.yml文件中:
# 数据库配置
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.56.101:3306/mall?serverTimezone=UTC
type: com.alibaba.druid.pool.DruidDataSource
username: root
password: root
然后,针对mapper接口实现单元测试,在spring-boot中我们可以轻松完成单元测试,右键Mapper接口名 -> Go To -> Test,就可以在我们Test包路径下生成对应的测试文件,测试代码如下:
package com.heu.mall.mall_order.mapper;
import com.heu.mall.mall_order.MallOrderApplicationTests;
import com.heu.mall.mall_order.entity.Air;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
// MallOrderApplicationTests 为整个应用的根测试,默认是包级别保护的,所以我们需要将其访问权限修改为public
// public class MallOrderApplicationTests{}
class AirMapperTest extends MallOrderApplicationTests {
@Autowired
private AirMapper airMapper;
@Test
public void findAll(){
List<Air> all = airMapper.findAll();
for (Air air : all) {
System.out.println(air);
}
}
}