Mybatis中自定义映射xml参数传递使用
在使用mybatis框架时,大多时候自动生成的mapper.xml文件能满足我们所需的数据库操作,但一些情况下还是需要我们自己写sql;为了加深印象,总结了下参数传递的方式以及各个关键字的含义如下:
语句中接收参数的方式有两种:
1、 #{}预编译 (可防止sql注入)
2、${}非预编译(直接的sql拼接,不能防止sql注入)
参数类型有三种:
1、 基本数据类型
2、 HashMap(使用方式和pojo类似 )
3、 Pojo自定义包装类型
基本数据类型使用方式
List<Bean> selectIdBySortTime(@Param(value="id")Long id); <sql id="Base_Column_List" >
id, car_dept_name, car_maker_name, icon,car_maker_py,hot_type
</sql>
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
select
<include refid="Base_Column_List" />
from common_car_make
where id = #{id,jdbcType=BIGINT} (jdbcType可省略)
</select>
基本类型多参传递时候的方式,sql中不指定接收参数类型,直接对应即可:
User login(@Param(value="name")String name,@Param(value="password")String password );
<select id="login" resultType="com.pojo.User">
select * from us where name=#{name} and password=#{password}
</select>
复杂类型–map类型
Service层
Map<String, Object> paramMap=new hashMap();
paramMap.put(“id”, value);
paramMap.put(“carDeptName”,value);
paramMap.put(“carMakerName”,value);
paramMap.put(“hotType”,value); Dao层 (如果不使用@Param注解,则sql中也可以省略属性前缀cm.)
List<Bean> queryCarMakerList(@Param(value="cm")Map paramMap); <select id="queryCarMakerList" resultMap="BaseResultMap" parameterType="java.util.Map">
select
<include refid="Base_Column_List" />
from common_car_make cm
where 1=1
<if test="id != null">
and id = #{cm.id,jdbcType=DECIMAL}
</if>
<if test="carDeptName != null">
and car_dept_name = #{cm.carDeptName,jdbcType=VARCHAR}
</if>
<if test="carMakerName != null">
and car_maker_name = #{cm.carMakerName,jdbcType=VARCHAR}
</if>
<if test="hotType != null" >
and hot_type = #{cm.hotType,jdbcType=BIGINT}
</if>
ORDER BY id
</select>
复杂类型–类类型
与Map传参的使用方式基本相同,不同的地方在于不同自己再填充map数据,直接使用已定义的bean类即可。
<update id="updateByPrimaryKeySelective" parameterType="com.epeit.api.model.CommonCarMake" >
update common_car_make
<set >
<if test="carDeptName != null" >
car_dept_name = #{carDeptName,jdbcType=VARCHAR},
</if>
<if test="carMakerName != null" >
car_maker_name = #{carMakerName,jdbcType=VARCHAR},
</if>
<if test="icon != null" >
icon = #{icon,jdbcType=VARCHAR},
</if>
<if test="carMakerPy != null" >
car_maker_py = #{carMakerPy,jdbcType=VARCHAR},
</if>
<if test="hotType != null" >
hot_type = #{hotType,jdbcType=BIGINT},
</if>
</set>
where id = #{id,jdbcType=BIGINT}
</update>
返回类型与接收类型关键字的区别:
resultType 和 resultType的区别
两者都是表示查询结果集与java对象之间的一种关系,处理查询结果集,映射到java对象。
resultMap表示将查询结果集中的列一一映射到bean对象的各个属性,映射的查询结果集中的列标签可以根据需要灵活变化。
resultType 表示的是bean中的对象类,此时可以省略掉resultMap标签的映射,但是必须保证查询结果集中的属性 和 bean对象类中的属性是一一对应的,此时大小写不敏感,但是有限制。
parameterMap(不推荐) & parameterType
parameterMap和resultMap类似,表示将查询结果集中列值的类型一一映射到java对象属性的类型上,在开发过程中不推荐这种方式。
一般使用parameterType直接将查询结果列值类型自动对应到java对象属性类型上,不再配置映射关系一一对应,例如上述代码中下划线部分表示将查询结果类型自动对应到Bean对象的属性类型
Mybatis中自定义映射xml参数传递使用的更多相关文章
- Mybatis中的Mapper.xml映射文件sql查询接收多个参数
我们都知道,在Mybatis中的Mapper.xml映射文件可以定制动态SQL,在dao层定义的接口中定义的参数传到xml文件中之后,在查询之前mybatis会对其进行动态解析,通常使用#{}接收 ...
- Mybatis中输出映射resultType与resultMap的区别
Mybatis中输出映射resultType与resultMap的区别 (原文地址:http://blog.csdn.net/acmman/article/details/46509375) 一.re ...
- mybatis中的map.xml文件中sql语句需要分号吗?
mybatis中的map.xml文件中sql语句需要分号吗? :你是说sql介绍的分号吗?不需要的
- idea中自定义设置xml的头文件的内容
因为在idea中新建的xml默认的头文件,有时候并不是我们需要的这时候可以通过自定义来解决. 如搭建hibernate的实体类的映射xml. 首先 fiel→settings出现 如下框框 在上面搜索 ...
- 学习Spring Boot:(十二)Mybatis 中自定义枚举转换器
前言 在 Spring Boot 中使用 Mybatis 中遇到了字段为枚举类型,数据库存储的是枚举的值,发现它不能自动装载. 解决 内置枚举转换器 MyBatis内置了两个枚举转换器分别是:org. ...
- Mybatis中Mapper的Xml映射文件中,除了常见的select|insert|updae|delete标签之外,还有哪些标签?
还有很多其他的标签,<resultMap>.<parameterMap>.<sql>.<include>.<selectKey>,加上动态s ...
- Mybatis中输入输出映射和动态Sql
一.输入映射 我们通过配置parameterType的值来指定输入参数的类型,这些类型可以是简单数据类型.POJO.HashMap等数据类型 1.简单类型 2.POJO包装类型 ①这是单表查询的时候传 ...
- mybatis中的mapper.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-/ ...
- 关于mybatis中sql映射文件模糊查询的使用
1.从前台传递一个String类型的参数到后台进行查询,如果牵涉到模糊查询会报错,应该把参数封装到对象中再进行传递然后进行模糊查询 2.一个查询框,多个查询条件 <if test="c ...
随机推荐
- Vagrant 管理部署 VirtualBox (推荐使用)
学习一段时间的大数据和容器技术,使用虚拟机搭建实验环境还是挺耗时耗力的. 一旦虚拟机坏掉了,还要重新开始. 最近发现了Vagrant, 简直好用上天,方便快捷,易用. 下面介绍如何在Windows中安 ...
- weblogic domain creation
管理服务器 URL: http://CICI-ThinkPad:7001 Domain Path: D:\Program Files\DEV\Oracle\Middleware\user_projec ...
- jmeter使用Beanshell预处理器从指定列表中获取随机值
变量mynation从列表{"china", "US", "UK"}中随机取值 String[] nation = new String[] ...
- js变量和函数声明的提升
函数声明和变量声明总是会被解释器悄悄地被“提升”到方法体的最顶部 请注意,变量赋值并没有被提升,只是声明被提升了. 函数的声明比变量的声明具有高的优先级. 下面的程序是什么结果? var foo = ...
- sql 多行转多列,多行转一列合并数据,列转行
下面又是一种详解:
- C#中的BeginInvoke和EndEndInvoke 异步问题
- bzoj3033: 太鼓达人 欧拉路径
题目链接 bzoj3033: 太鼓达人 题解 对于k-1位点,k位二进制位边,将点的转移连起来 每个点的入度和出度相等并且全部是偶点 只需要在这个图中找字典序最小的欧拉回路 可以贪心地找字典序较小的边 ...
- HDU.5765.Bonds(DP 高维前缀和)
题目链接 \(Description\) 给定一张\(n\)个点\(m\)条边的无向图.定义割集\(E\)为去掉\(E\)后使得图不连通的边集.定义一个bond为一个极小割集(即bond中边的任意一个 ...
- 英语口语练习系列-C26-广告-人际关系-辨别物体-如果
词汇-广告 advertisement noun [ C ] UK /ədˈvɜː.tɪs.mənt/ US /æd.vɝːˈtaɪz.mənt/ informal ad, uk also infor ...
- 第二章 《C++ Primer Plus》
第二章: 让窗口暂停: cin.get(); 作为接口的函数头: 函数头句法: 函数头描述了函数与调用它的函数之间的接口. int main(); int main(void); return 0; ...