Mybatis学习第三天——输入输出映射以及动态SQL
注意:以下传入数据与输出数据类型部分使用别名的方式,别名在SqlMapConfig.xml核心文件中配置
1.输入映射
1.1 传递简单数据类型

1.2 传递pojo中的类类型

1.3 传递QueryVo包装类
开发中通过可以使用pojo传递查询条件。查询条件可能是综合的查询条件,不仅包括用户查询条件还包括其它的查询条件(比如查询用户信息的时候,将用户购买商品信息也作为查询条件),这时可以使用包装对象传递输入参数。
package com.mybatis.pojo;
public class QueryVo {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}

2.输出映射
2.1 输出简单数据类型

2.2 输出pojo类

2.3 输出列表
与输出类类型一致
2.4 手动指定查询结果映射(ResultMap)
一般情况采用ResultType会自动对应pojo类与表,前提表的字段与pojo类的属性一致。当出现不一致的时候,仍需要返回那么需要自定义。
<resultMap type="User" id="find">
<id column="id" property="id"/>
<result column="username" property="username"/>
<result column="sex" property="sex"/>
<result column="address" property="address"/>
<result column="birthday" property="birthday"/>
</resultMap>
<select id="findUser" resultMap="find" >
select * from user
</select>
这里因为一致所以看不出效果。注意表中id需要用id标签对应
3.动态SQL
<!-- 根据条件查询User -->
<select id="findUserBySexAndUserName" parameterType="User" resultType="User">
select * from User
where 1=1
<if test="sex != null and sex !=''">
and sex = #{sex}
</if>
<if test="username != null and username != ''">
and username like '%${username}%'
</if>
</select> <!-- 根据条件查询User -->
<select id="findUserBySexAndUserNameByWhere" parameterType="User" resultType="User">
select * from User
<where>
<if test="sex != null and sex !=''">
and sex = #{sex}
</if>
<if test="username != null and username != ''">
and username like '%${username}%'
</if>
</where>
</select>
两种标签if和where,if在test中写判断语句,where标签可以代替sql中的,能够将if语句中的and,是在前面的and给自动忽略。
当传入对个值时则需要foreach标签进行:假定传入的数据为List集合
<!-- 这里采用在包装类中定义list的方式作为传入值
原SQL语句为select * from user where id in(1,2,3)
collection:表示包装类中需要遍历的列表
item:表示每个数据的名字,需要与#{}中对应
separator:表示数据应“,”隔开
open:数据以这个开头
close:数据以这个结尾
-->
<select id="findUserByIds" parameterType="QueryVo" resultType="User">
select * from user where id in
<foreach collection="ids" item="id" separator="," open="(" close=")">
#{id}
</foreach>
</select>
其他的比如用数组传值这里就不介绍了。
Mybatis学习第三天——输入输出映射以及动态SQL的更多相关文章
- Mybatis中输入输出映射和动态Sql
一.输入映射 我们通过配置parameterType的值来指定输入参数的类型,这些类型可以是简单数据类型.POJO.HashMap等数据类型 1.简单类型 2.POJO包装类型 ①这是单表查询的时候传 ...
- MyBatis学习(一)---配置文件,Mapper接口和动态SQL
MyBatis MyBatis官方学习网站 http://www.mybatis.org/mybatis-3/zh/index.html 为什么需要MyBatis? Jdbc操作数据库的不足之处 1. ...
- Mybatis学习(三)————— 映射文件详解
前面说了全局配置文件中内容的详解,大家应该清楚了,现在来说说这映射文件,这章就对输入映射.输出映射.动态sql这几个知识点进行说明,其中高级映射(一对一,一对多,多对多映射)在下一章进行说明. 一.输 ...
- MyBatis学习系列三——结合Spring
目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring MyBatis在项目中应用一般都要结合Spring,这一章主要把MyBat ...
- MyBatis学习 之 三、动态SQL语句
目录(?)[-] 三动态SQL语句 selectKey 标签 if标签 if where 的条件判断 if set 的更新语句 if trim代替whereset标签 trim代替set choose ...
- 【转】MyBatis学习总结(三)——优化MyBatis配置文件中的配置
[转]MyBatis学习总结(三)——优化MyBatis配置文件中的配置 一.连接数据库的配置单独放在一个properties文件中 之前,我们是直接将数据库的连接配置信息写在了MyBatis的con ...
- Mybatis输入输出映射_动态sql_关联关系(一对一、一对多、多对多)
Mybatis输入输出映射_动态sql_关联关系(一对一.一对多.多对多)输入输出映射parameterType完成输入映射parameterType可以传入的参数有,基本数据类型(根据id查询用户的 ...
- MyBatis框架之SQL映射和动态SQL
使用MyBatis实现条件查询 1.SQL映射文件: MyBatis真正的强大之处就在于SQL映射语句,MyBatis专注于SQL,对于开发人员来说也是极大限度的进行SQL调优,以保证性能.下面是SQ ...
- 小峰mybatis(5)mybatis使用注解配置sql映射器--动态sql
一.使用注解配置映射器 动态sql: 用的并不是很多,了解下: Student.java 实体bean: package com.cy.model; public class Student{ pri ...
随机推荐
- java的MethodHandle类详解
一.总述 java7为间接调用方法提供了MethodHandle类,即方法句柄.可以将其看作是反射的另一种方式. 这是使用MethodHandle调用方法的一个例子: public class T ...
- springcloud(五)-Ribbon
前言 先发句牢骚,最近太TM忙了,一直没时间静下心来继续写微服务架构!EMMMMMM..... 经过前文的讲解,我们已经实现了微服务的注册与发现.启动各个微服务时,Eureka Client会把自己的 ...
- 威尔逊定理--HDU2973
参考博客 HDU-2973 题目 Problem Description The math department has been having problems lately. Due to imm ...
- PHP 判断字符串 是否 包含另一个字符串
1.stristr 忽略大小写 $string = 'Hello World!'; if(stristr($string, 'earth') === FALSE) { echo '"eart ...
- Chrome DevTools的15个使用技巧(译)
谷歌浏览器如今是Web开发者们所使用的最流行的网页浏览器.伴随每六个星期一次的发布周期和不断扩大的强大的开发功能,Chrome变成了一个必须掌握的工具.大多数前端开发者可能熟悉关于chorme的许多特 ...
- 【es6】数组扩展
只有一个参数,为数组中的值.
- javac符号名字的管理
在符号表中,很重要的一项内容就是符号的名字.名字的管理,要解决的主要问题就是名字的变长问题.在javac中,所有的符号名字放到了一个公用字符池中,对于相同的名字只保存一个. 其中涉及到的主要类及关系如 ...
- python-select异步IO
#实现多任务在同一个线程切换 #!/usr/bin/python from socket import * from select import * from time import ctime so ...
- 环境准备 Ubuntu & Docker
目录 Ubuntu 简介 配置 Docker 简介 Docker CE 安装 参考 本文主要讲解在 Ubuntu 上安装和配置 Docker CE. Ubuntu 简介 Ubuntu(乌班图)是一个基 ...
- Android服务--布局服务(LayoutInflater)
1. 基本概念 1. 概念: 参考资料:https://www.cnblogs.com/androidez/archive/2013/07/01/3164729.html 一个用于加载布局的系统服务, ...