首页 / 更多教程 / mybatis-动态sql
mybatis-动态sql
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mybatis-动态sql,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3771字,纯文字阅读大概需要6分钟。
内容图文
![mybatis-动态sql](/upload/InfoBanner/zyjiaocheng/524/4f96b077fcb24386a1f80d9814fffb64.jpg)
(1)where标签能消除第一个条件的前and 和or关键字,避免了sql语句语法错误
(2).if标签表示判断
<!-- 以性别和名字条件查询用户 -->
<select id="findBySexAndName" parameterType="User" resultType="User">
<!-- select * from user where username = #{username} and sex = #{sex} -->
select * from user
<where>
<if test="username != null and username !=‘‘ ">
username = #{username}
</if>
<if test="sex != null and sex != ‘‘ ">
and sex = #{sex}
</if>
</where>
</select>
值得一提的是,我们传入的对象的属性,会被逐个提取出来放到一个map中,键为对象属性名,所以在if标签中直接写属性名即可,不需写#{属性名}
2.sql片段
(1)sql标签作用很简单,将sql语句中存在重复性较高的部分提取出来;
<sql id="userTable">
select * from user
</sql>
<!-- 以性别和名字条件查询用户 -->
<select id="findBySexAndName" parameterType="User" resultType="User">
<!-- select * from user where username = #{username} and sex = #{sex} -->
<!-- 引用sql片段 -->
<include refid="userTable"></include>
<where>
<if test="username != null and username !=‘‘ ">
username = #{username}
</if>
<if test="sex != null and sex != ‘‘ ">
and sex = #{sex}
</if>
</where>
</select>
3.foreach标签
foreach标签用来遍历数组或者集合,下面看下数组和集合出现的三种情况如何使用foreach
(1)方法参数是含有集合和数组的对象
下面只演示集合,数组跟集合差不读:
<!-- 传入拥有集合和数组的对象 -->
<select id="findByListAndArray" parameterType="QueryVo" resultType="User">
<!-- select * from user where username = #{username} and sex = #{sex} -->
<!-- 引用sql片段 -->
<include refid="userTable"></include>
<where>
<!-- id in (1,2,3) -->
<foreach collection="list" item="id" open="id in (" close=")" separator=",">
#{id}
</foreach>
</where>
</select>
collection属性值代表传入对象的集合或者数组,item值为集合或数组中每个元素的临时变量,open为遍历拼接前的语句的前缀,close为遍历拼接后的后缀,separator为每遍历一次后追加字符串内容,#{id}取得当前元素的值;foreach有个好处,它能知道有效元素的最后一个元素,在之后空的索引位置将不会遍历
junit测试:
@Test
public void test5() {
//加载主配置文件
String resource = "sqlMapConfig.xml";
try {
//获取指向该配置的流
InputStream in = Resources.getResourceAsStream(resource);
//获取工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
//获取session
SqlSession session = factory.openSession();
//--------------------------------------------------------------------
//得到代理对象
UserMapper mapper = session.getMapper(UserMapper.class);
QueryVo vo = new QueryVo();
// Integer[] ids = new Integer[5];
// ids[0] = 1;
// ids[1] = 10;
// ids[2] = 15;
// vo.setIds(ids);
List<Integer> idList = new ArrayList<Integer>();
idList.add(10);
idList.add(1);
idList.add(15);
vo.setList(idList);
List<User> list = mapper.findByListAndArray(vo);
System.out.println(list);
} catch (IOException e) {
e.printStackTrace();
}
}
(2)方法参数是数组
junit测试:
@Test
public void test6() {
//加载主配置文件
String resource = "sqlMapConfig.xml";
try {
//获取指向该配置的流
InputStream in = Resources.getResourceAsStream(resource);
//获取工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
//获取session
SqlSession session = factory.openSession();
//--------------------------------------------------------------------
//得到代理对象
UserMapper mapper = session.getMapper(UserMapper.class);
Integer[] ids = new Integer[5];
ids[0] = 1;
ids[1] = 10;
ids[2] = 15;
List<User> list = mapper.findByArray(ids);
System.out.println(list);
} catch (IOException e) {
e.printStackTrace();
}
}
(3)方法参数是集合 (不演示,参照数组)
mybatis-动态sql
标签:Opens sqlmap mybatis cto select sele dna size 语法错误
本文系统来源:https://www.cnblogs.com/ibcdwx/p/12941965.html
内容总结
以上是互联网集市为您收集整理的mybatis-动态sql全部内容,希望文章能够帮你解决mybatis-动态sql所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。