分类
使用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语句中某个参数进行占位的时候用#{}