MyBatis入门(二)—— 输入映射和输出映射、动态sql、关联查询

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

时间: 2024-08-02 00:52:48

MyBatis入门(二)—— 输入映射和输出映射、动态sql、关联查询的相关文章

mybatis入门(二)

mybatis入门(二) 探究sql语句的映射过程 要探究sql执行过程,先看一个简单的小例子 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <map

8.mybatis动态SQL模糊查询 (多参数查询,使用parameterType)

多参数查询,使用parameterType.实例: 用户User[id, name, age] 1.mysql建表并插入数据 2.Java实体类 public class User { public User() { } public User(int id, String name, int age) { super(); this.id = id; this.name = name; this.age = age; } private int id; private String name;

mybatis入门基础(四)----输入映射和输出映射

阅读目录 一:输入映射 二:输出映射 回到顶部 一:输入映射 通过parameterType指定输入参数的类型,类型可以是简单类型.hashmap.pojo的包装类型. 1.1.传递pojo的包装对象 1.1.1.需求描述 完成用户信息的综合查询,需要传入的查询条件可能很复杂(可能包括用户信息,其它信息,比如,商品,订单等等). 1.1.2.定义包装类型的pojo 针对上边的需求,建议使用自定义的包装类型pojo,在包装类型的pojo中将复杂的查询条件包装进去. 包装查询条件的pojo类User

Mybatis学习(4)输入映射、输出映射、动态sql

一.输入映射: 通过parameterType指定输入参数的类型,类型可以是简单类型.hashmap.pojo的包装类型 1) 传递pojo的包装对象 需求是:完成用户信息的综合查询,传入的查询条件复杂:(包括用户信息.其他信息等); 定义包装类型: 用户扩展类: package com.cy.po; /** *用户的扩展类 * @author chengyu * */ public class UserCustom extends User{ } 视图层面的用户包装类型: 1 package

Spring+SpringMVC+MyBatis深入学习及搭建(四)——MyBatis输入映射与输出映射(转发同上)

原地址:http://www.cnblogs.com/shanheyongmu/p/7121556.html 1. 输入映射 通过parameterType指定输入参数的类型,类型可以是简单类型.hashmap.pojo的包装类型. 1.1 #{}与${} #{}实现的是向prepareStatement中的预处理语句设置参数值,sql语句中#{}表示一个占位符即? <select id="findUserById" parameterType="int" r

mybatis 输入映射和输出映射

开发步骤: 1)映射文件UserMapper,xml中进行配置 2)接口UserMapper中增加方法 3)测试 输入映射: 需求一.:输入包装类型 UserQueryVo中定义Customer类 Customer继承User类 UserQueryVo <span style="font-family:Courier New;font-size:14px;">public class UserQueryVo { private Customer customer; publ

Mybatis_7输入映射和输出映射

1.输入映射: 1)   :传递简单类型如int,string已在之前的程序写到 2):传递pojo对象,也已经在前面的程序中写到 3):传递pojo包装对象,没有写过. 开发中可以通过使用pojo传递查询条件.查询条件可能是综合的查询条件,不仅包括用户的查询条件,还包括其他的查询条件. 根据用户名称模糊查询用户,查询条件放到QueryVo的user属性中. 测试类: 1 @Test 2 void testQueryVo() throws Exception { 3 // 加载核心配置文件 4

MyBatis 入门到精通(三) 高级结果映射

MyBatis的创建基于这样一个思想:数据库并不是您想怎样就怎样的.虽然我们希望所有的数据库遵守第三范式或BCNF(修正的第三范式),但它们不是.如果有一个数据库能够完美映射到所有应用程序,也将是非常棒的,但也没有.结果集映射就是MyBatis为解决这些问题而提供的解决方案.例如,我们如何映射下面这条语句? [html] view plaincopy <select id="selectBlog_by_id" parameterType="int" resul

mybatis入门(二):增删改查

mybatis的原理: 1.mybatis是一个持久层框架,是apache下的顶级项目 mybatis托管到googlecode下,目前托管到了github下面 2.mybatis可以将向prepareStatement中输入的参数自动进行输入映射,将查询结果集灵活的映射成java对象.(输出映射) mybatis的一般使用到的maven包: <dependency> <groupId>mysql</groupId> <artifactId>mysql-co