该系列博客是传智播客Mybatis教学视频学习笔记,自己有补充。
一、User.xml映射文件
使用User.xml,添加根据用户名称模糊查询用户信息的SQL语句。
在User.xml中添加下面的SQL语句:
<!-- 根据用户名称模糊查询用户信息,可能返回多条
resultType:指定的就是单条记录所映射的java对象类型
${}:表示拼接SQL串,将接收到参数的内容不加任何修饰拼接在SQL中。
使用${}拼接SQL,引起SQL注入。
${value}:接收输入参数的内容,如果传入类型是简单类型,${}中只能使用value
-->
<select id="findUserByName" parameterType="java.lang.String"
resultType="cn.sunft.mybatis.po.User">
select * from user where username like '%${value}%'
</select>
二、编写测试类进行测试
/**
* 根据用户名称模糊查询用户列表
*/
@Test
public void findUserByNameTest(){
//mybatis配置文件
String resource = "SqlMapConfig.xml";
//得到配置文件,这种方式与路径耦合
//InputStream inStream = Resources.getResourceAsStream(resource);
//与路径解耦
InputStream inStream = this.getClass()
.getClassLoader().getResourceAsStream(resource);
//创建会话工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(inStream);//创建工厂
//通过工厂得到SqlSession
SqlSession sqlSession = factory.openSession();
//通过SqlSession操作数据库
//第一个参数:映射文件中statement的id,等于namespace+"."+statement的id
//第二个参数:指定和映射文件中所匹配的parameterType类型的输入参数
//sqlSession.selectOne结果是与映射文件中所匹配的resultType类型的对象
//该方法是泛型方法,不用强转,list中的user和映射文件中的resultType所指定的类型一致
List<User> list = sqlSession.selectList("test.findUserByName", "张三");
//select * from user where username like #{username}
//List<User> list = sqlSession.selectList("test.findUserByName", "%张三%");
System.out.println(list);
//释放资源
sqlSession.close();
}
测试结果(有SQL注入的危险):
DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@67205a84]
DEBUG [main] - ooo Using Connection [com.mysql.jdbc.JDBC4Connection@67205a84]
DEBUG [main] - ==> Preparing: select * from user where username like '%张三%'
DEBUG [main] - ==> Parameters:
DEBUG [main] - <== Total: 1
[cn.sunft.mybatis.po.User@1786dec2]
DEBUG [main] - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@67205a84]