SpringBoot整合通用mapper

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

参考文档

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容