- #{}占位符用來設置參數,參數的類型可以有3種,基本類型,自定義類型,map基本類型作為參數,參數與占位符中的名稱無關。
<select id="findById" parameterType="int" resultType="cn.wh.vo.Role"> select * from t_role where id = #{xxxid} </select>
測試:
@Test public void testSelectOne(){ Role role = (Role)session.selectOne("cn.wh.mapper.RoleMapper.findById",1); System.out.println(role.getName()); }
自定義類型作為參數,自定義類中需要為為屬性提供get方法,如果沒有提供get方法,那么會根據占位符中的名稱去反射獲取值,如果占位符中的名稱和屬性不一致,那么報ReflectionException。
<select id="findListBypage" parameterType="cn.wh.util.PageUtil" resultType="Role"> select * from t_role limit #{index},#{size} </select>
測試:
@Test public void testPage1(){ PageUtil pu = new PageUtil(); pu.setIndex(3); pu.setSize(3); List<Role> list = session.selectList("cn.wh.mapper.RoleMapper.findListBypage", pu); for(Role r:list){ System.out.println(r.getName()); } }
Map作為參數類型,key和占位符中的名稱一致即可,如果名稱不一致那么將會把null,傳遞到占位符中。
注意:#{}占位符不能解決一下 3 類問題:
表名是動態的: Select * from #{table_name}
列名是動態的:Select #{column_name} from t_role
排序列是動態的: Select * from t_role order by #{columu}
- ${}占位符是字符串連接符,可以用來動態設置表明,列名,排序名
${}參數不能為基本數據類型,只能為自定義類型和map
<!-- 查詢所有 --> <select id="findAll" parameterType="map" resultType="cn.wh.vo.Role"> select * from ${tableName} </select>
測試:
@Test public void testSelectList(){ Map<String,String> map = new HashMap<String,String>(); map.put("tableName", "t_role"); List<Role> list = session.selectList("cn.wh.mapper.RoleMapper.findAll",map); for(Role role:list){ System.out.println(role.getId()+"----"+role.getName()); } }
作為連接符使用:
<select id="selectLike1" parameterType="map" resultType="Role"> select *from t_role where name like '${name}%'; </select>
測試:
@Test public void testLike2(){ Map<String,String> map = new HashMap<String,String>(); map.put("name", "黃"); List<Role> list = session.selectList("cn.wh.mapper.RoleMapper.selectLike1",map); for(Role r:list){ System.out.println(r.getName()); } }