MyBatis入门(二)—— 输入映射和输出映射、动态sql、关联查询
一、输入映射和输出映射
1. parameterType(输入类型)
1.1 传递简单类型
<select id="getUserById" parameterType="int" resultType="com.cenobitor.pojo.User">
SELECT `id`,`username`,`birthday`,`sex`,`address` FROM `user` WHERE id = #{id}
</select>
1.2 传递pojo对象
<insert id="insertUser" parameterType="com.cenobitor.pojo.User">
INSERT INTO USER (`username`,`birthday`,`sex`,`address`)
VALUES (#{username},#{birthday},#{sex},#{address})
</insert>
Mybatis使用ognl表达式解析对象字段的值,#{}或者${}括号中的值为pojo属性名称。
1.3 传递pojo包装对象
<!-- 1、resultType:如果要返回数据集合,只需设定为每一个元素的数据类型
2、 包装的pojo取值通过 "."来获取,如取包装的pojo中user属性对象里的username属性的表达式为:user.username
-->
<select id="getUserByQueryVo" parameterType="queryvo" resultType="com.cenobitor.mybatis.pojo.User">
SELECT * FROM USER WHERE username LIKE '%${user.username}%'
</select>
2. resultType(输出类型)
2.1 输出简单类型
<!-- 查询用户总记录数,演示返回简单类型 -->
<select id="getUserCount" resultType="int">
SELECT COUNT(1) FROM USER
</select>
2.2 输出pojo对象:
<select id="getUserById" parameterType="int" resultType="com.cenobitor.pojo.User">
SELECT `id`,`username`,`birthday`,`sex`,`address` FROM `user` WHERE id = #{id}
</select>
2.3输出pojo列表
<select id="getUserById" parameterType="int" resultType="com.cenobitor.pojo.User">
SELECT `id`,`username`,`birthday`,`sex`,`address` FROM `user` WHERE sex = #{sex}
</select>
2.4 输出resultMap
表字段与pojo属性不一致时引出的resultMap。
<!-- resultMap入门
type:映射成的pojo类型
id:resultMap唯一标识
-->
<resultMap type="order" id="orderMap"> <!-- id标签用于绑定主键 -->
<id property="id" column="id"/> <!-- 使用result绑定普通字段 -->
<result property="number" column="number"/>
<result property="createtime" column="createtime"/>
<result property="note" column="note"/>
</resultMap> <!-- 使用resultMap -->
<select id="getOrderListResultMap" resultMap="orderMap">
SELECT * FROM `order`
</select>
二、动态sql
2.1 If
由多查询条件拼装引出if标签。
<!-- 演示动态sql-if标签的使用情景 -->
<select id="getUserByWhere" parameterType="user" resultType="com.cenobitor.mybatis.pojo.User">
SELECT * FROM USER where 1 = 1
<!-- if标签的使用 -->
<if test="id != null">
and id = #{id}
</if>
<if test="username != null and username != ''">
and username LIKE '%${username}%'
</if>
</select>
2.2 Where
<!-- 演示动态sql-where标签的使用情景 -->
<select id="getUserByWhere2" parameterType="user" resultType="com.cenobitor.mybatis.pojo.User">
<!-- include:引入sql片段,refid引入片段id -->
SELECT * FROM USER
<!-- where会自动加上where同处理多余的and -->
<where>
<!-- if标签的使用 -->
<if test="id != null">
and id = #{id}
</if>
<if test="username != null and username != ''">
and username LIKE '%${username}%'
</if>
</where>
</select>
2.3 Foreach
<!-- 演示动态sql-foreach标签的使用情景 -->
<select id="getUserByIds" parameterType="queryvo" resultType="com.cenobitor.mybatis.pojo.User">
SELECT * FROM USER
<!-- where会自动加上where同处理多余的and -->
<where>
<!-- id IN(1,10,25,30,34) -->
<!-- foreach循环标签
collection:要遍历的集合,来源入参
open:循环开始前的sql
separator:分隔符
close:循环结束拼接的sql
-->
<foreach item="uid" collection="ids" open="id IN(" separator="," close=")">
#{uid}
</foreach>
</where>
</select>
2.4 Sql片段
演示通过select * 不好引出查询字段名,抽取共用sql片段。
① 定义
<!-- sql片段 定义,id:片段唯一标识 -->
<sql id="user_column">
`id`, `username`, `birthday`, `sex`, `address`, `uuid2`
</sql>
② 使用
SELECT
<!-- sql片段的使用:include:引入sql片段,refid引入片段id -->
<include refid="user_column" />
FROM USER
三、关联查询
3.1 一对一关联
① 方法一,使用resultType
<!-- 一对一关联查询,使用resultType -->
<select id="getOrderUser" resultType="orderuser">
SELECT
o.`id`, o.`user_id` userId, o.`number`, o.`createtime`, o.`note`, u.`username`, u.`address`
FROM `order` o
LEFT JOIN `user` u
ON u.id = o.`user_id`
</select>
②方法二,使用resultMap
<!-- 一对一关联查询-resultMap -->
<resultMap type="order" id="order_user_map">
<!-- id标签用于绑定主键 -->
<id property="id" column="id"/>
<!-- 使用result绑定普通字段 -->
<result property="userId" column="user_id"/>
<result property="number" column="number"/>
<result property="createtime" column="createtime"/>
<result property="note" column="note"/>
<!-- association:配置一对一关联
property:绑定的用户属性
javaType:属性数据类型,支持别名
-->
<association property="user" javaType="com.cenobitor.mybatis.pojo.User">
<id property="id" column="user_id"/>
<result property="username" column="username"/>
<result property="address" column="address"/>
<result property="sex" column="sex"/>
</association>
</resultMap> <!-- 一对一关联查询-使用resultMap -->
<select id="getOrderUser2" resultMap="order_user_map">
SELECT
o.`id`,o.`user_id`, o.`number`, o.`createtime`, o.`note`, u.`username`, u.`address`, u.`sex`
FROM `order` o
LEFT JOIN `user` u
ON u.id = o.`user_id`
</select>
3.2一对多关联
<!-- 一对多关联查询 -->
<resultMap type="user" id="user_order_map">
<id property="id" column="id" />
<result property="username" column="username" />
<result property="birthday" column="birthday" />
<result property="address" column="address" />
<result property="sex" column="sex" />
<result property="uuid2" column="uuid2" />
<!-- collection:配置一对多关系
property:用户下的order属性
ofType:property的数据类型,支持别名
-->
<collection property="orders" ofType="order">
<!-- id标签用于绑定主键 -->
<id property="id" column="oid"/>
<!-- 使用result绑定普通字段 -->
<result property="userId" column="id"/>
<result property="number" column="number"/>
<result property="createtime" column="createtime"/>
</collection>
</resultMap>
<!-- 一对多关联查询 -->
<select id="getUserOrder" resultMap="user_order_map">
SELECT
u.`id`, u.`username`,u.`birthday`,u.`sex`,u.`address`,u.`uuid2`,o.`id` oid,o.`number`,o.`createtime`
FROM `user` u
LEFT JOIN `order` o
ON o.`user_id` = u.`id`
</select>
MyBatis入门(二)—— 输入映射和输出映射、动态sql、关联查询的更多相关文章
- MyBatis 实践 -动态SQL/关联查询
MyBatis 实践 标签: Java与存储 动态SQL 动态SQL提供了对SQL语句的灵活操作,通过表达式进行判断,对SQL进行拼接/组装. if 对查询条件进行判断,如果输入参数不为空才进行查询条 ...
- 【mybatis深度历险系列】mybatis中的输入映射和输出映射
在前面的博文中,小编介绍了mybatis的框架原理以及入门程序,还有mybatis中开发到的两种方法,原始开发dao的方法和mapper代理方法,今天博文,我们来继续学习mybatis中的相关知识,随 ...
- Mybatis学习总结(四)——输入映射和输出映射
在前面几篇文章的例子中也可以看到mybatis中输入映射和输出映射的身影,但是没有系统的总结一下,这篇博客主要对这两个东东做一个总结.我们知道mybatis中输入映射和输出映射可以是基本数据类型.ha ...
- 【MyBatis学习06】输入映射和输出映射
在前面几篇博文的例子中也可以看到mybatis中输入映射和输出映射的身影,但是没有系统的总结一下,这篇博客主要对这两个东东做一个总结.我们知道mybatis中输入映射和输出映射可以是基本数据类型.ha ...
- (七)mybatis 的输入映射与输出映射
目录 前言 输入映射 - - 传递 pojo 包装类型 (复杂查询 ) 输出映射 - - resultType 输出映射 - - resultMap 前言 通过 paramterType 指定输入参数 ...
- 8.mybatis动态SQL模糊查询 (多参数查询,使用parameterType)
多参数查询,使用parameterType.实例: 用户User[id, name, age] 1.mysql建表并插入数据 2.Java实体类 public class User { public ...
- mybatis入门基础(四)----输入映射和输出映射
一:输入映射 通过parameterType指定输入参数的类型,类型可以是简单类型.hashmap.pojo的包装类型. 1.1.传递pojo的包装对象 1.1.1.需求描述 完成用户信息的综合查询, ...
- mybatis基础系列(二)——基础语法、别名、输入映射、输出映射
增删改查 mapper根节点及其子节点 mybatis框架需要读取映射文件创建会话工厂,映射文件是以<mapper>作为根节点,在根节点中支持9个元素,分别为insert.update.d ...
- Mybatis输入映射和输出映射
本节内容: 输入参数映射 输出映射 resultMap Mapper.xml映射文件中定义了操作数据库的sql,每个sql是一个statement,映射文件是mybatis的核心. 一.环境准备 复制 ...
随机推荐
- Linux CentOS7系统中mysql8安装配置
mysql是世界上最流行的关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司所有.今天我将记录一下如何在Linux centos7系统上安装和配置MySQL. 目录 环境准 ...
- (转)MySQL 5.6 OOM 问题解决分享
本文来自:杨德华的原创分享 | MySQL 5.6 OOM 问题解决分享 原文:http://www.cnblogs.com/zhoujinyi/p/5763112.html 延伸阅读:Linux的内 ...
- 腾讯云域名申请+ssl证书申请+springboot配置https
阿里云域名申请 域名申请比较简单,使用微信注册阿里云账号并登陆,点击产品,选择域名注册 输入你想注册的域名 进入域名购买页面,搜索可用的后缀及价格,越热门的后缀(.com,.cn)越贵一般,并且很可能 ...
- Intellij-怎么避免import.*包,以及import包顺序问题
Intellij版本 IntelliJ IDEA 2018.1.2 (Ultimate Edition) Build #IU-181.4668.68, built on April 24, 2018 ...
- javascript闭包获取table中tr的索引 分类: JavaScript 2015-05-04 15:10 793人阅读 评论(0) 收藏
使用javascript闭包获取table标签中tr的索引 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN& ...
- Android 开发工具类 14_ JsonTools
天气 JSON 数据解析 package com.example.weather_json.tools; import java.util.ArrayList; import java.util.Li ...
- css自动适应宽度
.itemContent { background-color:#F0F0F0; padding:3px 11px 11px 11px; text-align:justify; text-justif ...
- Python -- 图片处理
使用PIL库 转换图片格式(jpg --> png) from PIL import Image Image.open('E:/art.jpg').save('E:/art.png')
- 探秘varian:优雅的发布部署程序
上一篇文章<记一次诡异的故障排查经历>中有介绍到我们的部署程序varian,文章发布后有小伙伴对varian很感兴趣,今天就简单的介绍一下我们的varian,揭开她神秘的面纱~ 什么是va ...
- Java虚拟机(三):JVM垃圾回收机制
概述 垃圾收集 Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了. jvm 中,程序计数器.虚拟机栈.本地方 ...