SSM框架中写sql在xml文件中
第一种(用Mapper.xml映射文件中定义了操作数据库sql)
注意点:
1.#{}与${}
#{}表示一个占位符,使用占位符可以防止sql注入,
${}通过${}可以将parameterType传入的内容拼接在sql中,不能防止sql注入,但是有时方便
例
SELECT * FROM USER WHERE username LIKE '%${value}%'
再比如order by排序,如果将列名通过参数传入sql,根据传的列名进行排序,应该写为:
ORDER BY${columnName}
如果使用#{}将无法实现此功能。
2.传递包装类型
public class QueryVo { private User user; //自定义用户扩展类
private UserCustom userCustom;
<select id="findUserList" parameterType="queryVo" resultType="UserCustom">
SELECT * FROM USER where user.sex=#{userCustom.sex} and user.username LIKE '%${userCustom.username}%'
</select>
3.动态sql
可以对输出参数进行判断,若果输入参数不为空,或是符合条件才进行sql拼接(<!-- where 子句能够自动消除第一个and -->)
<select id="countAll" resultType="int">
select
count(*)
from tag t
<where>
<include refid="search" />
</where>
</select>
<sql id="search">
t.del_flag = #{DEL_FLAG_NORMAL}
<if test="sqlMap.search != null and sqlMap.search != ''">
and (t.value like CONCAT('%',#{sqlMap.search},'%') or t.property like CONCAT('%',#{sqlMap.search},'%')or t.remarks like CONCAT('%',#{sqlMap.search},'%'))
</if> </sql>
4.foreach
<update id="delete">
update tag set
update_date=now(),
del_flag=#{delFlag}
where id in
<foreach collection="ids" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</update> <!--
使用foreach循环遍历
collection:指定集合的输入对象
item:每个遍历生成的对象
open:开始遍历时生成
close:结束遍历时生成
separator:遍历两个对象中间的拼
-->
在例
SELECT * FROM USER WHERE id=1 OR id=10 ORid=16
<where>
<if test="ids != null">
<foreach collection="ids" item="user_id" open="And ( " close=")" separator="OR">
<!-- 每个遍历中所需拼接的字符串 -->
id=#{user_id}
</foreach>
</if>
</where>
5.更新语句中if,和set
<update id="updatePerson1">
update person
<set>
<if test="name != null">
NAME = #{name},
</if>
<if test="gender != null">
GENDER = #{gender},
</if>
</set>
</update>
在这里,<set>会根据标签中内容的有无来确定要不要加上set,同时能自动过来内容后缀逗号,但是有一点要注意,不同于<where>,当<where>中内容为空时,我们可以查出所有人的信息,但是这里更新语句中,<set>内容为空时,语句变成update person
SSM框架中写sql在xml文件中的更多相关文章
- SSM框架中写sql在dao文件中以注解的方式
1以注解方式 //两个参数其中一个是对象需写,对象.属性 @Update("update delivery_address set consignee = #{address.consign ...
- C#程序中:如何删除xml文件中的节点、元素。
C#中动态的清理xml文件中的垃圾信息是程序员必会的哦.这就像数据库一样,不会清理数据怎么可以呢?其实xml文件就可以用作一个小的数据库,存储一些简单的信息.所以,用C#程序实现xml文件的增.删.改 ...
- (转)MyBatis框架的学习(四)——Mapper.xml文件中的输入和输出映射以及动态sql
http://blog.csdn.net/yerenyuan_pku/article/details/71893689 前面对MyBatis框架的学习中,我们对Mapper.xml映射文件多少有些了解 ...
- C#程序中:如何修改xml文件中的节点(数据)
要想在web等程序中实现动态的数据内容给新(如网页中的Flash),不会更新xml文件中的节点(数据)是远远不够的,今天在这里说一个简单的xml文件的更新,方法比较基础,很适合初学者看的,保证一看就懂 ...
- C#程序中:如何向xml文件中插入节点(数据)
向xml文件中动态的添加节点(数据)是一件很爽的事,可以给你的程序带来很多的方便,比如在web中,如果你的Flash用到了xml文件,这个方法可以让你在后台就轻轻松松的更新你的Flash内容哦!一起研 ...
- 关于Android中res目录strings.xml文件中的转义字符之笔录
res目录strings.xml文件中的转义字符: ------------------> 代表着一个汉字的位置: ---- ...
- C#程序中:如何向xml文件中写入数据和读取数据
xml文件作为外部信息存储文件使用简单,方便,其结构和表格略有相似,下面简单的说一下xml文件内容的读取 …… using System.Xml;using System.IO;namespace W ...
- IDEA中mybatis插件自动生成手写sql的xml文件
上图: 选择这个安装,然后重启IDEA,ok.
- 【python小练】0017-将xls文件内容写入xml文件中
第 0017 题: 将 第 0014 题中的 student.xls 文件中的内容写到 student.xml 文件中,如 下所示: <?xml version="1.0" ...
随机推荐
- React多层级表单
因项目需要封装的组件,组件库使用的是Ant Design 用到了 Form组件 , 布局组件,表单控件 ,如果没有使用Ant Design,可以用rc-form代替,需要对组件中使用的表单控件和布局进 ...
- SaltStack说明文档
SaltStack说明文档 master安装 # 安装 yum -y install salt-master salt-minion salt-ssh # 启动 systemctl start sal ...
- 数据库MySQL——安装
MySQL 安装 Mysql安装: 1.通过二进制的方式安装 二进制安装方式中,包括rpm版本以及glibc版本. rpm版本就是在特定linux版本下编译的,如果你的linux版本匹配,就可以安装; ...
- python@wraps实现原理
@wraps作用 python中的装饰器装饰过的函数其实就不是函数本身了,我们可以看看下面的例子 import time def timmer(func): """tim ...
- content-type 组件
content-type初识 什么是content-type ContentType是Django的内置的一个应用,可以追踪项目中所有的APP和model的对应关系,并记录在ContentType表中 ...
- plsql 永久注册码适用个版本
注册码:Product Code:4t46t6vydkvsxekkvf3fjnpzy5wbuhphqzserial Number:601769 password:xs374ca
- jenkins_jmeter配置
echo "job begin" date export current_time=`date "+%Y%m%d_%H%M%S"` mkdir -p ${WOR ...
- netty的简单的应用例子
一.简单的聊天室程序 public class ChatClient { public static void main(String[] args) throws InterruptedExcept ...
- EF Code First关系规则及配置
1.一对多关系 关系表: Category 分类表 Product 产品表 分类与产品之间的一对多关系 1>.产品实体类不指定外键属性 Domain中类定义: Category.cs 1 usi ...
- Redis源码 - 事件管理
Redis 的事件分类 分类 描述 定时器 线程内定时响应,更新缓存时间.关闭非活动的客户端连接等等 pipe 线程间通信,用于其他线程通知主线程退出aeApiPoll() unixsocket 本地 ...