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映射器相关推荐

  1. mybatis映射器${}和#{}的区别

    mybatis映射器${}和#{}的区别 转载于:https://www.cnblogs.com/liyuchen/p/7850185.html

  2. mybatis映射器用法

    mybatis映射器 映射器: 系统并没有给出固定且明确的概念,我的理解是:映射器实现了数据库和Java之间数据的交互. 映射器包含了增删改查和结果映射. mybatis映射器分类: mybatis映 ...

  3. 深入MyBatis开发之mybatis映射器

    映射器的配置元素有select/insert/update/delete/sql/resultMap/cache/cache-ref八个常用的,parameterMap基本不用,也不建议使用. MyB ...

  4. MyBatis映射器出错,已解决(Multiple annotations found at this line:)

    创建UserMapper.xml文件时提示错误:Multiple annotations found at this line: - The content of element type " ...

  5. MyBatis学习之映射器Mapper(接口映射器+xml映射文件)

    Table of Contents 01 MyBatis映射器: 1.1 接口映射器+xml映射器 1.2 接口映射器+注解 02 接口映射器+xml映射器  方式 2.1 mybatis配置文件 引 ...

  6. mybatis的mapper.xml文件中含有中文注释时运行出错,mybatis配置优化和别名优化 mybatis配置之映射器说明

    记录一个发现的小问题,刚刚在UserMapper.xml文件中有一段中文注释掉的内容: <!-- <resultMap id="Usermap" type=" ...

  7. Mybatis基于XML配置SQL映射器(二)

    Mybatis之XML注解 之前已经讲到通过 mybatis-generator 生成mapper映射接口和相关的映射配置文件: 下面我们将详细的讲解具体内容 首先我们新建映射接口文档  sysUse ...

  8. 深入理解MyBatis的原理(四):映射器的用法

    前言:继续深入学习 mybatis 的用法及原理,还是先会用再学习原理. 映射器的主要元素有:select.insert.update.delete.parameterMap(即将被删除,不建议使用) ...

  9. 5、mybatis中的映射器

    目录 1.映射器是什么? 2.自定义sql和使用的分类 2.1 根据定义sql的两种方式分类 2.2 根据使用方式分类 mybatis在实际使用时,最主要的还是映射器.这一篇大体介绍一下映射器,但是有 ...

最新文章

  1. slate-angular 正式开源
  2. 2.3 残差网络-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  3. UWP开发入门教程备忘
  4. 并查集 (Union-Find)算法
  5. 浏览器兼容:改写window.showModalDialog
  6. 使用git管理自己的代码--简单使用流程
  7. google 插件_Google浏览器常用插件与使用小技巧
  8. 30个Python小游戏,小白练手,我都能玩一天【内附源码】
  9. WinRAR5.01注册码附注册机
  10. 精读-软件测试的艺术之模块测试及更高级别的测试
  11. 关于Adobe fireworks cs6
  12. 卡西欧计算机做英语,卡西欧的这个小萌物 原来是台英语学习机
  13. 右击文件转圈卡住、刷新、白屏、闪退、桌面崩溃的通用解决方法
  14. 计算机专业的研究方向
  15. 一场胆战心惊的B站面试,哔哩哔哩也太难进了
  16. 论文的可复现性,能否量化分析?
  17. AI也有偏见:你在机器“眼里”是好人还是坏蛋?
  18. ps意外崩溃_技能培训总结解锁ps、pr技能锦囊
  19. 中艺人脸识别考勤机使用方法_人脸识别考勤机的使用方法
  20. Http请求头的Content-Type的几种格式和对应的后端参数获取

热门文章

  1. LeetCode-638. 大礼包
  2. C语言方式 获取CPUID(二)
  3. 【互联网大厂机试真题 - 科大讯飞】朴素贝叶斯挑西瓜
  4. python邮件发送和图片
  5. 指令是计算机用以控制各部件协调动作的指令,(10)计算机指令是计算机用以控制各部件协调动作的命令...
  6. 压缩解压函数实现(转)
  7. 品达物流TMS项目_第1章 项目概述和环境搭建
  8. 1024程序员节——薅当当羊毛买书超划算
  9. Ubuntu配置IP
  10. nvme分区选mbr还是guid_SSD里的特例:NVME固态改MBR格式、装Win7