通用Mapper入门

1.为什么使用通用mapper

​ 通用 Mapper4 是一个可以实现任意 MyBatis 通用方法的框架,项目提供了常规的增删改查操作以及Example 相关的单表操作。通用 Mapper 是为了解决 MyBatis 使用中 90% 的基本操作,使用它可以很方便的进行开发,可以节省开发人员大量的时间。

2.快速入门

2.1 添加依赖

<dependency>
    <groupId>tk.mybatisgroupId>
    <artifactId>mapperartifactId>
    <version>最新版本version>
dependency>

2.2 创建实体类

@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;
}

2.3 创建相关数据表

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]');

2.4 创建Mapper接口

public interface EmployeeMapper extends Mapper<Employee> {
}

拓展:自定义通用Mapper

@RegisterMapper
public interface BaseMapper<T> extends Mapper<T>, IdListMapper<T,Long>, InsertListMapper<T> {
}

2.5 配置通用Mapper

为了让上述方法可以直接使用,还需要配置通用 Mapper,让项目在启动的时候,把上述方法都自动生成好,这样在运行时就可以使用上面所有的方法。

根据不同的开发环境,需要不同的配置方式,完整的内容可以 集成通用 Mapper,我们这里以最常见的 Spring 和 MyBatis 集成为例。

在集成 Spring 的环境中使用 MyBatis 接口方式时,需要配置 MapperScannerConfigurer,在这种情况下使用通用 Mapper,只需要修改配置如下:

<bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="扫描包名"/>
    
bean>

2.6 简单使用

@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);
        }
    }
}

3.相关方法

//根据实体类不为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 selectByExample(Object example)
说明:根据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

你可能感兴趣的:(javaee)