-
什么是通用mapper
通用mapper 可以极大的方便开发人员进行ORM,提供极其方便的单表增删改查。
什么是通用mapper,一句话简单说,它就是个辅助mybatis极简单表开发的组件。它不是为了替代mybatis,而是让mybatis的开发更方便。
可以按照自己的需要选择通用方法,还能很方便的开发自己的通用方法。 -
怎么用通用mapper
首先导入通用mapper的依赖
<!-- 通用mapper -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>4.0.0</version>
</dependency>
接着我们就可以在我们的Mapper层继承通用Mapper来使用它
package cn.bluethink.eguan.core.mapper;
import cn.bluethink.eguan.core.entity.EgOtactionEntity;
import tk.mybatis.mapper.common.Mapper;
//通用mapper要一个实体类作为参数,作为数据库查询表
public interface EgOtactionMapper extends Mapper<EntprBasicInfo>{
}
我们看看Mapper泛型中EntprBasicInfo类有什么特点:
package com.redis.demo.model;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
import java.util.Date;
/**
* @program: redis_demo
* @description:
* @author: fbl
* @create: 2020-05-26 16:17
**/
@Data
// 相对应的表名
@Table(name = "entpr_basic_info")
public class EntprBasicInfo implements Serializable {
/**
* ID
*/
@Id
// 为了可以回写主键的值,使用注解:@GeneratedValue(generator ="JDBC")
@GeneratedValue(generator ="JDBC")
private Long id;
/**
* 企业的中文全称(全局唯一)
*/
// 相对应数据库中的字段名(以下都是)
@Column(name = "entpr_name")
private String entprName;
/**
* 企业简称
*/
@Column(name = "entpr_simple_name")
private String entprSimpleName;
/**
* 行政区划
* 1 市辖区 2 虎丘区 3 吴中区 4 相城区 5 姑苏区 6 吴江区 7 苏州工业园区 8 常熟市
* 9 张家港市 10 昆山市 11 太仓市 12 苏州市
*/
private Integer region;
/**
* 详细地址
*/
@Column(name = "detail_addr")
private String detailAddr;
//使用@Transient注解可以忽略字段,添加该注解的字段不会作为表字段使用.
@Transient
private String userName;
}
下面列举通用Mapper一些基本方法:
查询多个对象,返回List:
select()
按照主键查询,返回单个对象:
selectByPrimaryKey()
根据条件查询,返回List:
Example example = new Example(User.class);
Criteria criteria = example.createCriteria();
criteria.andBetween("age", 15, 30);
criteria.andLike("userName", "%zhang%");
//添加or的条件
Criteria criteria2 = example.createCriteria();
criteria2.andEqualTo("password", "123456");
example.or(criteria2);
//按年龄倒序排序,如果年龄相同,按id正序排序
example.setOrderByClause("age desc,id asc");
List<User> list = newMapper.selectByExample(example);
插入,返回int:
// 第一种
insert();
// 第二种(推荐):可选择插入字段
insertSelective();
条件删除,返回int:
// 第一种条件删除:如果条件为null或未初始化的实体类对象,删除全部数据
User user = new User();
user.setUserName("admin1");
newMapper.delete(user);
// 第二种条件删除:
Example example = new Example(User.class);
Criteria criteria = example.createCriteria();
criteria.andLike("userName", "admin");
newUserMapper.deleteByExample(example);
根据主键删除:
deleteByPrimaryKey();
根据主键进行更新(不推荐):
// 必须设置主键
// 没有的更新为null
updateByPrimaryKey();
根据主键进行更新(可选择的)
// 必须设置主键
// 没有的不更新
updateByPrimaryKeySelective();
根据条件更新(可选择的)返回int类型,没设置的属性就不做修改
// 将年龄>22的用户的密码修改成123
Example example = new Example(User.class);
Criteria criteria = example.createCriteria();
criteria.andGreaterThan("age", 22);
User user = new User();
user.setPassword("123");
newMapper.updateByExampleSelective(user, example);
根据条件更新(不可选择)返回int类型,没有设置属性的都更新为null.
// 将年龄>22的用户的密码修改成321
Example example = new Example(User.class);
Criteria criteria = example.createCriteria();
criteria.andGreaterThan("age", 22);
User user = new User();
user.setPassword("321");
newMapper.updateByExample(user, example);