MyBatis实现根据用户名模糊查询用户
查询sql: SELECT * FROM user
WHERE username LIKE '%王%'
映射文件: 在User.xml配置文件中添加如下内容:
SELECT * FROM `user` WHERE username LIKE #{username}
测试程序: MybatisTest中添加测试方法如下:
@Test
public void testQueryUserByUsername1() throws Exception {
// 4. 创建SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
// 5. 执行SqlSession对象执行查询,获取结果User
// 查询多条数据使用selectList方法
List list = sqlSession.selectList("queryUserByUsername1", "%王%");
// 6. 打印结果
for (Object user : list) {
System.out.println(user);
}
// 7. 释放资源
sqlSession.close();
}
运行结果:
映射文件:
在User.xml配置文件中添加如下内容:
SELECT * FROM `user` WHERE username LIKE '%${value}%'
测试程序:
MybatisTest中添加测试方法如下:
@Test
public void testQueryUserByUsername2() throws Exception {
// 4. 创建SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
// 5. 执行SqlSession对象执行查询,获取结果User
// 查询多条数据使用selectList方法
List list = sqlSession.selectList("queryUserByUsername2", "王");
// 6. 打印结果
for (Object user : list) {
System.out.println(user);
}
// 7. 释放资源
sqlSession.close();
}
运行结果:
1) #{}和${}
-
#{}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换。#{}可以有效防止sql注入。
-
#{}可以接收简单类型值或pojo属性值。 如果parameterType传输单个简单类型值
-
#{}括号中可以是value或其它名称。
-
${}表示拼接sql串,通过 $ { }可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换
-
$ { }可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,${}括号中只能是value。
2) parameterType和resultType
- parameterType:指定输入参数类型,mybatis通过ognl从输入对象中获取参数值拼接在sql中。
- resultType:指定输出结果类型,mybatis将sql查询结果的一行记录数据映射为resultType指定类型的对象。如果有多条数据,则分别进行映射,并把对象放到容器List中
3) selectOne和selectList
selectOne查询一条记录,如果使用selectOne查询多条记录则抛出异常:
selectList可以查询一条或多条记录。