04_通用mapper
张创琦 2022.03.11
避免重复书写CRUD映射的框架有两个
通用mybatis(tk mybatis)
mybatis plus,通能更加强大,后面实战项目中讲解
1 tk mybatis
- pom.xml 配置文件
<!-- 通用mapper --><dependency><groupId>tk.mybatis</groupId><artifactId>mapper-spring-boot-starter</artifactId><version>2.0.2</version></dependency>
- 实体类配置
@Table(name = "tb_user") // 表名相关注解@Column(name="fieldName") // 属性名和字段名的相关注解
package com.lxs.domain;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.Table;import java.io.Serializable;import java.util.Date;@Table(name = "tb_user") // 如果不声明则默认一样的表名// 支持驼峰转下划线的命名public class User implements Serializable {// private static final long serialVersionUID = 1L;// 主键的映射一定要进行@Id@GeneratedValue(strategy = GenerationType.IDENTITY) // 逐渐策略是自增private Long id;// 用户名//自动转换下换线到驼峰命名 user_name -> userNameprivate 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;@Overridepublic String toString() {return "User{" +"id=" + id +", userName='" + userName + '\'' +", password='" + password + '\'' +", name='" + name + '\'' +", age=" + age +", sex=" + sex +", birthday=" + birthday +", created=" + created +", updated=" + updated +", note='" + note + '\'' +'}';}// 省略 getter 和 setter 方法}
- UserMapper
一旦继承了Mapper,继承的Mapper就拥有了Mapper所有的通用方法。
具体方法见 pdf 文档
package com.lxs.dao;import com.lxs.domain.User;import tk.mybatis.mapper.common.Mapper;import java.util.List;// import org.apache.ibatis.annotations.Mapper;// 注意:在mapper导包时,导入的是tk.mybatis的public interface UserMapper extends Mapper<User> {public List<User> findByUser(User user);}
注意以下的写法:
package com.lxs.dao;import com.lxs.domain.User;//import tk.mybatis.mapper.common.Mapper;import java.util.List;import org.apache.ibatis.annotations.Mapper;@Mapperpublic interface UserMapper extends tk.mybatis.mapper.common.Mapper<User> {public List<User> findByUser(User user);}
- 映射复杂文件:
resources/mappers/UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.lxs.dao.UserMapper"><select id="findByUser" resultType="user">SELECT * FROM tb_user<where><if test="name != null"> name like '%${name}%' </if><if test="note != null"> and note like '%${note}%' </if></where></select></mapper>
- 注意Application的导包问题
一个是 mybatis 的,一个是 tk mybatis 的
// import org.mybatis.spring.annotation.MapperScan; // myBatis的import org.springframework.boot.SpringApplication; // tk myBatis的import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.context.properties.EnableConfigurationProperties;import tk.mybatis.spring.annotation.MapperScan;@SpringBootApplication@EnableConfigurationProperties@MapperScan("com.lxs.dao")public class Application {
- 测试
package com.lxs.dao;import com.lxs.domain.User;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner;import tk.mybatis.mapper.entity.Example;import java.util.Date;import java.util.List;import static org.junit.Assert.*;@RunWith(SpringRunner.class)@SpringBootTestpublic class UserMapperTest {@Autowiredprivate UserMapper userMapper;@Autowiredprivate UserDao userDao;/* chenggong */@Testpublic void testFindByUser() {User condition = new User();condition.setName("a");List<User> list = userMapper.findByUser(condition);for (User user : list) {System.out.println(user);}}/* chenggong@Testpublic void testFindAll() {userMapper.selectAll().forEach(user -> {System.out.println(user);});}*//* 查询不到userName@Testpublic void testFindAll1() {List<User> list = userDao.findAll();for (User user : list) {System.out.println(user);}}*//* 未测试@Testpublic void testFindById() {User user = userDao.selectByPrimaryKey(4);System.out.println(user);}*//* 测试成功 */@Testpublic void testFindByExample() {Example example = new Example(User.class);example.createCriteria().andLike("name", "%a%");userMapper.selectByExample(example).forEach(user -> {System.out.println(user);});}/* 未测试@Testpublic void testInsert() {User user = new User();user.setAge(18);user.setBirthday(new Date());user.setCreated(new Date());user.setName("周星驰");userDao.insert(user);}*/}
