Mybatis中动态SQL语句中的parameterType不同数据类型的用法
Mybatis中动态SQL语句中的parameterType不同数据类型的用法
1. 简单数据类型,
此时#{id,jdbcType=INTEGER}中id可以取任意名字如#{a,jdbcType=INTEGER},
如果需要if test则一定使用<if test="_parameter != null">,
此处一定使用_parameter != null而不是id != null
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="Java.lang.Integer" >
select * from base.tb_user
<if test="_parameter != null">
where id = #{id,jdbcType=INTEGER}
</if>
</select>
2. 一个对象数据类型,
此时#{name,jdbcType=CHAR},#{sex,jdbcType=CHAR}中的name和sex一定要使用user对象的属性名
测试user对象<if test="_parameter != null">
测试user对象属性<if test="name != null">或者<if test="#{name} != null">
3. 二个对象数据类型
List<User> select(User user,Page page),
此时if test一定要<if test='_parameter.get("0").name != null'>(通过parameter.get(0)得到第一个参数即user);
where语句where name = #{0.name,jdbcType=CHAR}(通过0.name确保第一个参数user的name属性值)
不用0,1也可以取名List<User> select(@param(user)User user,@param(page)Page page)
4. 集合类型
此时collection="list"会默认找到参数的那个集合idlist(collection="list"这是默认写法,入参为数组Integer[] idarr,则用collection="array")
User selectUserInList(List<Interger> idlist);
<select id="selectUserInList" resultType="User">
SELECT * FROM USER WHERE ID in
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
#{item}
</foreach>
</select>
5. 对象类型中的集合属性
此时collection="oredCriteria"会找到入参example这个非集合对象的oredCriteria属性,此属性是一个集合
List<User> selectByExample(UserExample example);
<where>
<foreach collection="oredCriteria" item="criteria" separator="or" >
<if test="criteria.valid" >
6. map类型(分页查询教师信息)
public List<Teacher> findTeacherByPage(Map<String, Object> map);
Map<String, Object> params = new HashMap<String, Object>();
//以name字段升序排序,params.put("sort", "name"); params.put("dir", "asc");
//查询结果从第0条开始,查询2条记录 params.put("start", 0); params.put("limit", 2);
//查询职称为教授或副教授的教师 params.put("title", "%教授");
此时入参map的key相当于一个object的属性名,value相当于属性值
<select id="findTeacherByPage"resultMap="supervisorResultMap" parameterType="java.util.Map">
select * from teacher where title like #{title}
order by ${sort} ${dir} limit #{start},#{limit}
</select>
7.批量插入
<insert id="addRoleModule" parameterType="java.util.List">
INSERT INTO T_P_ROLE_MODULE (ROLE_ID, MODULE_ID)
<foreach collection="list" item="item" index="index" separator=" UNION ALL ">
SELECT #{item.roleId}, #{item.moduleId} FROM DUAL
</foreach>
</insert>
8.MyBatis+MySQL 返回插入的主键ID
在mapper中指定keyProperty属性,示例如下:
我们在insert中指定了keyProperty="userId"和useGeneratedKeys="true",其中userId代表插入的User对象的主键属性。
System.out.println("插入前主键为:"+user.getUserId());
userDao.insertAndGetId(user);//插入操作
System.out.println("插入前主键为:"+user.getUserId());
<insert id="insertAndGetId" useGeneratedKeys="true" keyProperty="userId" parameterType="com.chenzhou.mybatis.User">
insert into user(userName,password,comment) values(#{userName},#{password},#{comment})
</insert>
Mybatis中动态SQL语句中的parameterType不同数据类型的用法的更多相关文章
- MyBatis中动态SQL语句完成多条件查询
一看这标题,我都感觉到是mybatis在动态SQL语句中的多条件查询是多么的强大,不仅让我们用SQL语句完成了对数据库的操作:还通过一些条件选择语句让我们SQL的多条件.动态查询更加容易.简洁.直观. ...
- MyBatis 动态 SQL 语句中出现 '<' 的问题
问题描述 映射接口方法如下: /** * 根据姓名和年龄查询用户信息 * @param name 姓名 * @param user 获取年龄 * @return */ public List<U ...
- MyBatis 中实现SQL语句中in的操作 (11)
MyBatis 中实现SQL语句中in的操作 概括:应用myBatis实现SQL查询中IN的操作 1.数据库结构及其数据 2.mapper.xml文件 <?xml version="1 ...
- mybatis 的动态sql语句是基于OGNL表达式的。
mybatis 的动态sql语句是基于OGNL表达式的.可以方便的在 sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类:1. if 语句 (简单的条件判断)2. c ...
- MyBatis 构造动态 SQL 语句
以前看过一个本书叫<深入浅出 MFC >,台湾 C++ 大师写的一本书.在该书中写到这样一句话,“勿在浮沙筑高台”,这句话写的的确对啊.编程很多语言虽然相通,但是真正做还是需要认真的学习, ...
- delphi中的sql语句中空格问题
sql语句中的冒号 ‘’,在delphi中需要用四个冒号表示 ‘’‘’,delphi中的两个冒号只代表一个冒号
- 阶段3 1.Mybatis_08.动态SQL_03.mybatis中动态sql语句-foreach和sql标签
foreach标签 in的查询 sql语句好写,但是传参在映射文件里面改怎么传呢 定义一个List<Integer>成员变量,然后生成get和set 定义一个新的查询方法 open:开始符 ...
- Mybatis 的动态 SQL 语句
<if>标签 我们根据实体类的不同取值,使用不同的 SQL 语句来进行查询. 比如在 id 如果不为空时可以根据 id 查询, 如果 username 不同空时还要加入用户名作为条件.这种 ...
- java中的sql语句中如果有like怎么写
我先是在SQL server中写了如下语句: 这样是顺利执行的,可是我把这句话复制到Java代码中打出来却报错了, 刚开始我还以为是前端没有传回来值,待我一句一句打印发现,它提示我rs没有next.到 ...
随机推荐
- windows下cocos2d-x工程结构讲解
这是我们新建好的工程,稍微解释一下我们开发windows的cocos应用所用到的几个文件夹的作用 Classes文件夹,存放游戏代码中的类的源码,当然我们放在别的地方也可以,只要配置好依赖关系就行了 ...
- django js 实现表格动态标序号
<table class="table table-striped"> <thead> <tr class="key_words_head& ...
- JS基础语法---(数据)简单类型和复杂类型
原始数据类型: number, string, boolean, undefined, null, object 基本类型(简单类型), 即值类型: number, string, boolean 复 ...
- CSS学习笔记-过度模块-编写过渡效果
过渡模块-编写过渡效果: 1.编写过渡套路: 1.1不要管过渡,先编写基本界面 1.2修改我们认为需要修改的属性 1.3再给被修改属性的元素添加过渡即可 2.弹性效果 < ...
- Cesium专栏-裁剪效果(基于3dtiles模型,附源码下载)
Cesium Cesium 是一款面向三维地球和地图的,世界级的JavaScript开源产品.它提供了基于JavaScript语言的开发包,方便用户快速搭建一款零插件的虚拟地球Web应用,并在性能,精 ...
- 【转载】从使用到原理学习Java线程池
线程池的技术背景 在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源.在Java中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收. 所 ...
- Http相关小知识点笔记咯~
协议 先来说说什么是协议,协议其实指的是通信协议(Communications Protocol),也称传输协议.Wiki中的描述的是这样的,通信协议定义了通信中的语法学,语义学和同步规则以及可能存在 ...
- ramfs 和 tmpfs 以及 ramdisk相关调研
最近需要使用到 ramfs 和 tmpfs 做内存文件系统,下面对这两个文件系统相关的信息,做一下总结: 参考链接: https://www.thegeekstuff.com/2008/11/over ...
- Codeforces Round #584
传送门 A. Paint the Numbers 签到. Code #include <bits/stdc++.h> using namespace std; typedef long l ...
- Re-爬楼梯
题目地址 https://dn.jarvisoj.com/challengefiles/CFF_100.rar.dbeee1536c0a5ef5844f42c93602aae5 看看功能,看样子要爬到 ...