Map和模糊查詢的使用

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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章