- 万能的Map
- UserMapper(or UserDao).java
- UserMapper.xml
- UserMapperTest.java
- 模糊查询两种方式
- Sql注入
-
Map可以传递任意个参数,对象必须传递所有参数
-
对个参数用Map 或者 注解
-
Map结构 : 键值对
-
用途:假如我们的实体类,或者数据库中的表,字段或者参数过多,我们就考虑使用Map
-
Map传递参数,直接在参数中取出Key即可,Key和数据库中的属性名可以不一样
//万能的Map int addUser1(MapUserMapper.xmlmap);
- #{userid} 中的Userid可以和数据库中表的id名字不一样,因为这里是键
INSERT INTO mybatis.`user`(id,NAME,pwd) VALUES(#{userid},#{userName},#{password})
UserMapperTest.java
-
map.put("userid", 5); map.put("userName", "byby");这里可以只给数据库传递两个参数值
@Test
public void adduser1(){
//获取sqlsession
SqlSession sqlSession = MyBatisUtils.getSqlSession();
//拿到UserMapper实例
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//给实例中放入测试的数值
Map map = new HashMap();
map.put("userid", 5);
map.put("userName", "byby");
// map.put("password", "2124");
//调用测试方法
userMapper.addUser1(map);
//增删改,提交事务
sqlSession.commit();
//关闭sqlsession
sqlSession.close();
}
测试结果:
- 没有传的参数值,密码为Null
模糊查询有两种方法:
-
Java代码执行的时候,传递通配符 % %
UserMapper.java
//模糊查询 ListgetUserLike(String value); UserMapper.xml
select * from mybatis.user where name like #{value} UserMapperTest.java
@Test public void getUserLike(){ //获取SqlSession SqlSession sqlSession = MyBatisUtils.getSqlSession(); //拿到UserMapper实例 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); //给实例中传入测试数值 ListuserList = userMapper.getUserLike("%张%"); //打印出userList for (User user : userList) { System.out.println(user); } //关闭SqlSession sqlSession.close(); } -
在sql拼接中使用通配符
UserMapper.java
//模糊查询 List
getUserLike(String value); UserMapper.xml
UserMapperTest.java
//给实例中传入测试数值 List
userList = userMapper.getUserLike("张");
sql注入:
select * from mybatis.user where id = ?
select * from mybaits.user where id = 1 or 1=1
原本用户之需要传递一个id参数,但是用户在向后端传递的时候拼接了一个 or 1=1,这个时候用户就可以查询出所有用户的信息,这样就造成sql注入
所以,在进行查询的时候,都会通过#{value}来写死,使得传递到后端的参数不能进行拼接
模糊查询的时候也尽量在Mapper.xml中写死传递进来的参数,不要进行拼接,模糊匹配在测试代码中进行匹配



