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>

转载于:https://www.cnblogs.com/ZeroMZ/p/11415373.html

Mybatis-学习笔记(3)mapper配置文件相关推荐

  1. 【Mybatis学习笔记】Mapper动态代理四项原则和注意事项

    如果使用原始的DAO,要自己对其进行实现,而如果使用Mybatis的Mapper动态代理,就可以让Mybatis自动帮你实现DAO接口. Mapper动态代理的四项原则 1.接口方法名需要与Mappe ...

  2. MyBatis学习笔记(二)根据配置文件优化

    上一篇:MyBatis学习笔记(一)完整查询数据库流程+增删改查 mybatis_config.xml文件中可以包含以下部分 本文接下来的优化都是针对于mybatis_config.xml文件,并且每 ...

  3. mybatis学习笔记(13)-延迟加载

    2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(13)-延迟加载 标签: mybatis [TOC] resultMap可以实现高级映射(使用asso ...

  4. mybatis学习笔记(3)-入门程序一

    2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(3)-入门程序一 标签: mybatis [TOC] 工程结构 在IDEA中新建了一个普通的java项 ...

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

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

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

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

  7. MyBatis学习笔记2 ——第一个MyBatis程序

    MyBatis学习笔记2 --第一个MyBatis程序 参考教程B站狂神https://www.bilibili.com/video/BV1NE411Q7Nx 环境搭建 建立一个mybatis数据库用 ...

  8. 【应用篇】MyBatis学习笔记

    MyBatis学习笔记 一 环境配置 1 什么是MyBatis? ​ MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除了几乎所有的 JDBC 代码和参 ...

  9. MyBatis学习笔记(1)—使用篇

    MyBatis学习笔记(1)-使用篇 MyBatis学习笔记(2)-映射关系篇 MyBatis学习笔记(3)-高级映射之一对一映射 Mybatis学习笔记(4)-高级映射之一对多映射 Mybatis学 ...

  10. 超详细Mybatis学习笔记(可供下载)

    文章目录 1.简介 2.第一个Mybatis程序 搭建环境 编写代码 测试 3.CRUD(增删改查) 3.1.几个属性 3.2.select 3.3.insert 3.4.delete 3.5.upd ...

最新文章

  1. 总结day11 ----函数的学习(2)
  2. Sql Server 关于整表插入另一个表部分列的语法以及select 语句直接插入临时表的语法...
  3. Auto-Publishing and Monitoring APIs With Spring Boot--转
  4. 努力将SQL Server像玩游戏一样熟练
  5. ABP框架 v3.0 已发布!
  6. HelloWorld新手常见问题
  7. 信息学奥赛一本通(1186:出现次数超过一半的数)
  8. python虚拟机 基于寄存器_基于栈虚拟机和基于寄存器虚拟机的比较
  9. 机器人手眼标定都能搞不定?快戳,最好用的手眼标定库!!!
  10. 求解两条空间直线的交点(解析解+数值解)
  11. 编译原理NFA确定化
  12. 能量原理与变分法笔记06:高阶导数的变分问题(包含函数的高阶导数)
  13. WPS表格取消隐藏行不管用?
  14. 揭开CVE漏洞挖掘与编号申请那层神秘窗户纸
  15. 如何取消OPPOA33Android系统,OPPO A33系统降级教程_OPPO A33怎么回退到原来旧版本的系统...
  16. VUE时间范围选择的组件
  17. 基于UMa和RMa传播模型的5G覆盖性能研究
  18. 事件冒泡和事件捕获的区别
  19. 【NOIP2015模拟10.27】魔道研究题解
  20. 春气融和,再创佳绩 | 菊风中标华融湘江银行远程视频银行项目

热门文章

  1. JAVA读注册表获取My Document等目录
  2. 2020-11-16梦笔记
  3. LINUX下载编译uuid
  4. 同样一个网址,用电信网络和中国移动的手机网络,下载速度相差巨大
  5. png2theora.c: undefined reference to `png_sizeof
  6. Beyond Compare比较文件夹时如何忽略文件
  7. 错误解决:src/cpp/cuda.hpp:  fatal error: cuda.h
  8. LINUX编译json-c错误的解决:autoreconf找不到,json_tokener.c报错
  9. 研发管理:该吵架就要吵架
  10. 无继承情况下的对象构造