今天给大家介绍一位老朋友

当你第一次接触Java开发的时候,这个老朋友就和你形影不离,当你要进行ORM的时候,单表的增删改查,这位老朋友给了你极大的帮助,不知道你想到他了吗?对,这就是通用mapper,这也是对于这位老朋友最简单的介绍

如果你是新来做客的程序猿,我给你详细的介绍一下它;你要是老牌程序员,我们来重新认识一下

代码结构

库表

配置文件

在applicationContext会话工厂里配置通用mapper插件。

<!--配置SqlSessionFactory,通过Spring来管理会话工厂--><bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!--配置数据源:因为要使用SqlSession操作数据库--><property name="dataSource" ref="dataSource"></property><!--加载mybatis的全局配置文件--><!--<property name="configLocation" value="classpath:mybatis.xml"></property>--><!--Spring起别名--><property name="typeAliasesPackage" value="com.me.pojo"></property><!-- 通用mapper插件的配置 --><property name="plugins"><array><!--pagehelper分页配置。 --><bean class="com.github.pagehelper.PageInterceptor"><property name="properties"><value>helperDialect=mysqloffsetAsPageNum=true<!-- 防止出现小于第一页,大于最后一页的异常情况出现。 -->reasonable=true</value></property></bean><bean class="com.github.abel533.mapperhelper.MapperInterceptor"><property name="properties"><value><!-- 主键自增回写方法,默认值MYSQL -->IDENTITY=MYSQLmappers=com.github.abel533.mapper.Mapper</value></property></bean></array></property></bean>

UserInfoMapper.java

不用配置pojo类的接口,mapper文件也极大简化了。只需继承Mapper(applicationContext.xml里配置的)就可以。Mapper里封装了很多对单表操作的方法。

import com.github.abel533.mapper.Mapper;
import com.me.pojo.UserInfo;public interface UserInfoMapper extends Mapper<UserInfo> {}

UserInfoServiceImpl.java

@Service
public class UserInfoServiceImpl implements UserInfoService {@Autowiredprivate UserInfoMapper userInfoMapper;@Overridepublic List<UserInfo> select(UserInfo userInfo) {return userInfoMapper.select(userInfo);}
}

测试类

@Autowiredprivate UserInfoService userInfoService;@Testpublic void test(){UserInfo user=new UserInfo();user.setSex("男");List<UserInfo> userInfos=userInfoService.select(user);System.err.println(userInfos.toString());}


但是,这一些是Mapper的基础操作,在Mapper中,有一个很重要的概念,动态代理实现,这里也给大家展示一下

优点

开发者只需声明mapper接口(也就是dao接口),无需声明接口的实现类,而由mybatis框架创建接口的代理对象,就和实现类类似。

规范

  • 映射文件mapper.xml和接口名称一致
  • 映射文件的namespace是接口的全路径
  • 映射文件的sql statement的id是接口的方法名称
  • 映射文件的输入参数类型和接口方法的参数类型一致
  • 映射文件的输出结果类型和接口方法的返回类型一致

mybatis.xml加载映射文件

<mappers><!--<mapper resource="UsersMapper.xml"></mapper>--><!--批量加载映射文件--><package name="com.me.mapper"/></mappers>

接口:UsersMapper.class

import com.me.pojo.Users;public interface UsersMapper {public Users selectById(int id);
}

mapper文件:UsersMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.me.mapper.UsersMapper"><select id="selectById" parameterType="int" resultType="Users">select * from users where id=#{id}</select>
</mapper>

测试类:MapperTest

import com.me.mapper.UsersMapper;
import com.me.pojo.Users;
import com.me.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;public class MapperTest {@Testpublic void test(){SqlSession sqlSession=MybatisUtils.getSqlSessionFactory().openSession();UsersMapper usersMapper=sqlSession.getMapper(UsersMapper.class);Users user =usersMapper.selectById(1);sqlSession.close();}
}

根据map查询

参数是hashmap。

接口

public List<Users> selectByMap(Map<String,Object> map);

mapper

  • 注意接收的第二个参数,如果写成’%#{addr}%‘无法获取;如果写成’${value}%'也无法获取,因为不是简单类型。
  • “#{?}”中要和传递过来map的key一致。
<select id="selectByMap" parameterType="map" resultType="Users">select * from users where sex=#{sex} and address like '${addr}%'
</select>

测试类

Map<String,Object> map=new HashMap<String,Object>();
map.put("sex","男");
map.put("addr","北");
List<Users> usersList=usersMapper.selectByMap(map);

传递多参数

传递多参数有两种方式。

  • 方法一

接口

@Param()就相当于将参数封装到map中去

public List<Users> selectByParams(@Param("sex") String sex, @Param("addr") String addr);

mapper

传递多参数时无需配置参数类型

<select id="selectByParams" resultType="Users">select * from users where sex=#{sex} and address like '${addr}%'
</select>

测试类

List<Users> usersList=usersMapper.selectByParams("男","北");

  • 方法二

接口

public List<Users> selectByParams2( String sex, String addr);

mapper

第二个参数如果写成’%${1}%'无法获取。

<select id="selectByParams2" resultType="Users">select * from users where sex=#{0} and address like #{1}
</select>

测试类

List<Users> usersList=usersMapper.selectByParams2("男","%济%");

好啦,这位老朋友就已经介绍给你认识了,不知道他能不能成为你的好朋友

一个脑回路清奇的程序猿,总是有一些神奇的想法,分享技术经验给大家,一起学习进步

mybatis通用mapper_全网最全Mapper解析,附实操代码帮你更好理解相关推荐

  1. 如何搭建AIoT智能对话交互系统:技术解析和实操分享

    早些年,拥有一个足够智能的对话系统似乎是一件很虚幻的事情,可能只在科幻电影中存在.但到如今,人机智能对话因其日益增长的需求和巨大的商业价值而受到越来越多的关注. 百度大脑UNIT也因此应运而生,UNI ...

  2. 【MyBatis】基础全网最全,看这篇就够了

    一.原始JDBC开发存在的问题 package com.qf.java2107.test; ​ import org.junit.Test; ​ import java.math.BigDecimal ...

  3. Corona渲染器最新版本_Corona 8 for 3ds Max / Cinema 4D全网最全功能解析

    周五快乐!我是「瑞云·效果图渲染」小编.3D渲染行业通的小瑞,又来给大家同步国内外渲染行业的最新资讯啦! 4月13日,Chaos官方发布了Chaos Corona 8 for 3ds Max and ...

  4. 史上最全推广小程序实操方法

    通用篇 1.用小程序名称抢排位 小程序的排名跟名称.描述.上线时间.用户访问量和小程序的综合质量有关,且小程序的名称是唯一的.根据用户的搜索习惯和产品特性,尽可能多地注册小程序名称,才能让小程序的排名 ...

  5. 如何浅显得理解风控模型中的特征筛选|附实操细节(全)

    今天我们综合了星球同学的一些需求,给大家梳理了这样一篇风控建模中特征筛选,希望对所有的风控人员在模型开发上都有所启发. 本文,我们会跟大家介绍特征选择的内容,包括其中的重点问题跟注意的细节. 因为完整 ...

  6. 2020全网最全的软件测试进阶/自动化面试题(含答案),收藏慢慢看

    前言 关于Python自动化测试学习,总结了一个学习规划图,分享给大家(看不清点原图链接) 原图链接:https://shimo.im/docs/pwCpGXKWDKPKDJDK/ 2020全网最全自 ...

  7. mapper命名规范_Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件

    封面:洛小汐 作者:潘潘 若不是生活所迫,谁愿意背负一身才华. 前言 上节我们介绍了 < Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解 >,内容很详细( ...

  8. Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件

    封面:洛小汐 作者:潘潘 若不是生活所迫,谁愿意背负一身才华. 前言 上节我们介绍了 < Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解 >,内容很详细( ...

  9. mysql通用mapper_通用Mapper(Mybatis)

    1.Mapper的简单介绍 2.Mapper的作用 通用Mapper可以通过Mybatis的拦截器原理,动态的帮我们实现单表的增删改查功能,大大降低了我们的开发成本,减少了我们的工作量. 3.Mapp ...

最新文章

  1. 在机器人的眼里到底能看到什么,它们和人类的视觉系统有什么区别?
  2. 你还不知道??GitHub发布了APP版!!
  3. 3.7 为什么需要非线性激活函数-深度学习-Stanford吴恩达教授
  4. C#语法:多线程编程(Thread)
  5. 按钮是什么意思_汽车里的Rear按键是什么意思?
  6. [渝粤教育] 四川大学 传统文化与人生修养 参考 资料
  7. FreeRTOS信号量---二值信号量
  8. vs python opencv_VsCode+Anaconda+OpenCV开发环境搭建
  9. win7 以太网媒体断开怎么处理_工业以太网协议的历史及其优势
  10. 力改变物体形状举例_对旋转问题的思考-在离心力确定的情况下,物体的旋转情况如何通过宇宙中的相对运动情况和质量分布确定?...
  11. git 解决冲突(6)
  12. 解决react状态管理---React Query
  13. vue 报错 :属性undefined(页面成功渲染)
  14. jQuery Validate验证框架(转载)
  15. sps2013安装错误
  16. 方舟服务器后台一直显示正在重启,win10正在重新启动卡住如何解决_win10重启后一直显示正在重新启动的解决教程...
  17. 让ppsx幻灯片进入可编辑状态
  18. WORD插入摄氏华氏度及换算
  19. 链式线性表和顺序线性表
  20. 组合拳砸来:55位权威专家论剑股市!

热门文章

  1. layui列表筛选列_Shopify搜索产品并筛选产品列表功能介绍
  2. ubuntu vnc 远程连接桌面
  3. xslt 标签取集合第一条数据_1+x证书Web前端开发中级理论考试(试卷1)
  4. linux安装pip
  5. index加载显示servlet数据_[WEB篇]-JavaWeb基础与应用-02-Servlet开发
  6. Bash脚本教程之函数
  7. 渗透测试-验证码的爆破与绕过
  8. 用jQuery监听浏览器窗口的变化
  9. CSS pointer-events属性的使用
  10. WAP自助建站 我编程之路的启蒙