Mybatis Map和模糊查询

在前面增删改查的代码例子里程序并不是很完美。比如修改用户信息有时可能只是修改一个密码。
但是在我们的代码必须要传递一整个用户类给mybatis去实现更新功能。

在mybatis里使用map

定义一个新add接口,传递参数为map<String,Object> 这样的定义map几乎可以说是万能的

package dao;

import pojo.User;

import java.util.List;
import java.util.Map;

public interface UserDao {
    List<User>  getUserList();
    //根据ID查询用户
    User getUserByid(int id);
    void addUser(User user);
    void addUser2(Map<String,Object> map);
    void updateUser(User user);
    void deleteByid(int id);
}

配置mapper文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace对应接口名字-->
<mapper namespace="dao.UserDao">
    <!--select id 对应方法名字-->
    <select id="getUserList" resultType="pojo.User">
    select * from mybatis.user
    </select>

    <select id="getUserByid" resultType="pojo.User" parameterType="int">
        select * from mybatis.user where id=#{id}
    </select>

    <select id="addUser" parameterType="pojo.User">
        <!--由于对象有设置标准的getset方法 可以直接使用属性表示-->
        insert into mybatis.user(id,name,pwd) values (#{id},#{name},#{pwd});
    </select>

    <insert id="addUser2" parameterType="map">
        <!--values的字段只要和map中key的字段相同即可-->
        insert into mybatis.user(id,name,pwd) values (#{id},#{username},#{password});
    </insert>

    <select id="updateUser" parameterType="pojo.User">
        update mybatis.user set name=#{name},pwd=#{pwd} where id=#{id};
    </select>

    <select id="deleteByid" parameterType="int" >
        delete from mybatis.user where id=#{id};
    </select>
</mapper>

主程序

import dao.UserDao;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import pojo.User;
import utiles.MybatisUtiles;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Mytest {
    @Test
    public void addTest2(){
        SqlSession sqlSession = MybatisUtiles.getSqlSession();
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        Map<String,Object> map=new HashMap<String, Object>();
        map.put("id",5);
        map.put("username","map哥");
        map.put("password","123456");
        mapper.addUser2(map);
        sqlSession.commit();
        sqlSession.close();
    }
}


通过这种map手段,假设我们需要实现一个只修改密码的功能。那么我们就构建map只给密码的key就可以了。不需要鸟其他的属性。十分灵活。
当然map的手段如果在大型项目维护会十分困难。需要谨慎使用

模糊查询推荐写法

在配置文件里对参数两边加%% 这样可以防止sql注入
如:

posted @ 2021-04-05 11:19  一个经常掉线的人  阅读(104)  评论(0)    收藏  举报