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配置文件的更多相关文章

  1. Mybatis学习笔记(五) —— Mapper.xml(输入映射和输出映射)

    一.parameterType(输入类型) 1.1 传递简单类型 <!-- 根据用户id查询用户 --> <select id="queryUserById" p ...

  2. Mybatis学习笔记之二(动态mapper开发和spring-mybatis整合)

    一.输入映射和输出映射 1.1 parameterType(输入类型) [传递简单类型] 详情参考Mybatis学习笔记之一(环境搭建和入门案例介绍) 使用#{}占位符,或者${}进行sql拼接. [ ...

  3. mybatis 学习笔记(三):mapper 代理开发 dao 层

    mybatis 学习笔记(三):mapper 代理开发 dao 层 优势 通过使用mapper 代理,我们可以不需要去编写具体的实现类(使用 getMapper() 方法自动生成),只需编写接口即可, ...

  4. Mybatis学习笔记(二) 之实现数据库的增删改查

    开发环境搭建 mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包.这些软件工具均可以到各自的官方网站上下载 ...

  5. MyBatis:学习笔记(1)——基础知识

    MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...

  6. mybatis学习笔记(五) -- maven+spring+mybatis从零开始搭建整合详细过程(附demo和搭建过程遇到的问题解决方法)

    文章介绍结构一览 一.使用maven创建web项目 1.新建maven项目 2.修改jre版本 3.修改Project Facts,生成WebContent文件夾 4.将WebContent下的两个文 ...

  7. mybatis学习笔记(四)-- 为实体类定义别名两种方法(基于xml映射)

    下面示例在mybatis学习笔记(二)-- 使用mybatisUtil工具类体验基于xml和注解实现 Demo的基础上进行优化 以新增一个用户为例子,原UserMapper.xml配置如下: < ...

  8. mybatis学习笔记(二)-- 使用mybatisUtil工具类体验基于xml和注解实现

    项目结构  基础入门可参考:mybatis学习笔记(一)-- 简单入门(附测试Demo详细过程) 开始体验 1.新建项目,新建类MybatisUtil.java,路径:src/util/Mybatis ...

  9. Mybatis学习笔记二

    本篇内容,紧接上一篇内容Mybatis学习笔记一 输入映射和输出映射 传递简单类型和pojo类型上篇已介绍过,下面介绍一下包装类型. 传递pojo包装对象 开发中通过可以使用pojo传递查询条件.查询 ...

  10. mybatis学习笔记--常见的错误

    原文来自:<mybatis学习笔记--常见的错误> 昨天刚学了下mybatis,用的是3.2.2的版本,在使用过程中遇到了些小问题,现总结如下,会不断更新. 1.没有在configurat ...

随机推荐

  1. 【初中部 NOIP提高组 二试】模拟赛B总结

    今天的比赛大翻车了,惨败. 第一题是一道模拟找规律题,由于一些计算错误,没有认真对拍,本来送的100分有40分飞走了~~ 第二题是在一个结论基础上的dp加单调队列,比赛上没有搞出那个结论,打了个n^3 ...

  2. 【crontab】误删crontab及其恢复

    中秋节快到了,首先祝自己中秋快乐. 昨天下午六点,心里正想着加完一个crontab就可以下班了.本来想执行 crontab -e的,没想到手一抖就输入了crontab ,然后就进入了下面这个样子.

  3. c# linq 分组groupby

    转载: https://www.cnblogs.com/cncc/p/9846390.html 一.先准备要使用的类: 1.Person类: class Person { public string ...

  4. net core 下 接受文件 测试

    /* IFormFileCollection Files 再Request对象下的From对象下的Files对象 public interface IFormFileCollection : IRea ...

  5. SqlServer 随机生成中文姓名(转)

    ,) )) -- 姓氏 ,) )) -- 名字 INSERT @fName VALUES ('赵'),('钱'),('孙'),('李'),('周'),('吴'),('郑'),('王'),('冯'),( ...

  6. linux的字符集转换

    命令查看编码类型 查看命令参数 查看支持的字符集 将文件转换成utf-8 的文件(经测试比较鸡肋,不好用) [root@ag-1 hh]# iconv oldboy -f us-ascii -t ut ...

  7. html audio标签 语法

    html audio标签 语法 audio标签的作用是什么? 作用:<audio> 标签定义声音,比如音乐和视频或其他音频资源,使用audio标签可以不用Flash插件就可以听音乐看视频, ...

  8. (54)LINUX应用编程和网络编程之九Linux网络通信实践

    3.9.1.linux网络编程框架 3.9.1.1.网络是分层的 (1)OSI 7层模型(理论指导) (2)网络为什么要分层 (3)网络分层的具体表现 3.9.1.2.TCP/IP协议引入(网络分层实 ...

  9. BZOJ 1069 Luogu P4166 最大土地面积 (凸包)

    题目链接: (bzoj)https://www.lydsy.com/JudgeOnline/problem.php?id=1069 (luogu)https://www.luogu.org/probl ...

  10. 聊一聊几种常用web图片格式:gif、jpg、png、webp

    前言 在大多数的web页面中,图片占到了页面大小的60%-70%.因此在web开发中,不同的场景使用合适的图片格式对web页面的性能和体验是很重要的.图片格式种类非常多,本文仅针对几种web应用中常用 ...