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

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

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

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

代码结构

8c9c887ce0a0819ab4ec2f5f9bef9803.png

库表

ec6fbfa68df393c8ce9d5e396e1100c6.png

配置文件

在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("男","%济%");

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/370496.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

初尝微信小程序2-基本框架

基本框架&#xff1a; .wxml &#xff1a;页面骨架 .wxss &#xff1a;页面样式 .js &#xff1a;页面逻辑 描述一些行为 .json &#xff1a;页面配置 创建一个小程序之后&#xff0c;app.js,app.json,app.wxss是必须的&#xff0c;而且名字也不能随意更改&#xff0c;…

JSP内置对象,动作,指令总结

总的来说关于JSP界面有九大内置对象,7大动作,三大指令,现在博主就将这些粘贴出来,此文是很久前整理的学习笔记,如有雷同请谅解! jsp九大内置对象:1>out 向客户端输出数据,字节流.如out.print(" dgaweyr"); 2>request 接收客户端的http请求.String getParameter…

洛谷 P1795 无穷的序列_NOI导刊2010提高(05)

P1795 无穷的序列_NOI导刊2010提高&#xff08;05&#xff09; 题目描述 有一个无穷序列如下&#xff1a; 110100100010000100000… 请你找出这个无穷序列中指定位置上的数字 输入输出格式 输入格式&#xff1a;第一行一个正整数N&#xff0c;表示询问次数&#xff1b; 接下来的…

java 取字符串中的数字_java截取字符串中的数字

随便给你一个含有数字的字符串&#xff0c;比如&#xff1a;String s"eert343dfg56756dtry66fggg89dfgf";那我们如何把其中的数字提取出来呢&#xff1f;大致有以下几种方法&#xff0c;正则表达式&#xff0c;集合类&#xff0c;还有就是String类提供的方法。1 Stri…

番石榴的对象类:Equals,HashCode和ToString

如果您有幸使用JDK 7 &#xff0c;那么新的可用Objects类 &#xff08; 至少对我来说 &#xff09;是实现“通用” Java对象方法&#xff08;例如equals&#xff08;Object&#xff09; [with Objects.equals&#xff08;Object&#xff0c;Object &#xff09; ]&#xff0c; …

此服务器的时钟与主域控制器的时钟不一致_中移动“超高精度时间同步服务器”开标,两家中标...

8月25日&#xff0c;中国移动发布《2020年至2022年同步网设备集中采购_中标候选人公示》公告。两家中标。同步网技术比较小众&#xff0c;但是同步网是5G承载网的重要一环&#xff0c;分享一下&#xff0c;供大家参考。中标情况 标包1-时钟同步设备中标候选人依次排序为&#x…

java 异常管理员_GitHub - kangZan/JCatch: Exception异常管理平台,支持Java、PHP、Python等多种语言...

什么是JCatch当程序发生异常(Exception)&#xff0c;处理方式一般是通过日志文件记录下来&#xff0c;这种方式很容易被忽略&#xff0c;而且查询起来比较麻烦。JCatch提供了一种方案&#xff0c;当程序发生异常时&#xff0c;通过JCatch平台接口提交到JCatch平台&#xff0c;由…

oled

gnd、vcc、clk、miso、rst、mosi、cs 转载于:https://www.cnblogs.com/scrazy/p/7892733.html

使用html css js实现计算器

使用html css js实现计算器&#xff0c;开启你的计算之旅吧 效果图&#xff1a; 代码如下&#xff0c;复制即可使用&#xff1a; <!DOCTYPE html><html lang"en"> <head> <meta charset"utf-8"> <style> /* 主体 */ .co…

面向对象的三个基本特征

面向对象的三个基本特征是&#xff1a;封装、继承、多态。封装 封装最好理解了。封装是面向对象的特征之一&#xff0c;是对象和类概念的主要特性。封装&#xff0c;也就是把客观事物封装成抽象的类&#xff0c;并且类可以把自己的数据和方法只让可信的类或者对象操作&#xff…

Spring构造函数注入和参数名称

在运行时&#xff0c;除非在启用了调试选项的情况下编译类&#xff0c;否则Java类不会保留构造函数或方法参数的名称。 这对于Spring构造函数注入有一些有趣的含义。 考虑以下简单的类 package dbg; public class Person {private final String first;private final String …

java学习文档_资深程序员带你深入了解JAVA知识点,实战篇,PDF文档

JAVA 集合JAVA 集合面对浩瀚的网络学习资源&#xff0c;您是否为很难找到适合自己的学习资源而感到苦恼过&#xff1f;那么&#xff0c;您来对地方了。在这里我们帮助大家整理了一份适于轻松学习 Java 文章的清单。JVM文字太多&#xff0c;不便之处敬请谅解JAVA 集合文字太多&a…

java程序员电影_Java程序员必看电影:Java 4-ever

(Scene: A father and his son playing "throw-and-catch")(场景: 一位父亲和儿子玩丢接球游戏)Narrator: They appear to be a perfect family旁白: 他们看起来像是一个完美的家庭(Scene: bedtime story)(场景: 床边故事)Father: Export all OLE objects with the c…

深入理解softmax函数

Softmax回归模型&#xff0c;该模型是logistic回归模型在多分类问题上的推广&#xff0c;在多分类问题中&#xff0c;类标签 可以取两个以上的值。Softmax模型可以用来给不同的对象分配概率。即使在之后&#xff0c;我们训练更加精细的模型时&#xff0c;最后一步也需要用soft…

《第二章:深入了解超文本》

从本章开始要去除无用的话&#xff0c;只在笔记中记载要点----- 使用<a>元素创建一个超文本链接&#xff0c;链接到另一个Web页面。 <a>元素的内容会成为Web页面中可单击的文本。 href属性告诉浏览器链接的目标文件。 了解属性 例&#xff1a;style的type属性指定…

strcpy函数_错误更正(拷贝赋值函数的正确使用姿势)

这是一篇对什么是C的The Rule of Three的错误更正和详细说明。阅读时间7分钟。难度⭐⭐⭐虽然上一篇文章的阅读量只有凄惨的两位数&#xff0c;但是怀着对小伙伴负责的目的&#xff0c;必须保证代码的正确性。这是大厨做技术自媒体的态度。前文最后一段代码是这样的&#xff1a…

将Java应用程序打包为一个(或胖)JAR

这篇文章的目标是一个有趣但非常强大的概念&#xff1a;将应用程序打包为单个可运行的JAR文件&#xff0c;也称为一个或胖 JAR文件。 我们习惯了大型WAR归档文件&#xff0c;其中包含所有打包在某些公用文件夹结构下的依赖项。 使用类似于JAR的打包&#xff0c;情况有所不同&a…

学习java的第三天,猜字符的小程序

关于猜字符的小程序 主要实现&#xff1a;随机输出5个字母&#xff0c;用户输入猜测的字母&#xff0c;进行对比得出结果 主要有3个方法&#xff1a;主方法main(); 产生随机字符的方法generate(); 比较用户输入的字符与随机产生的字符的方法check&#xff08;&#xff09;&…

《Linux命令行与shell脚本编程大全 第3版》创建实用的脚本---10

以下为阅读《Linux命令行与shell脚本编程大全 第3版》的读书笔记&#xff0c;为了方便记录&#xff0c;特地与书的内容保持同步&#xff0c;特意做成一节一次随笔&#xff0c;特记录如下&#xff1a;转载于:https://www.cnblogs.com/guochaoxxl/p/7894995.html

python安装包找不到setup_如何安装没有setup.py的Python模块?

在系统上开始使用该代码的最简单的方法是&#xff1a;>将文件放入机器上的目录中,>将该目录的路径添加到您的PYTHONPATH步骤2可以从Python REPL完成如下&#xff1a;import syssys.path.append("/home/username/google_search")您的文件系统的外观示例&#xf…