前言
mybatis-spring-boot-starter出来有一段时间了,一直没机会用.最近正好有时间, 想尝试看看有没有什么亮点,并记录一下期间遇到的问题.
使用
1. 添加dependency
<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>
<version>8.0.23</version>
</dependency>
我这里使用的是2.1.3 你可以使用其他版本.
2. 添加数据库配置
spring:
dataSource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/blog?characterEncoding=utf-8&serverTimezone=UTC&allowPublicKeyRetrieval=true&useSSL=false
username: root
password: 123456
因为我是用mysql 8.0.13,所以driver-class-name 设置为 com.mysql.cj.jdbc.Driver. 如果使用5.x, 不需要加cj. 另外,记得加allowPublicKeyRetrieval=true,在我这不加报错Public Key Retrieval is not allowed
2. 添加实体类
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@AllArgsConstructor
public class User {
private int id;
private String name;
private String nickName;
private String password;
private String salt;
private String email;
private String mobile;
private boolean valid;
}
3. 添加对应Mapper
import com.abc.blog.domain.auth.User;
import org.apache.ibatis.annotations.*;
import java.util.List;
@Mapper
public interface UserMapper {
@Select("select * from user")
@Results({
@Result(column = "nick_name", property = "nickName", javaType = String.class)
})
List<User> getAll();
@Insert("insert into user(id,name,nick_name,password,salt,valid,email,mobile) " +
"values(#{id},#{name},#{nickName},#{password},#{salt},#{valid},#{email},#{mobile})")
int add(User user);
}
这里我们把传统的mapper xml文件中的sql跟mapper类进行了整合. mapper类包含了两个方法getAll和add.
getAll方法用@Select()修饰,它接受一个select语句. 如果列名和字段名不一样,可以使用@Results进行说明. 例子中有个字段叫nick_name,对应的属性叫nickName,所以用下面的语句进行说明
@Result(column = "nick_name", property = "nickName", javaType = String.class)
@Results 相当于xml文件中的resultmap标签
add方法用Insert()修饰,它接受一个insert语句. values子句中我们直接用#{属性名}作为字段值.
其他标签还有Delete和Update,这里不再单独说明.
注意: 记得给mapper类添加 @Mapper标签. 如果你觉得为每个类添加 @Mapper很麻烦,可以在启动类上加@MapperScan标签. 如:@MapperScan("com.abc.blog.dao"). 如果都不加会报异常: No qualifying bean of type 'com.abc.blog.dao.UserMapper' available
测试
import com.neal.blog.dao.UserMapper;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.junit.Assert;
import org.junit.Test;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestUser {
@Autowired private UserMapper userMapper;
@Test
public void testInsert(){
User user=new User(10002,"tom","tom","123456","1a2b3c","tom@live.com","158123232323",true);
Assert.assertTrue(userMapper.add(user)==1);
}
}