Map和模糊查詢
1、Map的使用方法和過程
(這個方法是放棄使用User,這個適合參數特別多的東西)
這個在項目中會使用很多,特別注意這種方法
//Map的使用(萬能的Map)
int getUserById2(Map<String , Object> map);
<!--Map增加用戶的方法,這個是在dao層的xml文件
下面中的#{userid}是根據給Map傳的名稱來寫的
-->
<insert id="getUserById2" parameterType="Map">
insert into mybatis.user(id, name, pwd) values(#{userid},#{username},#{userpwd})
</insert>
SqlSession sqlSession = MabatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
//注意這個實現的方法,自己都寫錯了
Map<String , Object> map = new HashMap<String, Object>();
map.put("userid",4);
map.put("username","jinyu");
map.put("userpwd","123");
mapper.getUserById2(map);
sqlSession.commit();
sqlSession.close();
2、模糊查詢怎麼寫
//模糊查詢的使用方法
List<User> getUserLike(String value);
<!--模糊查詢的使用方法-->
<select id="getUserLike" resultType="com.kuang.pojo.User">
select * from mybatis.user where name like #{value}
</select>
<!-- select * from mybatis.user where name like "%"#{value}"%"這種方式可以節約一些東西
這個可能會造成sql注入
-->
SqlSession sqlSession = MabatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
List<User> userLike = mapper.getUserLike("李%");
for(User user : userLike)
System.out.println(user);
sqlSession.close();
xml中如果沒有寫resultType,就會報以下的錯
### Cause: org.apache.ibatis.executor.ExecutorException: A query was run and no Result Maps were found for the Mapped Statement 'com.kuang.dao.UserDao.getUserLike'. It's likely that neither a Result Type nor a Result Map was specified.
模糊查詢的一些問題:如何使用最安全,一般是Java層使用
小結:
- 所有的增刪改操作都需要提交事務!
- 接口所有的普通參數,儘量都寫上@Param參數,尤其是多個參數時,必須寫上!
- 有時候根據業務的需求,可以考慮使用map傳遞參數!
- 爲了規範操作,在SQL的配置文件中,我們儘量將Parameter參數和resultType都寫上!
思考題
模糊查詢like語句該怎麼寫?
第1種:在Java代碼中添加sql通配符。
string wildcardname = “%smi%”;
list<name> names = mapper.selectlike(wildcardname);
<select id=”selectlike”>
select * from foo where bar like #{value}
</select>
第2種:在sql語句中拼接通配符,會引起sql注入
string wildcardname = “smi”;
list<name> names = mapper.selectlike(wildcardname);
<select id=”selectlike”>
select * from foo where bar like "%"#{value}"%"
</select>