录💡
- 🕊万能的map
- 🕊插入完整数据
- 🕊测试结果
- 🕊修改某用户的某字段
- 🕊测试
- 🕊模糊查询
-
- 🕊#和$的区别
🕊万能的map
假设我们的实体类,或者数据库中的表、字段或者参数过多,我们应当考虑使用Map!
以下同样是使用和上一篇博客相同的数据表user
我们知道在update数据库一条数据时,每次都要传入一个完整的用户,但是如果使用万能的Map,就不需要。使用这个还有一个好处那就是我不需要知道数据库里有什么,我只要去查我想要的对应的字段,以下为代码用例,所用的文件结构等都在这篇博客:来啦(本系列都是同一个项目,同一张表)
🕊插入完整数据
先用插入一行数据为例,可以看到其实和不用没什么很大的区别,较大的区别就是插入时values()里的值${},括号里的值可以自己定义,不用和User对象属性名id name pwd一样,可自定义
UserDao.java
int addUser2(Map<String, Object> map);
UserMapper.xml
<insert id="addUser2" parameterType="map" >
insert into mybatis.user (id,name ,pwd) values (#{userId}, #{userName}, #{Password})
</insert>
Test.java
@Test
public void test5(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
Map<String, Object> map = new HashMap<>();
map.put("userId", 4);
map.put("userName", "aa");
map.put("Password", "444444");
mapper.addUser2(map);
sqlSession.commit();
sqlSession.close();
}
🕊测试结果
🕊修改某用户的某字段
假设现在要修改某用户的密码,就用刚刚插入的id=4的数据为例,修改密码为333333
UserDao.java
int updateUser2(Map<String, Object> map);
UserMapper.xml
<update id="updateUser2" parameterType="map">
update mybatis.user set pwd=#{Password} where id=#{userId}
</update>
Test.java
@Test
public void test6(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
Map<String, Object> map = new HashMap<>();
map.put("userId", 4);
map.put("Password", "333333");
mapper.updateUser2(map);
sqlSession.commit();
sqlSession.close();
}
🕊测试
在这里如果要更新数据不使用map对应的映射sql语句(只是一个例子):
<update id="updateUser" parameterType="com.xmonster.pojo.User">
update mybatis.user set name=#{name}, pwd=#{pwd} where id=#{id}
</update>
那么你就要将所有的参数都写出来,因为你传过去的是一个对象User,那么你肯定要把这个对象的所有的属性都写上,不然会报错
🕊模糊查询
🕊SQL注入
🔻拼接SQL,了解一下SQL注入
SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
🕊例子
查找名字中带有字母’o’的人名
第一种:Java代码执行的时候,传递通配符%
UserDao.java
List<User> getUserLike(String value);
UserMapper.xml
<select id="getUserLike" resultType="com.xmonster.pojo.User">
select * from mybatis.user where name like #{value};
</select>
Test.java
@Test
public void test7(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
List<User> userLike = mapper.getUserLike("%o%");
for (User user : userLike) {
System.out.println(user);
}
sqlSession.close();
}
第二种:sql拼接中使用通配符
在UserMapper.xml中写死
<select id="getUserLike" resultType="com.xmonster.pojo.User">
select *
from mybatis.user where name like "%"#{value}"%";
</select>
这样在调用的时候就直接可以传递一个字母’o’过去就行了
🕊测试
🕊#和$的区别
1、#{}将传入的数据都被当成一个字符串,会对自动传入的数据加一个双引号,看看例子:
order by #{id}
order by "1"
2、${}将传入的数据直接显示生成在sql中,看看例子:
order by ${id}
order by 1
3、#能够很大程度防止sql注入,$方式则不行,综上,一般情况下,一般采用#不采用 $
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)