MyBatis映射器
Mybatis配置概述
MyBatis的核心配置文件配置了很多影响MyBatis行为的信息,这些信息通常只会配置在一个文件中,并且不会轻易改动。另外,与Spring框架整合后,MyBatis的核心配置文件信息将配置到Spring的配置文件中。因此,在实际开发中需要编写或修改MyBatis的核心配置文件的情况不多。
映射器
在SQL映射文件中元素用于映射SQL的select语句,其示例代码如下:
<!-- 根据uid查询一个用户信息 -->
<selectid="selectUserById"parameterType="Integer"resultType="com.po.MyUser">select * from user where uid = #{uid}
</select>
上述示例代码中,id的值是唯一标识符,它接收一个Integer类型的参数,返回一个MyUser类型的对象,结果集自动映射到MyUser属性。
Map接口
在实际开发中,查询SQL语句经常需要多个参数,比如多条件查询。多个参数传递时,元素的parameterType属性值的类型是什么呢?在MyBatis中允许Map接口通过键值对传递多个参数。
假设数据操作接口中有个实现查询陈姓男性用户信息功能的方法:
public List selectAllUser(Map<String, Object> param);
此时,传递给映射器的是一个Map对象,使用它在SQL中设置对应的参数,对应SQL文件代码如下:
<!-- 查询陈姓男性用户信息 --><select id="selectAllUser" resultType="com.po.MyUser" parameterType="map">select * from user where uname like concat('%',#{u_name},'%')and usex = #{u_sex}</select>
上述SQL文件中参数名u_name和u_sex是Map的key。
JavaBean
在src目录下,创建一个名为com.pojo的包,在包中创建一个POJO类SeletUserParam
其次,将Dao接口中的selectAllUser方法修改为:
public List selectAllUser(SeletUserParam param);
再次,将com.mybatis包中的SQL映射文件UserMapper.xml中的“查询陈姓男性用户信息”代码修改为:
<select id="selectAllUser" resultType="com.po.MyUser" parameterType="com.pojo.SeletUserParam">select * from user where uname like concat('%',#{u_name},'%')and usex = #{u_sex}</select>
最后,将com.controller包中UserController的“查询多个用户”代码片段修改。
insert
元素用于映射插入语句,MyBatis执行完一条插入语句后,将返回一个整数表示其影响的行数。它的属性与元素的属性大部分相同,在本节讲解它的几个特有属性。具体如下:
keyProperty:该属性的作用是将插入或更新操作时的返回值赋值给PO类的某个属性,通常会设置为主键对应的属性。如果是联合主键,可以在多个值之间用逗号隔开。
keyColumn:该属性用于设置第几列是主键,当主键列不是表中的第一列时需要设置。如果是联合主键时,可以在多个值之间用逗号隔开。
useGeneratedKeys:该属性将使MyBatis使用JDBC的getGeneratedKeys()方法获取由数据库内部生产的主键,如MySQL、SQL Server等自动递增的字段,其默认值为false。
创建映射文件
在src目录下,创建一个名为com.mybatis.mapper包,在该包中创建映射文件UserMapper.xml。
上述映射文件中,元素是配置文件的根元素,它包含了一个namespace属性,该属性值通常设置为“包名+SQL映射文件名”,指定了唯一的命名空间。
子元素、、以及中的信息是用于执行查询、添加、修改以及删除操作的配置。在定义的SQL语句中,“#{}”表示一个占位符,相当于“?”,而“#{uid}”表示该占位符待接收参数的名称为uid。
主键(自动递增)回填
MySQL、SQL Server等数据库的表格可以采用自动递增的字段作为主键。有时可能需要使用这个刚刚产生的主键,用以关联其他业务。
<!-- 添加一个用户,成功后将主键值回填给uid(po类的属性)--><insert id="addUser" parameterType="com.po.MyUser" keyProperty="uid" useGeneratedKeys="true">insert into user (uname,usex) values(#{uname},#{usex})</insert>
自定义主键
如果实际工程中使用的数据库不支持主键自动递增(如Oracle),或者取消了主键自动递增的规则时,可以使用MyBatis的<selectKey>元素来自定义生成主键。
<insert id="insertUser" parameterType="com.po.MyUser"><!-- 先使用selectKey元素定义主键,然后再定义SQL语句 --><selectKey keyProperty="uid" resultType="Integer" order="BEFORE">select if(max(uid) is null, 1 , max(uid)+1) as newUid from user</selectKey>insert into user (uid,uname,usex) values(#{uid},#{uname},#{usex})</insert>
MyBatis映射器相关推荐
- mybatis映射器${}和#{}的区别
mybatis映射器${}和#{}的区别 转载于:https://www.cnblogs.com/liyuchen/p/7850185.html
- mybatis映射器用法
mybatis映射器 映射器: 系统并没有给出固定且明确的概念,我的理解是:映射器实现了数据库和Java之间数据的交互. 映射器包含了增删改查和结果映射. mybatis映射器分类: mybatis映 ...
- 深入MyBatis开发之mybatis映射器
映射器的配置元素有select/insert/update/delete/sql/resultMap/cache/cache-ref八个常用的,parameterMap基本不用,也不建议使用. MyB ...
- MyBatis映射器出错,已解决(Multiple annotations found at this line:)
创建UserMapper.xml文件时提示错误:Multiple annotations found at this line: - The content of element type " ...
- MyBatis学习之映射器Mapper(接口映射器+xml映射文件)
Table of Contents 01 MyBatis映射器: 1.1 接口映射器+xml映射器 1.2 接口映射器+注解 02 接口映射器+xml映射器 方式 2.1 mybatis配置文件 引 ...
- mybatis的mapper.xml文件中含有中文注释时运行出错,mybatis配置优化和别名优化 mybatis配置之映射器说明
记录一个发现的小问题,刚刚在UserMapper.xml文件中有一段中文注释掉的内容: <!-- <resultMap id="Usermap" type=" ...
- Mybatis基于XML配置SQL映射器(二)
Mybatis之XML注解 之前已经讲到通过 mybatis-generator 生成mapper映射接口和相关的映射配置文件: 下面我们将详细的讲解具体内容 首先我们新建映射接口文档 sysUse ...
- 深入理解MyBatis的原理(四):映射器的用法
前言:继续深入学习 mybatis 的用法及原理,还是先会用再学习原理. 映射器的主要元素有:select.insert.update.delete.parameterMap(即将被删除,不建议使用) ...
- 5、mybatis中的映射器
目录 1.映射器是什么? 2.自定义sql和使用的分类 2.1 根据定义sql的两种方式分类 2.2 根据使用方式分类 mybatis在实际使用时,最主要的还是映射器.这一篇大体介绍一下映射器,但是有 ...
最新文章
- slate-angular 正式开源
- 2.3 残差网络-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
- UWP开发入门教程备忘
- 并查集 (Union-Find)算法
- 浏览器兼容:改写window.showModalDialog
- 使用git管理自己的代码--简单使用流程
- google 插件_Google浏览器常用插件与使用小技巧
- 30个Python小游戏,小白练手,我都能玩一天【内附源码】
- WinRAR5.01注册码附注册机
- 精读-软件测试的艺术之模块测试及更高级别的测试
- 关于Adobe fireworks cs6
- 卡西欧计算机做英语,卡西欧的这个小萌物 原来是台英语学习机
- 右击文件转圈卡住、刷新、白屏、闪退、桌面崩溃的通用解决方法
- 计算机专业的研究方向
- 一场胆战心惊的B站面试,哔哩哔哩也太难进了
- 论文的可复现性,能否量化分析?
- AI也有偏见:你在机器“眼里”是好人还是坏蛋?
- ps意外崩溃_技能培训总结解锁ps、pr技能锦囊
- 中艺人脸识别考勤机使用方法_人脸识别考勤机的使用方法
- Http请求头的Content-Type的几种格式和对应的后端参数获取