Mybatis-学习笔记(3)mapper配置文件
1、mapper配置文件常用的元素

parameterMap已经废弃,老式风格的参数映射。
2、select元素
映射查询语句。#{...}用于预处理语句参数,通过JDBC,这样一个参数在SQL中会由一个“?”来标识,并被传递到一个新的的预处理语句中。

select元素的属性描述如下:


3、insert、update、delete
映射DML语句。与select的配置十分相似。

配置属性除了大部分与select的一致外,特有的部分如下:

如果某些数据库支持生成主键值,且驱动支持获取insert后返回的主键值,则可以设置useGeneratedKeys=“true”,keyProperty=“id”。(id是随意的,主要用来接收返回的主键值)。
对于不支持自动生成类型的数据库(如oracle)或JDBC驱动不支持,Mybatis还可以通过以下方式生成主键:

上面的示例中,selectKey元素将会先运行,通过查询SEQUENCE序列,得到的序列值会设置到id上。

4、sql
用来定义可重用的SQL代码段。可以包含在其他语句中,也可以被静态地(在加载参数时)参数化。

5、Parameters
即parameterType。

或者

6、ResultMaps
从结果集中取出的数据转换成开发者所需要的对象。

1》或者转换成我们的POJO。
<select id="selectAllUser" resultType="com.lfy.bean.User">
select * from t_user
</select>
当POJO,即我们的Java Bean的属性字段与数据库的字段不一致时,需要进行转换(也可以在sql语句中给字段起别名):
<resultMap id="userResultMap" type="com.lfy.bean.User">
<!--使用id属性指定主键字段-->
<id property="id" column="user_id"/>
<!--使用result属性匹配普通字段-->
<result property="name" column="user_name"/>
<result property="sex" column="user_sex"/>
</resultMap>

2》当表间发生关联,Java Bean中嵌套这另外一个Java Bean时。
以下是1对1关系,一个学生只对应一个班级,即Student中只有一个Clazz属性。
<!-- 映射学生对象的resultMap -->
<resultMap id="studentResultMap" type="com.lfy.bean.Student">
<id property="id" column="id" />
<result property="name" column="name"/>
<result property="sex" column="sex"/>
<result property="age" column="age"/>
<!-- 关联映射 -->
<association property="clazz" column="clazz_id"
javaType="com.lfy.bean.Clazz"
select="selectClazzWithId"/>
</resultMap> <!-- 根据班级id查询班级 -->
<select id="selectClazzWithId" resultType="com.lfy.bean.Clazz">
SELECT * FROM TB_CLAZZ where id = #{id}
</select> <!-- 查询所有学生信息 -->
<select id="selectStudent" resultMap="studentResultMap">
SELECT * FROM TB_STUDENT
</select>

(PS:如果是关联查询,也可以在resultMap中直接将关联表的字段映射到内嵌“内前对象”的对应字段上,如多表关联查询及Java bean中组合了其他bean)
<association property="teacher" javaType="com.lfy.bean.Teacher">
<id property="id" column="t_id"/>
<result property="name" column="t_name"/>
</association>
反过来,查所有班级,并查询出各班级的所有学生,将会是1对多的关系,即Clazz中有一个List<Student>属性。
<!-- 映射班级对象的resultMap -->
<resultMap id="clazzResultMap" type="com.lfy.bean.Clazz">
<id property="id" column="id" />
<result property="code" column="code"/>
<!-- 班级的学生属性,因为一个班级有多个学生,所以该属性是一个集合 -->
<collection property="students" javaType="ArrayList"
column="id" ofType="com.lfy.bean.Student"
select="selectStudentWithId"/>
</resultMap> <!-- 根据班级id查询学生 -->
<select id="selectStudentWithId" resultType="com.lfy.bean.Student">
SELECT * FROM TB_STUDENT where clazz_id = #{id}
</select> <!-- 查询所有班级信息 -->
<select id="selectClazz" resultMap="clazzResultMap">
SELECT * FROM TB_CLAZZ
</select>

Mybatis-学习笔记(3)mapper配置文件的更多相关文章
- Mybatis学习笔记(五) —— Mapper.xml(输入映射和输出映射)
一.parameterType(输入类型) 1.1 传递简单类型 <!-- 根据用户id查询用户 --> <select id="queryUserById" p ...
- Mybatis学习笔记之二(动态mapper开发和spring-mybatis整合)
一.输入映射和输出映射 1.1 parameterType(输入类型) [传递简单类型] 详情参考Mybatis学习笔记之一(环境搭建和入门案例介绍) 使用#{}占位符,或者${}进行sql拼接. [ ...
- mybatis 学习笔记(三):mapper 代理开发 dao 层
mybatis 学习笔记(三):mapper 代理开发 dao 层 优势 通过使用mapper 代理,我们可以不需要去编写具体的实现类(使用 getMapper() 方法自动生成),只需编写接口即可, ...
- Mybatis学习笔记(二) 之实现数据库的增删改查
开发环境搭建 mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包.这些软件工具均可以到各自的官方网站上下载 ...
- MyBatis:学习笔记(1)——基础知识
MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...
- mybatis学习笔记(五) -- maven+spring+mybatis从零开始搭建整合详细过程(附demo和搭建过程遇到的问题解决方法)
文章介绍结构一览 一.使用maven创建web项目 1.新建maven项目 2.修改jre版本 3.修改Project Facts,生成WebContent文件夾 4.将WebContent下的两个文 ...
- mybatis学习笔记(四)-- 为实体类定义别名两种方法(基于xml映射)
下面示例在mybatis学习笔记(二)-- 使用mybatisUtil工具类体验基于xml和注解实现 Demo的基础上进行优化 以新增一个用户为例子,原UserMapper.xml配置如下: < ...
- mybatis学习笔记(二)-- 使用mybatisUtil工具类体验基于xml和注解实现
项目结构 基础入门可参考:mybatis学习笔记(一)-- 简单入门(附测试Demo详细过程) 开始体验 1.新建项目,新建类MybatisUtil.java,路径:src/util/Mybatis ...
- Mybatis学习笔记二
本篇内容,紧接上一篇内容Mybatis学习笔记一 输入映射和输出映射 传递简单类型和pojo类型上篇已介绍过,下面介绍一下包装类型. 传递pojo包装对象 开发中通过可以使用pojo传递查询条件.查询 ...
- mybatis学习笔记--常见的错误
原文来自:<mybatis学习笔记--常见的错误> 昨天刚学了下mybatis,用的是3.2.2的版本,在使用过程中遇到了些小问题,现总结如下,会不断更新. 1.没有在configurat ...
随机推荐
- AOP aspect XML 配置
/** * 00配置接入点:定义一个切入点 * execution(* com.foen.foensys.controller..*.*(..))") "*" 第一个* ...
- vscode匹配括号插件
给大家推荐一个vscode匹配括号的插件: Bracket Pair Colorizer.超级好用哦
- nowcoder 79F 小H和圣诞树 换根 DP + 根号分治
设节点个数大于 $\sqrt n$ 的颜色为关键颜色,那么可以证明关键颜色最多有 $\sqrt n$ 个.对于每个关键颜色,暴力预处理出该颜色到查询中另一个颜色的距离和. 对于不是关键颜色的询问,直接 ...
- 【HDU6667】Roundgod and Milk Tea【贪心】
题目大意:给你ai,bi,限制ai不能流向bi,求最大流 题解:贪心,对于第i个班级,考虑前i-1个班级匹配完剩余多少a,b,将这些ab对第i个班级进行贪心匹配 匹配完若第i个班级还有剩余的ab,考虑 ...
- springboot(五).如何在springboot项目中使用拦截器
在每个项目中,拦截器都是我们经常会去使用的东西,基本上任一一个项目都缺不了拦截器的使用. 如日志记录.登录验证,session验证等,都需要拦截器来拦截URL请求,那springboot中的拦截器是如 ...
- Ambari显示server 返回500 error
Ambari server 搭建过程中到了revicw环境遇到点击deploy:发现页面没有响应 Console显示server 返回500 error错误,页面中没有提示更多的报错信息. 经过日志查 ...
- 【机器学习速成宝典】模型篇05朴素贝叶斯【Naive Bayes】(Python版)
目录 先验概率与后验概率 条件概率公式.全概率公式.贝叶斯公式 什么是朴素贝叶斯(Naive Bayes) 拉普拉斯平滑(Laplace Smoothing) 应用:遇到连续变量怎么办?(多项式分布, ...
- SpringBoot 整合Shiro 一指禅
目标 了解ApacheShiro是什么,能做什么: 通过QuickStart 代码领会 Shiro的关键概念: 能基于SpringBoot 整合Shiro 实现URL安全访问: 掌握基于注解的方法,以 ...
- 【零售App】—— react/ant design mobile项目爬坑
一.H5制作 - 图片文本的动画效果 bug:打开一个模板,添加图片,添加动画效果,若先选定动画效果,再调节动画时间和延迟时间,则动画和延迟时间没有改变:若先调节动画时间和延迟时间在选定动画效果,则动 ...
- KVM 常用命令
显示虚拟机 virsh list --all 停止虚拟机 virsh destroy <name> 启动虚拟机 virsh start <name> 删除虚拟机 virsh u ...