通用 Mapper4 是一个可以实现任意 MyBatis 通用方法的框架,项目提供了常规的增删改查操作以及Example
相关的单表操作。通用 Mapper 是为了解决 MyBatis 使用中 90% 的基本操作,使用它可以很方便的进行开发,可以节省开发人员大量的时间。
<dependency>
<groupId>tk.mybatisgroupId>
<artifactId>mapperartifactId>
<version>最新版本version>
dependency>
@Data
@Table(name = "employee")
public class Employee implements Serializable {
@Id
@KeySql(useGeneratedKeys = true)
private Integer id;
private String name;
private String gender;
private String email;
}
DROP TABLE IF EXISTS `employee`;
CREATE TABLE `employee` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名',
`gender` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '性别',
`email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
-- ----------------------------
-- Records of employee
-- ----------------------------
INSERT INTO `employee` VALUES (1, '许威威', '男', '[email protected]');
INSERT INTO `employee` VALUES (2, '孙夏萍', '女', 'sunxiaping@qq,com');
INSERT INTO `employee` VALUES (3, '杜国庆', '男', '[email protected]');
public interface EmployeeMapper extends Mapper<Employee> {
}
拓展:自定义通用Mapper
@RegisterMapper
public interface BaseMapper<T> extends Mapper<T>, IdListMapper<T,Long>, InsertListMapper<T> {
}
为了让上述方法可以直接使用,还需要配置通用 Mapper,让项目在启动的时候,把上述方法都自动生成好,这样在运行时就可以使用上面所有的方法。
根据不同的开发环境,需要不同的配置方式,完整的内容可以 集成通用 Mapper,我们这里以最常见的 Spring 和 MyBatis 集成为例。
在集成 Spring 的环境中使用 MyBatis 接口方式时,需要配置 MapperScannerConfigurer,在这种情况下使用通用 Mapper,只需要修改配置如下:
<bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="扫描包名"/>
bean>
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath*:applicationContext.xml")
public class MapperTest {
@Autowired
private DataSource dataSource;
@Autowired
private EmployeeMapper emloyeeMapper;
@Test
public void testDemo(){
List<Employee> employees = emloyeeMapper.selectAll();
for (Employee employee : employees) {
System.out.println(employee);
}
}
}
//根据实体类不为null的字段进行查询,条件全部使用=号and条件
List<T> select(T record);
//根据实体类不为null的字段查询总数,条件全部使用=号and条件
int selectCount(T record);
//根据主键进行查询,必须保证结果唯一
//单个字段做主键时,可以直接写主键的值
//联合主键时,key可以是实体类,也可以是Map
T selectByPrimaryKey(Object key);
//插入一条数据
//支持Oracle序列,UUID,类似Mysql的INDENTITY自动增长(自动回写)
//优先使用传入的参数值,参数值空时,才会使用序列、UUID,自动增长
int insert(T record);
//插入一条数据,只插入不为null的字段,不会影响有默认值的字段
//支持Oracle序列,UUID,类似Mysql的INDENTITY自动增长(自动回写)
//优先使用传入的参数值,参数值空时,才会使用序列、UUID,自动增长
int insertSelective(T record);
//根据实体类中字段不为null的条件进行删除,条件全部使用=号and条件
int delete(T key);
//通过主键进行删除,这里最多只会删除一条数据
//单个字段做主键时,可以直接写主键的值
//联合主键时,key可以是实体类,也可以是Map
int deleteByPrimaryKey(Object key);
//根据主键进行更新,这里最多只会更新一条数据
//参数为实体类
int updateByPrimaryKey(T record);
//根据主键进行更新
//只会更新不是null的数据
int updateByPrimaryKeySelective(T record);
Example方法
方法:List
说明:根据Example条件进行查询
重点:这个查询支持通过Example类指定查询列,通过selectProperties方法指定查询列
方法:int selectCountByExample(Object example)
说明:根据Example条件进行查询总数
方法:int updateByExample(T record,Object example)
说明:根据Example条件更新实体record包含的全部属性,null值会被更新
方法:int updateByExampleSelective(T record, Object example)
说明:根据Example条件更新实体record包含的不是null的属性值
方法:int deleteByExample(Object example)
说明:根据Example条件删除数据
Demo
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath*:applicationContext.xml")
public class MapperTest {
@Autowired
private DataSource dataSource;
@Autowired
private EmployeeMapper emloyeeMapper;
@Test
public void testDemo(){
List<Employee> employees = emloyeeMapper.selectAll();
for (Employee employee : employees) {
System.out.println(employee);
}
}
@Test
public void testSelect(){
/*Employee employee=new Employee();
employee.setId(2);
List select = emloyeeMapper.select(employee);*/
Employee employee=new Employee();
employee.setGender("男");
int count = emloyeeMapper.selectCount(employee);
Employee select = emloyeeMapper.selectByPrimaryKey(2);
System.out.println(count);
System.out.println(select);
}
@Test
public void testInsert(){
Employee employee=new Employee();
employee.setGender("男");
employee.setName("小王");
employee.setEmail("[email protected]");
int count = emloyeeMapper.insert(employee);
System.out.println(count);
}
@Test
public void testDelete(){
/*Employee employee=new Employee();
employee.setGender("男");
int count = emloyeeMapper.delete(employee);*/
int count = emloyeeMapper.deleteByPrimaryKey(2);
System.out.println(count);
}
@Test
public void testUpdate(){
Employee employee=new Employee();
employee.setId(6);
employee.setEmail("[email protected]");
employee.setGender("女");
int count = emloyeeMapper.updateByPrimaryKeySelective(employee);
System.out.println(count);
}
感兴趣的同学可以访问我的博客 浏览更多的内容哦 https://tonymua.github.io