1.引入依赖
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.0.5</version>
</dependency>
2.实体类
- 默认表名=类名,字段名=属性名
- 表名可以使用@Table(name="tableName")进行指定
- 字段名可以使用@Column(name="fieldName")进行指定
- 使用@Transient注解表示该字段不进行映射
- 主键必须使用@Id注解进行指定,@GeneratedValue注解指定主键策略
@Table(name = "tb_user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// 用户名
//自动转换下换线到驼峰命名user_name -> userName
private String userName;
// 密码
private String password;
// 姓名
private String name;
// 年龄
private Integer age;
// 性别,1男性,2女性
private Integer sex;
// 出生日期
private Date birthday;
// 创建时间
private Date created;
// 更新时间
private Date updated;
// 备注
private String note;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Integer getSex() {
return sex;
}
public void setSex(Integer sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Date getCreated() {
return created;
}
public void setCreated(Date created) {
this.created = created;
}
public Date getUpdated() {
return updated;
}
public void setUpdated(Date updated) {
this.updated = updated;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
@Override
public String toString() {
return "User{" + "id=" + id + ", userName='" + userName + '\'' + ", password='" + password + '\'' + ", name='" + name + '\'' + ", age=" + age + ", sex=" + sex + ", birthday=" + birthday + ", created=" + created + ", updated=" + updated + ", note='" + note + '\'' + '}';
}
}
3.接口
接口继承tk.mybatis.mapper.common.Mapper,并指定泛型,不需要做任何配置就可以使用了。也可以自定义方法,配置映射文件。
public interface UserMapper extends Mapper<User> {
}
4.在启动类上配置MapperScan
注意:一定要使用tk.mybatis.spring.annotation.MapperScan
@SpringBootApplication
@MapperScan("com.zhy.dao")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
5.测试类
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperTest {
@Autowired
private UserMapper userMapper;
/**
* List<T> select(T record):根据实体中的属性进行查询
*/
@Test
public void select() {
User user = new User();
user.setName("郭德纲");
userMapper.select(user).forEach(user1 -> System.out.println(user1));
}
/**
* T selectByPrimaryKey(Object key):根据主键字段进行查询,方法参数必须包含完整的主键属性
*/
@Test
public void selectByPrimaryKey() {
User user = new User();
user.setId(1l);
System.out.println(userMapper.selectByPrimaryKey(user));
}
/**
* List<T> selectAll():查询全部结果
*/
@Test
public void selectAll() {
userMapper.selectAll().forEach(user -> System.out.println(user));
}
/**
* T selectOne(T record):根据实体中的属性进行查询,只能有一个返回结果,有多个结果时抛出异常
*/
@Test
public void selectOne() {
User user = new User();
user.setName("张三");
System.out.println(userMapper.selectOne(user));
}
/**
* int insert(T record):保存一个实体,null的属性也会保存,不会使用数据库默认值
*/
@Test
public void insert() {
User user = new User();
user.setId(6L);
user.setUserName("zhoudayu");
user.setName("周大宇");
userMapper.insert(user);
}
/**
* int insertSelective(T record):保存一个实体,null的属性不会保存,会使用数据库默认值
*/
@Test
public void insertSelective() {
User user = new User();
user.setId(7L);
user.setUserName("zhoueryu");
user.setName("周二宇");
userMapper.insertSelective(user);
}
/**
* int updateByPrimaryKey(T record):根据主键更新实体全部字段,null值会被更新
*/
@Test
public void updateByPrimaryKey() {
User user = new User();
user.setId(6L);
user.setUserName("zhouxiaoyu");
user.setName("周小宇");
user.setPassword("123456");
user.setAge(20);
userMapper.updateByPrimaryKey(user);
}
/**
* int updateByPrimaryKeySelective(T record):根据主键更新属性不为null的值
*/
@Test
public void updateByPrimaryKeySelective() {
User user = new User();
user.setId(7L);
user.setUserName("zhoudayu");
user.setName("周大宇");
user.setPassword("123456");
user.setAge(20);
userMapper.updateByPrimaryKeySelective(user);
}
/**
* int delete(T record):根据实体属性作为条件删除
*/
@Test
public void delete() {
User user = new User();
user.setName("周二宇");
userMapper.delete(user);
}
/**
* int deleteByPrimaryKey(Object key):根据主键字段进行删除,方法参数必须包含完整的主键属性
*/
@Test
public void deleteByPrimaryKey() {
User user = new User();
user.setId(6L);
userMapper.deleteByPrimaryKey(user);
}
/**
* List<T> selectByExample(Object example):根据Example条件进行查询,这个查询支持通过Example类指定查询列,通过selectProperties方法指定查询列
*/
@Test
public void selectByExample() {
Example example = new Example(User.class);
//根据id降序排列
example.setOrderByClause("id DESC");
//根据name字段模糊查询
example.createCriteria().andLike("name", "%张%");
userMapper.selectByExample(example).forEach(user -> System.out.println(user));
}
/**
* int selectCountByExample(Object example):根据Example条件进行查询总数
*/
@Test
public void selectCountByExample() {
Example example = new Example(User.class);
example.createCriteria().andLike("name", "%张%");
System.out.println(userMapper.selectCountByExample(example));
}
/**
* int updateByExample(@Param("record") T record, @Param("example") Object example):
* 根据Example条件更新实体record包含的全部属性,null值会被更新
*/
@Test
public void updateByExample() {
User user = new User();
user.setName("李四");
Example example = new Example(User.class);
example.createCriteria().andEqualTo("userName", "lisi");
userMapper.updateByExample(user, example);
}
/**
* int updateByExampleSelective(@Param("record") T record, @Param("example") Object example):
* 根据Example条件更新实体record包含的不是null的属性值
*/
@Test
public void updateByExampleSelective() {
User user = new User();
user.setName("周大宇");
Example example = new Example(User.class);
example.createCriteria().andEqualTo("id", "4");
userMapper.updateByExampleSelective(user, example);
}
/**
* int deleteByExample(Object example):根据Example条件删除数据
*/
@Test
public void deleteByExample() {
Example example = new Example(User.class);
example.createCriteria().andEqualTo("id", "1");
userMapper.deleteByExample(example);
}
}
Example和Criteria方法
方法.png
参考文档