zoukankan      html  css  js  c++  java
  • MyBatis动态SQL(二)

    1.foreach

    foreach语句用来遍历数组和集合对象。标签中的属性:
    collection属性:值有三种list、array、map
    open属性:表示调用的sql语句前缀添加的内容
    close属性:表示调用的sql语句后缀添加的内容
    separator属性:分隔符,表示每一次迭代元素之间用什么分隔
    item属性:表示迭代时,每个元素的别名
    index属性:表示当前循环的索引位置
    映射文件配置代码:

    <select id="queryByList" parameterType="list" resultMap="baseMap">
    		select * from t_user where no in
    		<foreach collection="nos" open="(" close=")" separator="," item="no">
    			#{no}
    		</foreach>
    	</select>
    

    方法的接口代码:

    //list,map参数必须添加注解@param不然配置文件会找不着参数而报错
    public List<User> queryByList(@Param("nos")List<Integer> nos);
    

    测试代码:

    public class TestSQL {
    	public static IUserDao mapper = IUserMapper.getIUserMapper();
    	public static void main(String[] args) {
    		List<Integer> list = new ArrayList<Integer>();
    		list.add(1009);
    		list.add(1111);
    		List<User> user = mapper.queryByList(list);
    		for (User user2 : user) {
    			System.out.println(user2);
    		}
    	}
    }
    

    测试结果:
    在这里插入图片描述

    2.bind

    bind元素就是在OGNL表达式中创建一个变量,然后在整个表达式范围内都可以使用。
    映射文件配置代码:

    <select id="queryById" resultType="user" parameterType="int">
    		<bind name="abc" value="1009"/>
    		select * 
    		from t_user 
    		<where>
    			<if test="no=null" >
    					 no=${abc}
    				</if>
    		</where>
    	</select>
    

    测试结果:
    在这里插入图片描述

    3.sql块

    sql片段一般用来定义sql中的列属性。如下例子:
    映射文件配置代码:

    <!-- 定义好sql片段 -->
    	<sql id="sql">
    		no,name,age
    	</sql>
    	<select id="queryByList" parameterType="list" resultMap="baseMap">
    		select 
    		<!-- 引用定义好的sql片段 -->
    		<include refid="sql"></include> 
    		from t_user where no in
    		<foreach collection="nos" open="(" close=")" separator="," item="no">
    			#{no}
    		</foreach>
    	</select>
    	
    	<insert id="add" parameterType="user">
    		insert into t_user(
    		<!-- 引用定义好的sql片段 -->
    		<include refid="sql"></include>
    		) values(#{no},#{name},#{age}) 
    	</insert>
    

    测试结果:
    在这里插入图片描述

  • 相关阅读:
    CentOS 8.2上安装Cassandra Web部署
    CentOS 8.2上安装Apache Cassandra 3.11.9
    CentOS 8.2使用pgAdmin安装PostgreSQL 13.1
    windows 服务器报错处理,TLS升级为1.2
    网站跳转index.html
    安装fail2ban,防止ssh爆破及cc攻击
    服务器数据盘挂载
    2条命令在centos7.5中安装谷歌浏览器
    部署安装python3.7
    部署安装snort--入侵检测工具
  • 原文地址:https://www.cnblogs.com/xj619/p/11183510.html
Copyright © 2011-2022 走看看