A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 不太想网名 初级黑马   /  2019-9-10 14:54  /  707 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

3.1 通用mapper简介
​        通用 Mapper 是一个可以实现任意 MyBatis 通用方法的框架,项目提供了常规的增删改查操作以及Example相关的单表操作。为什么要用通用mapper?我们这里列举一下原生Mybatis的痛点:
1、mapper.xml文件里有大量的sql,当数据库表字段变动,配置文件就要修改
2、需要自己实现sql分页,select * from table where . . . limit 1,3
自己手写分页,除了传参page、pageSize,还需要返回条目总数count。
3、数据库可移植性差:如果项目更换数据库,比如oracle-->mysql,mapper.xml中的sql要重新写,因为Oracle的PLSQL 和mysql 支持的函数是不同的。
4、生成的代码量过大。
5、批量操作,批量插入,批量更新,需要自写。
而这些,通过通用mapper就可以很轻松的解决了。
3.2 通用mapper快速入门
在线官方文档:https://gitee.com/free/Mapper/wikis/Home
3.2.1 通用mapper与Spring集成
官方的文档中介绍了通用mapper的三种使用方式 ,纯java使用方式、与Spring集成方式、与SpringBoot集成方式。我们这里给大家介绍的是与Spring集成方式。
(1)引入依赖
正常情况下,Spring 和 MyBatis 的集成环境中,应该已经存在下面的依赖:
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>版本号</version>
</dependency>
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis-spring</artifactId>
  <version>版本号</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>版本号</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-tx</artifactId>
  <version>版本号</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-jdbc</artifactId>
  <version>版本号</version>
</dependency>
集成通用 Mapper 在上面的基础上添加下面的依赖:

<dependency>
    <groupId>tk.mybatis</groupId>
    <artifactId>mapper</artifactId>
    <version>最新版本</version>
</dependency>
(2)与spring集成
和通用 Mapper 以前版本一样,可以直接使用 tk.mybatis 提供的 tk.mybatis.spring.mapper.MapperScannerConfigurer 进行配置,这个配置和 MyBatis 官方提供的 org.mybatis.spring.mapper.MapperScannerConfigurer 区别只是第一层的包名,tk 和 org。所以使用这种方式时,如果你项目已经使用 org. 进行了配置,只需要改成 tk. 即可。

<bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="扫描包名"/>
</bean>
我们项目中采用的是这种xml的配置方式,通用mapper还提供了注解方式的配置,详见文档。
3.2.2 实体类映射
实体类映射类似下列形式
@Table(name="tb_brand")
public class Brand implements Serializable{

    @Id
    private Integer id;
  
    private String name;

    //getter and setter ....
}
@Table是指定实体类对应的数据库表  @Id指的是主键映射。经过上面简单的配置后,相当于就有了 MyBatis 中的关系映射了
3.2.3 创建Mapper接口
public interface BrandMapper extends Mapper<Brand> {
  
}
这里继承了 tk.mybatis.mapper.common.Mapper 接口,在接口上指定了泛型类型 Brand。当你继承了 Mapper 接口后,此时就已经有了针对 Brand 的大量方法,方法如下:
file://D:\Documents\学习的全视屏\项目-青橙\青橙项目\1.管理后台开发\day01\讲义\img\1-5.png?lastModify=1568098395
这些方法中和 MBG 生成的大部分方法都一致,还有一部分 MBG 之外的常用方法。
基础接口select

List<T> select(T record)
根据T对象中的属性名称查询,类似于select * from table where t.name=#{name} and t.password = #{password}
T selectOne(T record)
根据实体中的属性进行查询,只能有一个返回值,有多个结果是抛出异常,查询条件使用等号
T selectByPrimaryKey(Object key)
根据主键查询   说明:根据主键字段进行查询,方法参数必须包含完整的主键属性,查询条件使用等号
int selectCount(T record);
说明:根据实体中的属性查询总数,查询条件使用等号
基础接口insert

int insert(T record);
说明:保存一个实体,null的属性也会保存,不会使用数据库默认值
int insertSelective(T record);
说明:保存一个实体,null的属性不会保存,会使用数据库默认值
基础接口Update

int updateByPrimaryKey(T record);
说明:根据主键更新实体全部字段,null值会被更新
int updateByPrimaryKeySelective(T record);
说明:根据主键更新属性不为null的值
基础接口delete

int delete(T record);
说明:根据实体属性作为条件进行删除,查询条件使用等号
int deleteByPrimaryKey(Object key);
说明:根据主键字段进行删除,方法参数必须包含完整的主键属性

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马