多参数传递


分类

使用arg0,arg1或使用param1,param2接收(arg索引从0开始,param索引从1开始)
多个参数封装成对象
多个参数封装成Map集合
使用@param绑定参数

使用arg或param

<mapper namespace="com.vue.dao.CustomerDao">
    <select id="findAllPageSql" parameterType="java.lang.Integer" resultType="com.vue.entity.Customer">
        SELECT * FROM t_customer LIMIT #{param1},#{param2}
    </select>
</mapper>

<mapper namespace="com.vue.dao.CustomerDao">
    <select id="findAllPageSql" parameterType="java.lang.Integer" resultType="com.vue.entity.Customer">
        SELECT * FROM t_customer LIMIT #{arg0},#{arg1}
    </select>
</mapper>

封装成对象

Page.java

public class Page {
    private Integer pageNo;
    private Integer pageSize;
	//getter,setter略
}

Dao持久层传参

public interface CustomerDao {
     List<Customer> findAllPageClass(Page page);
}   

mapper.xml映射文件

<mapper namespace="com.vue.dao.CustomerDao">
   <select id="findAllPageClass" resultType="com.vue.entity.Customer" parameterType="com.vue.util.Page">
       SELECT * FROM t_customer LIMIT #{pageNo},#{pageSize}
   </select>
</mapper>

使用@Param注解绑定参数

Dao持久层接口

/**
  * 分页查询全部
  * @param index
  * @param pageTotal
  * @return
  */
List<Route> findAll(@Param("index") int index,@Param("pageTotal")  int pageTotal,@Param("cid") int cid);

mapper.xml映射文件

<mapper namespace="com.travel.dao.RouteDao">
    <sql id="routeAll">
        SELECT rid, rname, price, routeIntroduce, rflag, rdate, isThemeTour, count,   cid,rimage,   sid, sourceId
        FROM tab_route
    </sql>
    <select id="findAll" resultType="route">
        <include refid="routeAll"></include>
        <where>
            cid = #{cid}
        </where>
        limit #{index},#{pageTotal}
    </select>
</mapper>

补充 :#{}与${}区别

#{} 在SQL动态解析之后,编译将#{}替换为占位符?去替换参数,可以防止sql注入;
#{} 只是表示占位,与参数的名字无关,如果只有一个参数会自动对应,下面会介绍多个参数的问题;
${} 是进行字符串拼接,直接取出参数值,放到sql语句中;
使用注意点,当表名作为变量时,必须使用${}获取参数作为表名进行查询,否则会出现语法错误;
总结:
sql语句动态生成的时候,使用${}
sql语句中某个参数进行占位的时候用#{}


文章作者: zrh
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 zrh !
  目录