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 ...
随机推荐
- 一种循环C字符数组的骚操作
#include <stdio.h> #include <stdlib.h> int main() { char wenwa[] = "程劲小盆友在做什么" ...
- 一个C语言外挂程序
首先建立一个控制台应用程序 引入Windows.h库函数 MessageBoxA(句柄--通常是0,提示框内容,提示框标题,按钮) #include <Windows.h> int mai ...
- JMeter 功能挖掘之 WEB 文件导出
前言 自从写从0构建自动化测试平台(一)之技术选型开始,在工作中Get新技能就非常想郑重的记录下来,方便自己查阅:相信很多人都有这种感触:平时问题解决后,没有及时记录,下次遇到类似问题,需要花同等的成 ...
- UVALive 3211 : Now or later 【2-SAT】
题目链接 题意及题解参见lrj训练指南 #include<bits/stdc++.h> using namespace std; ; struct TwoSAT { int n; vect ...
- void 运算符和 逗号运算符
一.void 运算符 void 运算符的作用目的是 执行一个表达式,但是不用返回任何值,或者是返回undefined void 本身就有 无效.空的 的意思. void运算符的用法: 1.不加括号的写 ...
- docker-compose部署ELK(亲测)
具体的配置可以参考上面一篇:docker部署ELK 以下是做了一些修改的地方: kibana.yml [root@topcheer config]# cat kibana.yml server.hos ...
- Oracle数据库表空间创建、添加用户并授权
--创建test表空间CREATE TABLESPACE test_data LOGGING DATAFILE '/u01/app/oracle/oradata/test/test_data.dbf' ...
- leetcode-mid-others-169. Majority Element¶
mycode 54.93% class Solution(object): def majorityElement(self, nums): """ :type num ...
- EasyHook Creating a remote file monitor
In this tutorial we will create a remote file monitor using EasyHook. We will cover how to: 使用EasyHo ...
- webpack4常用片段
webpack 4常用 初始化 npm init // Webpack 4.0以后需要单独安装 npm install webpack webpack-cli --save-dev 基础的config ...