#{value}
在动态SQL中,如果只有一个参数时,在xml文件中使用 #{value}
。
public interface UserMapper{
public List<XXBean> getXXBeanList(String name);
}
<select id="getXXXBeanList" parameterType="java.lang.String" resultType="XXBean">
select t.* from tableName t where t.name= #{value}
select>
@Param
注解(推荐)public interface UserMapper{
public List<XXBean> getXXBeanList(@param("id")String id);
}
<select id="getXXXBeanList" parameterType="java.lang.String" resultType="XXBean">
select t.* from tableName t where t.id= #{id}
</select>
其中方法名和id一致,#{} 中的参数名与方法中的参数名一致, 这里采用的是@Param这个参数,实际上@Param这个最后会被Mabatis封装为map类型的。
select 查询的字段列表 必须和bean中的属性名一致, 如果不一致的可以使用 别名 来补充。
@Param
注解(推荐)public interface UserMapper{
public List<XXXBean> getXXXBeanList(@Param("id")String id , @Param("code")String code);
}
多参数时,@Param
指定参数的名称。
xml 映射文件:
<select id="getXXXBeanList" resultType="XXBean">
select t.* from tableName where id = #{id} and name = #{code}
select>
public interface UserMapper{
public List<XXXBean> getXXXBeanList(String xxId, String xxCode);
}
不需要写 parameterType 参数。
<select id="getXXXBeanList" resultType="XXBean">
select t.* from tableName where id = #{0} and name = #{1}
select>
由于是多参数那么就不能使用parameterType, 改用#{index}是第几个就用第几个的索引,索引从0开始
public class UserQueryVO {
private Integer id;
private String code;
// getter/setter....
}
public interface UserMapper{
public List<XXBean> getXXBeanList(UserQueryVO userQueryVO);
}
<select id="getXXBeanList" parameterType="com.xxx.entity.vo.UserQueryVO" resultType="XXBean">
select 字段... from XXX where id=#{id} code = #{code}
select>
这个是最常见的,不多说了。
HashMap <String, Object> params = new HashMap<String, Object>();
params.put("id", "1234");
params.put("code ", "0904KIEOWO");
public interface UserMapper{
public List<XXBean> getXXBeanList(HashMap params);
}
<select id="getXXBeanList" parameterType="map" resultType="XXBean">
select 列名 from XX where id=#{id} and code = #{code}
select>
其中,hashmap是mybatis自己配置好的,直接使用就行。map中key的名字是那个就在 #{}
使用那个,map如何封装就不用了我说了吧。
public interface UserMapper{
public List<XXXBean> getXXXBeanList(List<String> list);
}
<select id="getXXXBeanList" resultType="XXBean">
select 字段... from XXX where id in
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
#{item}
foreach>
select>
foreach 最后的效果是 select 字段... from XXX where id in ('1','2','3','4')
SqlSession.selectList()
只能传递一个参数,但实际所需参数既要包含 String 类型,又要包含 List 类型。
将参数放入Map,再取出Map中的List遍历。如下:
// 定义一个 map
Map<String, Object> params = new HashMap<String, Object>();
// String类型
mparamsp2.put("siteTag", "0");
// List类型
List<String> idList = new ArrayList<String>();
idList.add("1");
idList.add("2");
params.put("idList", idList);
public List<SysWeb> getSysInfo(Map<String, Object> params) {
return getSqlSession().selectList("getSysInfo", params);
}
<select id="getSysInfo" parameterType="java.util.Map" resultType="SysWeb">
select t.sysSiteId, t.siteName, t1.mzNum as siteTagNum, t1.mzName as siteTag, t.url, t.iconPath
from TD_WEB_SYSSITE t
left join TD_MZ_MZDY t1 on t1.mzNum = t.siteTag and t1.mzType = 10
WHERE t.siteTag = #{siteTag }
and t.sysSiteId not in
<foreach collection="idList" item="item" index="index" open="(" close=")" separator=",">
#{item}
foreach>
select>