Mybatis 使用通用 mapper 正道的光!阿里爆款Jenkins+K8s笔记终于全网开源了 不要死磕Java并发了,阿里P7架构师带你深入剖析synchronized的实现原理 EtherNet/IP协议基础知识(Part 1) CGB2005-京淘13 思科 OSPF协议简单配置与分析 在一家公司呆了 10 年的程序员,最后都怎么了? 致力物联网芯片研发,奕斯伟计算获逾20亿元融资 Unity性能优化技巧 纪念首次撸出来的编程题--2020深信服软件测试岗 qml 去除标题栏后 拖动窗口和改变窗口大小 如何舒服地在图书馆用ipad入门深度学习【windows jupyter远程】 力扣Java版个人代码分享-树篇( 107. 二叉树的层次遍历 II) 第十届蓝桥杯省赛java类B组 试题 E:迷宫 (动态规划之回溯法) Unity+罗技G29方向盘+Realistic Car Controller 制作简单的模拟驾驶 2020阿里笔试题解(9.11) 起飞!这份技术点拉满的ELk+Lucene笔记,可能价值百万 好文精选整理--Redis+Nginx+设计模式+Spring全家桶+SQL+Dubbo技术 覆盖全网的微服务架构笔记,看完还不懂你来打我 技术干货:JVM架构体系与GC命令全梳理,建议收藏 跪拜,阿里P9加班到凌晨,硬肝三个月推出这份IT架构运维实践 太厉害了,华为架构师终于整理出SSM+Nginx+Redis+SQL+微服务pdf 膜拜!终于有人总结出Spring+SpringMVC+MyBatis源码层PDF了 开发1-5年的Java程序员,该学习哪些知识实现涨薪30K? 云原生景观:供应层(Provisioning)介绍 vulhub学习笔记-struts2 S2-057 Remote Code Execution Vulnerablity远程代码执行 微服务启动报 Error creating bean with name ‘eurekaAutoServiceRegistration‘ 异常 「信息安全-密码与隐藏技术」RSA加密算法的实现(CPP 实现) 单例模式线程是否安全? DDCTF2020 Writeup 迭代器模式在开源代码中的应用 微信群总是有人发广告?看我用Python写一个自动化机器人消灭他! 极光大数据持续亏损,称风控产品数据涉10亿移动端用户、包括财产消费等信息,对外投资极贷管家 揭秘英飞凌最新安全芯片解决方案:为物联网设备量身定制,小封装易开发 蒙草大数据西乌旗智慧畜牧业系统建设取得新进展 移动转售产业与大数据产业交流座谈会即将召开 19-2!62比24!湖人4大数据碾压对手,夺赛点进西决稳了 Web前端程序员每天的工作都是做什么的?有哪些是必须要做的? 四面楚歌祭利剑:华为再推鸿蒙OS,另辟蹊径进军物联网 InnoDB可重复读隔离级别是如何实现的 腾讯云物联网平台重磅升级:聚合内部能力,辅助更多产业 u校园刷课软件一键答题新视野视听说读写综合训练 css隐藏元素的几种方式及区别 display:none visibility:hidden opacity 元素隐藏 2020-09-10 使用echart完成折线图 wordpress使用memcached缓存数据提高访问速度 U校园刷课软件U校园新视野综合教程视听说答题 vue源码(十三) 数组下标改变值的响应式误区以及实现 非插件自动为WordPress关键词添加链接 SpringBoot详解(一) 从入门到入土
您的位置:首页 >前端 >

Mybatis 使用通用 mapper

1.1 简介

1.1.1 概述

  通用 Mapper 都可以极大的方便开发人员。可以随意的按照自己的需要选择通用方法,还可以很方便的开发自己的通用方法。极其方便的使用 MyBatis 单表的增删改查。支持单表操作,不支持通用的多表联合查询。

1.1.2 相关依赖

<dependency><groupId>tk.mybatis</groupId><artifactId>mapper</artifactId><version>4.1.5</version></dependency>

1.2 通用 Mapper 详解

1.2.1 修改配置

<!-- 扫描 mapper 所在的包,为 mapper 创建实现类【org 包改为 tk 包】--><bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.software.ssm.mapper"></property></bean>

1.2.2 常用注解

注解说明@Table作用:建立实体类和数据库表之间的对应关系。默认规则:实体类类名首字母小写作为表名。Employee 类 → employee 表。用法:在 @Table 注解的 name 属性中指定目标数据库表的表名@Column作用:建立实体类字段和数据库表字段之间的对应关系。默认规则: 实体类字段:驼峰式命名 数据库表字段:使用 “_” 区分各个单词用法:在 @Column 注解的 name 属性中指定目标字段的字段名@ld通用 Mapper 在执行 xxxByPrimaryKey(key) 方法时,有两种情况。情况1:没有使用 @ld 注解明确指定主键字段 情况2:使用 @ld 主键明确标记和数据库表中主键字段对应的实体类字段。@GeneratedValue注解作用:让通用Mapper在执行insert操作之后将数据库自动生成的主键值回写到实体类对象中。自增主键:@GeneratedValue(strategy = GenerationType.IDENTITY)@Transient用于标记不与数据库表字段对应的实体类字段,即忽略该字段。

1.3 通用 Mapper 接口

1.3.1 继承体系

在这里插入图片描述

1.3.2 继承核心接口

/** * Created with IntelliJ IDEA. * * @author Demo_Null * @date 2020/9/10 * @description 继承通用 mapper 核心接口 */@Repositorypublic interface StudentMapper extends Mapper<Student> {}

1.3.3 操作接口

接口方法说明SelectOneMapper<T>T selectOne(T record)根据实体中的属性进行查询,只能有一个返回值有多个结果是抛出异常,查询条件使用等号SelectMapper<T>List<T> select(T record)根据实体中的属性值进行查询,查询条件使用等号SelectAllMapper<T>List<T> selectAll()查询全部结果,select(null) 方法能达到同样的效果SelectCountMapper<T>int selectCount(T record)根据实体中的属性查询总数,查询条件使用等号SelectByPrimaryKeyMapper<T>T selectByPrimaryKey(Object key)根据主键字段进行查询,方法参数必须包含完整的主键属性,查询条件使用等号InsertMapper<T>int insert(T record)保存一个实体,null 的属性也会保存,不会使用数据库默认值InsertSelectiveMapper<T>int insertSelective(T record)保存一个实体,null 的属性不会保存,会使用数据库默认值UpdateByPrimaryKeyMapper<T>int updateByPrimaryKey(T record)根据主键更新实体全部字段,null 值会被更新UpdateByPrimaryKeySelectiveMapper<T>int updateByPrimaryKeySelective(T record)根据主键更新属性不为 null 的值DeleteMapper<T>int delete(T record)根据实体属性作为条件进行删除,查询条件使用等号DeleteByPrimaryKeyMapperint deleteByPrimaryKey(Object key)根据主键字段进行删除,方法参数必须包含完整的主键属性SelectByExampleMapper<T>List<T> selectByExample(Object example)据Example条件进行查询,这个查询支持通过Example类指定查询列,通过selectProperties方法指定查询列SelectCountByExampleMapper<T>int selectCountByExample(Object example)根据 Example 条件进行查询总数DeleteByExampleMapper<T>int deleteByExample(Object example)根据 Example 条件删除数据UpdateByExampleMapper<T>int updateByExample(@Param(“record”) T record)根据 Example 条件更新实体包含的全部属性,null 值会被更新UpdateByExampleSelectiveMapper<T>int updateByExampleSelective(@Param(“record”) T record)根据Example条件更新实体包含的不是 null 的属性值SelectByConditionMapper<T>List<T> selectByCondition(Object condition)根据 Condition 条件进行查询 Condition 方法和 Example 方法作用完全一样只是为了避免 Example 带来的歧义,提供的的 Condition 方法SelectCountByConditionMapper<T>int selectCountByCondition(Object condition)根据 Condition 条件进行查询总数UpdateByConditionMapper<T>int updateByCondition(@Param(“record”) T record)根据 Condition 条件更新实体包含的全部属性,null 值会被更新UpdateByConditionSelectiveMapper<T>int updateByConditionSelective(@Param(“record”) T record)根据 Condition 条件更新实体包含的不是 null 的属性值DeleteByConditionMapper<T>int deleteByCondition(Object condition)根据 Condition 条件删除数据SelectRowBoundsMapper<T>List<T> selectByRowBounds(T record, RowBounds rowBounds)根据实体属性和 RowBounds 进行分页查询SelectByExampleRowBoundsMapper<T>List<T> selectByExampleAndRowBounds(Object example, RowBounds rowBounds)根据 example 条件和 RowBounds 进行分页查询SelectByConditionRowBoundsMapper<T>List<T> selectByConditionAndRowBounds(Object condition, RowBounds rowBounds)根据 example 条件和 RowBounds 进行分页查询,该方法和 selectByExampleAndRowBounds 完全一样,只是名字改成了 ConditionInsertListMapper<T>int insertList(List<T> recordList)批量插入,支持批量插入的数据库可以使用,例如MySQL,H2等,另外该接口限制实体包含id属性并且必须为自增列InsertUseGeneratedKeysMapper<T>int insertUseGeneratedKeys(T record)插入数据,限制为实体包含id属性并且必须为自增列,实体配置的主键策略无效

1.3.4 Example 接口

☞ 创建接口

// Condition 和 Example 作用完全一样Example example = new Example(JavaBean.class);Example.Criteria criteria = example.createCriteria();

☞ 接口方法

方法说明example.setOrderByClause(“字段名 ASC”)添加升序排列条件,DESC 为降序example.setDistinct(false)去除重复,boolean 型,true 为选择不重复的记录criteria.andXxxIsNull添加字段 xxx 为 null 的条件criteria.andXxxIsNotNull添加字段 xxx 不为 null 的条件criteria.andXxxEqualTo(value)添加 xxx 字段等于 value 条件criteria.andXxxNotEqualTo(value)添加 xxx 字段不等于 value 条件criteria.andXxxGreaterThan(value)添加 xxx 字段大于 value 条件criteria.andXxxGreaterThanOrEqualTo(value)添加 xxx 字段大于等于 value 条件criteria.andXxxLessThan(value)添加 xxx 字段小于 value 条件criteria.andXxxLessThanOrEqualTo(value)添加 xxx 字段小于等于 value 条件criteria.andXxxIn(List<T>)添加 xxx 字段值在 List<T> 条件criteria.andXxxNotIn(List<T>)添加 xxx 字段值不在 List<T> 条件criteria.andXxxLike("%" + value + “%”)添加 xxx 字段值为 value 的模糊查询条件criteria.andXxxNotLike("%" + value + “%”)添加 xxx 字段值不为 value 的模糊查询条件criteria.andXxxBetween(value1,value2)添加 xxx 字段值在 value1 和 value2 之间条件criteria.andXxxNotBetween(value1,value2)添加 xxx 字段值不在 value1 和 value2 之间条件

1.4 示例

1.4.1 select

/** * Created with IntelliJ IDEA. * * @author Demo_Null * @date 2020/9/10 * @description 简单查询 */@SpringJUnitConfig(locations = "classpath:application.xml")public class Demo {@Autowiredprivate StudentMapper studentMapper;@Testpublic void TestSelect() {// 查询所有List<Student> students = studentMapper.selectAll();System.out.println(students);// 匹配实体类属性查询Student student = new Student();student.setId(1L);List<Student> select = studentMapper.select(student);System.out.println(select);}}

在这里插入图片描述

1.4.2 update

/** * Created with IntelliJ IDEA. * * @author Demo_Null * @date 2020/9/10 * @description 修改 */@SpringJUnitConfig(locations = "classpath:application.xml")public class Demo {@Autowiredprivate StudentMapper studentMapper;@Testpublic void TestUpdate() {// 查询参数Student student = new Student();student.setId(1L);// 修改前Student result_1 = studentMapper.selectOne(student);System.out.println(result_1);// 修改Student update = new Student();update.setId(1L);update.setName("王五");studentMapper.updateByPrimaryKeySelective(update);// 修改后Student result_2 = studentMapper.selectOne(student);System.out.println(result_2);}}

在这里插入图片描述

1.4.3 insert

/** * Created with IntelliJ IDEA. * * @author Demo_Null * @date 2020/9/10 * @description 新增 */@SpringJUnitConfig(locations = "classpath:application.xml")public class Demo {@Autowiredprivate StudentMapper studentMapper;@Testpublic void TestInsert() {// 新增数据Student student = new Student();student.setName("张良");student.setAge(800);// 新增操作studentMapper.insertSelective(student);// 打印,新增成功之后可以从实体类对象中获取 idSystem.out.println(student);}}

在这里插入图片描述

1.4.4 delete

/** * Created with IntelliJ IDEA. * * @author Demo_Null * @date 2020/9/10 * @description 删除 */@SpringJUnitConfig(locations = "classpath:application.xml")public class Demo {@Autowiredprivate StudentMapper studentMapper;@Testpublic void TestDel() {// 删除参数Student student = new Student();student.setId(1L);// 删除操作studentMapper.delete(student);// 查询Student result = studentMapper.selectOne(student);System.out.println(result);}}

在这里插入图片描述

1.4.5 Example

/** * Created with IntelliJ IDEA. * * @author Demo_Null * @date 2020/9/10 * @description Example 实例 */@SpringJUnitConfig(locations = "classpath:application.xml")public class Demo {@Autowiredprivate StudentMapper studentMapper;@Testpublic void Test() {Example example = new Example(Student.class);Example.Criteria criteria = example.createCriteria();criteria.andEqualTo("id", 2L).andLike("name", "%李%");List<Student> students = studentMapper.selectByExample(example);System.out.println(students);}}

在这里插入图片描述

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。