p.p4 { margin: 0.0px 0.0px 0.0px 10.0px; font: 10.5px "PingFang SC" }
p.p6 { margin: 0.0px 0.0px 0.0px 21.0px; font: 10.0px "Courier New"; color: #4f76cb }
p.p7 { margin: 0.0px 0.0px 0.0px 21.0px; font: 10.0px "Courier New" }
p.p8 { margin: 0.0px 0.0px 0.0px 21.0px; font: 10.0px "Courier New"; min-height: 11.0px }
p.p9 { margin: 0.0px 0.0px 0.0px 21.0px; font: 10.0px "PingFang SC"; color: #4e9072 }
p.p10 { margin: 0.0px 0.0px 0.0px 21.0px; font: 10.0px "Courier New"; color: #931a68 }
p.p11 { margin: 0.0px 0.0px 0.0px 30.9px; font: 10.0px "Courier New" }
p.p12 { margin: 0.0px 0.0px 0.0px 0.0px; font: 10.5px "Times New Roman"; min-height: 11.0px }
p.p13 { margin: 0.0px 0.0px 0.0px 0.0px; text-indent: 21.0px; font: 10.0px "PingFang SC"; color: #4f76cb }
p.p14 { margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px "Courier New"; color: #4f76cb }
p.p15 { margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px "Courier New"; color: #3933ff }
p.p16 { margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px "Courier New" }
p.p17 { margin: 0.0px 0.0px 0.0px 10.0px; font: 10.0px "Courier New"; color: #4e9192 }
p.p18 { margin: 0.0px 0.0px 0.0px 10.0px; font: 10.0px "Courier New"; color: #009193; min-height: 11.0px }
p.p20 { margin: 0.0px 0.0px 0.0px 10.0px; font: 10.5px "Times New Roman"; min-height: 11.0px }
p.p21 { margin: 0.0px 0.0px 0.0px 10.0px; font: 10.5px "PingFang SC"; color: #ff2600 }
p.p22 { margin: 0.0px 0.0px 0.0px 10.0px; font: 10.5px "Times New Roman"; color: #ff2600; min-height: 11.0px }
p.p23 { margin: 0.0px 0.0px 0.0px 0.0px; text-indent: 21.0px; font: 10.0px "Courier New"; color: #4f76cb }
p.p24 { margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px "Courier New"; min-height: 11.0px }
p.p25 { margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px "Courier New"; color: #932192 }
p.p26 { margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px "Courier New"; color: #4e9192 }
p.p28 { margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px "Courier New"; color: #009193 }
p.p29 { margin: 0.0px 0.0px 0.0px 10.0px; font: 10.5px Helvetica }
p.p30 { margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px "Courier New"; color: #4f76cb; min-height: 11.0px }
p.p31 { margin: 0.0px 0.0px 0.0px 0.0px; text-indent: 21.0px; font: 10.0px "Courier New"; color: #4e9192 }
p.p32 { margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px "Courier New"; color: #009193; min-height: 11.0px }
p.p33 { margin: 0.0px 0.0px 0.0px 10.0px; font: 10.0px "Courier New"; color: #009193 }
p.p34 { margin: 0.0px 0.0px 0.0px 21.0px; text-indent: 21.0px; font: 10.0px "Courier New" }
p.p36 { margin: 0.0px 0.0px 0.0px 10.5px; text-indent: 10.0px; font: 10.0px "Courier New" }
p.p37 { margin: 0.0px 0.0px 0.0px 10.5px; font: 10.0px "Courier New"; min-height: 11.0px }
p.p38 { margin: 0.0px 0.0px 0.0px 10.5px; font: 10.0px "Courier New" }
p.p39 { margin: 0.0px 0.0px 0.0px 20.4px; font: 10.0px "Courier New" }
p.p40 { margin: 0.0px 0.0px 0.0px 20.4px; text-indent: 11.0px; font: 10.5px Helvetica }
p.p41 { margin: 0.0px 0.0px 0.0px 20.4px; font: 10.5px "Times New Roman" }
li.li1 { margin: 17.0px 0.0px 16.5px 0.0px; text-align: center; font: 22.0px Helvetica }
li.li2 { margin: 17.0px 0.0px 16.5px 0.0px; font: 22.0px "PingFang SC Semibold" }
li.li3 { margin: 13.0px 0.0px 13.0px 0.0px; font: 16.0px Helvetica }
li.li5 { margin: 0.0px 0.0px 0.0px 0.0px; font: 10.5px Helvetica }
li.li19 { margin: 0.0px 0.0px 0.0px 0.0px; font: 10.5px "PingFang SC Semibold" }
li.li27 { margin: 17.0px 0.0px 16.5px 0.0px; font: 22.0px Helvetica }
li.li35 { margin: 13.0px 0.0px 13.0px 0.0px; font: 16.0px "PingFang SC Semibold" }
span.s1 { font: 22.0px "PingFang SC" }
span.s2 { font: 22.0px Helvetica }
span.s3 { font: 16.0px "PingFang SC" }
span.s4 { font: 10.5px Helvetica }
span.s5 { font: 10.5px "PingFang SC" }
span.s6 { }
span.s7 { font: 10.0px "PingFang SC" }
span.s8 { text-decoration: underline }
span.s9 { color: #91afcb }
span.s10 { color: #931a68 }
span.s11 { font: 10.0px "Courier New"; color: #000000 }
span.s12 { font: 10.0px "Courier New" }
span.s13 { color: #0326cc }
span.s14 { color: #000000 }
span.s15 { color: #7e504f }
span.s16 { color: #009193 }
span.s17 { color: #4e9192 }
span.s18 { color: #932192 }
span.s19 { color: #ff2600 }
span.s20 { color: #3933ff }
span.s21 { font: 10.0px "Courier New" }
span.s22 { font: 16.0px Helvetica }
span.Apple-tab-span { white-space: pre }
ol.ol1 { list-style-type: decimal }
ol.ol2 { list-style-type: lower-alpha }
ol.ol3 { list-style-type: lower-roman }
一、输入映射和输出映射
1. parameterType(输入类型)
1.1 传递简单类型
1 <select id="getUserById" parameterType="int" resultType="com.cenobitor.pojo.User"> 2 SELECT `id`,`username`,`birthday`,`sex`,`address` FROM `user` WHERE id = #{id} 3 </select>
1.2 传递pojo对象
1 <insert id="insertUser" parameterType="com.cenobitor.pojo.User"> 2 INSERT INTO USER (`username`,`birthday`,`sex`,`address`) 3 VALUES (#{username},#{birthday},#{sex},#{address}) 4 </insert>
Mybatis使用ognl表达式解析对象字段的值,#{}或者${}括号中的值为pojo属性名称。
1.3 传递pojo包装对象
1 <!-- 1、resultType:如果要返回数据集合,只需设定为每一个元素的数据类型 2 2、 包装的pojo取值通过 "."来获取,如取包装的pojo中user属性对象里的username属性的表达式为:user.username 3 --> 4 <select id="getUserByQueryVo" parameterType="queryvo" resultType="com.cenobitor.mybatis.pojo.User"> 5 SELECT * FROM USER WHERE username LIKE ‘%${user.username}%‘ 6 </select>
2. resultType(输出类型)
2.1 输出简单类型
1 <!-- 查询用户总记录数,演示返回简单类型 --> 2 <select id="getUserCount" resultType="int"> 3 SELECT COUNT(1) FROM USER 4 </select>
2.2 输出pojo对象:
1 <select id="getUserById" parameterType="int" resultType="com.cenobitor.pojo.User"> 2 SELECT `id`,`username`,`birthday`,`sex`,`address` FROM `user` WHERE id = #{id} 3 </select>
2.3输出pojo列表
1 <select id="getUserById" parameterType="int" resultType="com.cenobitor.pojo.User"> 2 SELECT `id`,`username`,`birthday`,`sex`,`address` FROM `user` WHERE sex = #{sex} 3 </select>
2.4 输出resultMap
表字段与pojo属性不一致时引出的resultMap。
1 <!-- resultMap入门 2 type:映射成的pojo类型 3 id:resultMap唯一标识 4 --> 5 <resultMap type="order" id="orderMap"> 6 7 <!-- id标签用于绑定主键 --> 8 <id property="id" column="id"/> 9 10 <!-- 使用result绑定普通字段 --> 11 <result property="number" column="number"/> 12 <result property="createtime" column="createtime"/> 13 <result property="note" column="note"/> 14 </resultMap> 15 16 <!-- 使用resultMap --> 17 <select id="getOrderListResultMap" resultMap="orderMap"> 18 SELECT * FROM `order` 19 </select>
二、动态sql
2.1 If
由多查询条件拼装引出if标签。
1 <!-- 演示动态sql-if标签的使用情景 --> 2 <select id="getUserByWhere" parameterType="user" resultType="com.cenobitor.mybatis.pojo.User"> 3 SELECT * FROM USER where 1 = 1 4 <!-- if标签的使用 --> 5 <if test="id != null"> 6 and id = #{id} 7 </if> 8 <if test="username != null and username != ‘‘"> 9 and username LIKE ‘%${username}%‘ 10 </if> 11 </select>
2.2 Where
1 <!-- 演示动态sql-where标签的使用情景 --> 2 <select id="getUserByWhere2" parameterType="user" resultType="com.cenobitor.mybatis.pojo.User"> 3 <!-- include:引入sql片段,refid引入片段id --> 4 SELECT * FROM USER 5 <!-- where会自动加上where同处理多余的and --> 6 <where> 7 <!-- if标签的使用 --> 8 <if test="id != null"> 9 and id = #{id} 10 </if> 11 <if test="username != null and username != ‘‘"> 12 and username LIKE ‘%${username}%‘ 13 </if> 14 </where> 15 </select>
2.3 Foreach
1 <!-- 演示动态sql-foreach标签的使用情景 --> 2 <select id="getUserByIds" parameterType="queryvo" resultType="com.cenobitor.mybatis.pojo.User"> 3 SELECT * FROM USER 4 <!-- where会自动加上where同处理多余的and --> 5 <where> 6 <!-- id IN(1,10,25,30,34) --> 7 <!-- foreach循环标签 8 collection:要遍历的集合,来源入参 9 open:循环开始前的sql 10 separator:分隔符 11 close:循环结束拼接的sql 12 --> 13 <foreach item="uid" collection="ids" open="id IN(" separator="," close=")"> 14 #{uid} 15 </foreach> 16 </where> 17 </select>
2.4 Sql片段
演示通过select * 不好引出查询字段名,抽取共用sql片段。
① 定义
1 <!-- sql片段 定义,id:片段唯一标识 --> 2 <sql id="user_column"> 3 `id`, `username`, `birthday`, `sex`, `address`, `uuid2` 4 </sql>
② 使用
1 SELECT 2 <!-- sql片段的使用:include:引入sql片段,refid引入片段id --> 3 <include refid="user_column" /> 4 FROM USER
三、关联查询
3.1 一对一关联
① 方法一,使用resultType
1 <!-- 一对一关联查询,使用resultType --> 2 <select id="getOrderUser" resultType="orderuser"> 3 SELECT 4 o.`id`, o.`user_id` userId, o.`number`, o.`createtime`, o.`note`, u.`username`, u.`address` 5 FROM `order` o 6 LEFT JOIN `user` u 7 ON u.id = o.`user_id` 8 </select>
②方法二,使用resultMap
1 <!-- 一对一关联查询-resultMap --> 2 <resultMap type="order" id="order_user_map"> 3 <!-- id标签用于绑定主键 --> 4 <id property="id" column="id"/> 5 <!-- 使用result绑定普通字段 --> 6 <result property="userId" column="user_id"/> 7 <result property="number" column="number"/> 8 <result property="createtime" column="createtime"/> 9 <result property="note" column="note"/> 10 <!-- association:配置一对一关联 11 property:绑定的用户属性 12 javaType:属性数据类型,支持别名 13 --> 14 <association property="user" javaType="com.cenobitor.mybatis.pojo.User"> 15 <id property="id" column="user_id"/> 16 <result property="username" column="username"/> 17 <result property="address" column="address"/> 18 <result property="sex" column="sex"/> 19 </association> 20 </resultMap> 21 22 <!-- 一对一关联查询-使用resultMap --> 23 <select id="getOrderUser2" resultMap="order_user_map"> 24 SELECT 25 o.`id`,o.`user_id`, o.`number`, o.`createtime`, o.`note`, u.`username`, u.`address`, u.`sex` 26 FROM `order` o 27 LEFT JOIN `user` u 28 ON u.id = o.`user_id` 29 </select>
3.2一对多关联
1 <!-- 一对多关联查询 --> 2 <resultMap type="user" id="user_order_map"> 3 <id property="id" column="id" /> 4 <result property="username" column="username" /> 5 <result property="birthday" column="birthday" /> 6 <result property="address" column="address" /> 7 <result property="sex" column="sex" /> 8 <result property="uuid2" column="uuid2" /> 9 <!-- collection:配置一对多关系 10 property:用户下的order属性 11 ofType:property的数据类型,支持别名 12 --> 13 <collection property="orders" ofType="order"> 14 <!-- id标签用于绑定主键 --> 15 <id property="id" column="oid"/> 16 <!-- 使用result绑定普通字段 --> 17 <result property="userId" column="id"/> 18 <result property="number" column="number"/> 19 <result property="createtime" column="createtime"/> 20 </collection> 21 </resultMap> 22 <!-- 一对多关联查询 --> 23 <select id="getUserOrder" resultMap="user_order_map"> 24 SELECT 25 u.`id`, u.`username`,u.`birthday`,u.`sex`,u.`address`,u.`uuid2`,o.`id` oid,o.`number`,o.`createtime` 26 FROM `user` u 27 LEFT JOIN `order` o 28 ON o.`user_id` = u.`id` 29 </select>
原文地址:https://www.cnblogs.com/gdwkong/p/8784272.html