Map和模糊查询扩展
大约 2 分钟数据库技术Mybatis
1、万能Map
实体类或者数据库中的表字段或者参数过多,考虑使用Map。
UserMapper.java接口中新增一个方法
/**
* 使用map传入参数查询用户
* @param map
* @return
*/
User getUserById2(Map<String,Object> map);
/**
* 使用map参数插入用户
* @param map 传入Map类型
* @return
*/
int addUser2(Map<String, Object> map);
UserMapper.xml文件中新增
<!--传入map类型参数查询用户-->
<select id="getUserById2" resultType="com.kuang.pojo.User" parameterType="map">
select * from user where id = #{userid} and name = #{username}
</select>
<!--使用Map传递参数插入用户。对象的属性可以提取出来。传递map的key-->
<insert id="addUser2" parameterType="map">
insert into user (id,name,pwd) values (#{userid},#{username},#{userpassword})
</insert>
测试
/**
* 使用map传参查询用户
*/
@Test
public void test0201(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
Map map = new HashMap<String, Object>();
map.put("userid",1);
map.put("username","狂神");
User user = userMapper.getUserById2(map);
sqlSession.commit();
System.out.println(user);
sqlSession.close();
}
/**
* 使用map传参插入用户
*/
@Test
public void test0301(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
HashMap<String, Object> map = new HashMap<String, Object>();
/**
* 此处map的键位mapper文件中设置的字段
*/
map.put("userid",666);
map.put("username","map传值");
map.put("userpassword","mmmmmm");
userMapper.addUser2(map);
// 提交事务
sqlSession.commit();
sqlSession.close();
}
2、参数的三种传递方式
Map
Map传递参数,直接在sql中取出key即可。
parameterType="map"
对象
对象传递参数,直接在sql中取对象的属性即可。
parameterType="具体的对象object"
基本类型
只有一个基本类型参数的情况下,可以直接在sql中取到。
parameterType="int" // 可不写
3、传递多个参数
使用Map或者注解
4、模糊查询
Java代码执行时传递通配符
<!--模糊查询-->
<select id="getUserListByLike" resultType="com.kuang.pojo.User">
select * from user where name like #{value}
</select>
测试
/**
* 模糊查询
*/
@Test
public void test0202(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> users = userMapper.getUserListByLike("%李%");
for (User user : users) {
System.out.println(user);
}
sqlSession.close();
}
结果
User{id=3, name='李四', pwd='666666'}
User{id=5, name='李五', pwd='5555555'}
Process finished with exit code 0
在sql中拼接使用通配符
<!--模糊查询-->
<select id="getUserListByLike" resultType="com.kuang.pojo.User">
select * from user where name like "%" #{value} "%"
</select>
测试
@Test
public void test0202(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> users = userMapper.getUserListByLike("李");
for (User user : users) {
System.out.println(user);
}
sqlSession.close();
}
结果
User{id=3, name='李四', pwd='666666'}
User{id=5, name='李五', pwd='5555555'}
Process finished with exit code 0
注意SQL注入
模糊查询时,需要避免SQL注入。