在上一小节,我们学习了快速搭建一个Spring boot项目,在这一部分,我们来学习整合mybatis和阿里巴巴druid
1. 新建springboot项目,spring-boot-mybatis
pom.xml文件中增加mybatis相关配置:
<!-- mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- spring jdbc -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
2. 新建数据库tests,并且新建表user_info
CREATE TABLE `user_info` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
`username` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '用户名',
`password` varchar(256) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '密码',
`email` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '邮箱',
`created` datetime DEFAULT NULL COMMENT '创建时间',
`updated` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
3. 在application.properties配置文件中增加数据库相关配置
spring.datasource.driverClassName = com.mysql.cj.jdbc.Driver
spring.datasource.url = jdbc:mysql://localhost:3306/tests?useUnicode=true&characterEncoding=utf-8
spring.datasource.username = test
spring.datasource.password = 12345678
mybatis.mapper-locations=classpath:/mapper/**/*.xml
Spring boot会自动扫描spring.datasource开头的相关配置;另外,我的mapper.xml文件放在/src/main/resources/mapper下,所以增加mybatis.mapper-locations的相关配置。
4. 编写数据库对应的实体类 UserInfo.java
public class UserInfo {
private Long id;
private String username;
private String password;
private String email;
private Date created;
private Date updated;
// 省略setter getter方法
}
5. 编写Mapper接口 UserInfoMapper.java
public interface UserInfoMapper {
int insert(UserInfo record);
UserInfo selectByPrimaryKey(Long id);
}
6. 编写UserInfoMapper.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.demo.mapper.UserInfoMapper" >
<resultMap id="BaseResultMap" type="com.demo.model.UserInfo" >
<id column="id" property="id" jdbcType="BIGINT" />
<result column="username" property="username" jdbcType="VARCHAR" />
<result column="password" property="password" jdbcType="VARCHAR" />
<result column="email" property="email" jdbcType="VARCHAR" />
<result column="created" property="created" jdbcType="TIMESTAMP" />
<result column="updated" property="updated" jdbcType="TIMESTAMP" />
</resultMap>
<sql id="Base_Column_List" >
id, username, password, email, created, updated
</sql>
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
select
<include refid="Base_Column_List" />
from user_info
where id = #{id,jdbcType=BIGINT}
</select>
<insert id="insert" parameterType="com.demo.model.UserInfo" useGeneratedKeys="true" keyProperty="id" >
insert into user_info (username, password, email,
created, updated)
values (#{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, #{email,jdbcType=VARCHAR},
#{created,jdbcType=TIMESTAMP}, #{updated,jdbcType=TIMESTAMP})
</insert>
</mapper>
7. 编写接口类:UserInfoService.java
public interface UserInfoService {
public void insert(UserInfo usrInfo);
public UserInfo selectById(Long id);
}
8. 接口实现类UserInfoServiceImpl.java,这里注意要加上@Service注解,让这个类能让Spring管理。
@Service
public class UserInfoServiceImpl implements UserInfoService {
@Autowired
private UserInfoMapper userInfoMapper;
@Override
public void insert(UserInfo usrInfo) {
userInfoMapper.insertSelective(usrInfo);
}
@Override
public UserInfo selectById(Long id) {
return userInfoMapper.selectByPrimaryKey(id);
}
}
9. 在主程序启动类上加注解@MapperScan("com.demo.mapper"),表明该包下的类是Mapper接口
@SpringBootApplication
@MapperScan("com.demo.mapper")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
写到这里,Spring boot整合mybatis就已经完成了,目录结构如下
这个时候,让我们编写测试用例测试一下,测试类UserInfoServiceImplTest.java
public class UserInfoServiceImplTest extends SimpleTest{
@Autowired
private UserInfoService userInfoService;
@Test
public void insert() {
UserInfo usrInfo = new UserInfo();
usrInfo.setUsername(UUID.randomUUID().toString());
usrInfo.setPassword("12345678");
usrInfo.setEmail("test@gmail.com");
usrInfo.setCreated(new Date());
usrInfo.setUpdated(new Date());
userInfoService.insert(usrInfo);
}
@Test
public void selectById() {
Long id = 1L;
userInfoService.selectById(id);
}
}
SimpleTest.java
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class SimpleTest extends AbstractJUnit4SpringContextTests{
}
分别运行insert()和selectById(),即可看到正确的结果,update和delete操作可以自行尝试操作。
github源码:https://github.com/johnwongz/spring-boot-demo