本节主要内容
1:根据上节课中提出的需求完成②:根据用户名模糊查询${}的使用
2:测试代码实现
3:总结&下节预告
本文是《凯哥陪你学系列-框架学习之mybatis框架学习》中第五篇 mybatis入门程序之需求开发2根据用户名模糊查询.
声明:本文系凯哥Java(www.kaigejava.com)原创(微信id:kaigejava)。转载请注明出处
一:根据用户名模糊查询分析
1.1:使用sql语句模糊查询出用户名是张三的sql语句怎么写?
| SELECT * FROM USER WHERE username LIKE '%张三%' |
查询结果:

那么在mybatis怎么使用?
思考
1:查询传入的是string类型的。那么parameterType应该怎么写?
2:mybatis中怎么使用%%并且原文解析?是使用#{}还是使用其他的呢?
3:既然是模糊查询,查询出的是多条数据,是列表。那么resultType由应该怎么写呢?
解答:
1:回忆上节所学的。parameteType:输入参数的Java类型。可以是基本类型、对象类型、map类型等。既然是java类型的。那么String对应java类型完整怎么写呢?
java.lang.String
2:使用${}进行处理
3:再次回忆上节课。resultType:输出结果所映射的java类型(也就是单条结果所以对应的java类型)
单条结果数据的数据类型。这里单条数据类型是pojo.user所以对应的类型应该是pojo.user了。
根据以上分析,我们可以在userMapper.xml文件中得到如下配置:
如果想用#{}写的话:
测试代码中:

userMapper.xml中:

在代码中写入%%不是很好。所以优化后,使用${}

说明:
${}:表示一个sql的连接符。如果java中 +作为连接符使用一样 连接前后语句的
${value}:里面的value表示输入参数的名称
如果该参数是简单类型的,那么${}里面的参数名称必须是value
${}:这种写法存在sql注入的风险。因为是连接符作用,其中数据原样输出的
所以需要慎用!!!!
但是在一些场景下,必须使用${}这种写法。
比如:排序的是,需要动态传入排序对应列名的。所以需要使用${}来原样输出。不过多解释.
| <!-- 根据用户名查询用户列表 --> <!-- ${}:表示一个sql的连接符。如果java中 +作为连接符使用一样 连接前后语句的--> <!-- ${value}:里面的value表示输入参数的名称 如果该参数是简单类型的,那么${}里面的参数名称必须是value --> <!-- ${}:这种写法存在sql注入的风险。因为是连接符作用,其中数据原样输出的 所以需要慎用!!!! 但是在一些场景下,必须使用${}这种写法。 比如:排序的是,需要动态传入排序对应列名的。所以需要使用${}来原样输出 --> <select id="findUserByUserName" parameterType="java.lang.String" resultType="com.kaigejava.mybatis.pojo.User"> SELECT * FROM USER WHERE username LIKE '%${value}%' </select> |
二:测试代码:

唯一不同的就是查询返回的是list的时候使用的是selectList
完整代码:
| @Test public void findUsersByNameTest() throws Exception{ //读取配置文件 //全局配置文件的路径 String resource = "SqlMapConfig.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); //创建SqlSessionFactory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //创建SqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); //调用SqlSession的增删改查方法 //第一个参数:表示statement的唯一标示 //List<User> list = sqlSession.selectList("test.findUserByUserName1", "%张三%"); List<User> list = sqlSession.selectList("test.findUserByUserName", "小明"); System.out.println(list); //关闭资源 sqlSession.close(); } |
执行结果:

如果想要查看打印出的sql语句。需要添加log4j日志。
1:添加jar

2:在config文件夹下添加log4j.properties文件。
内容如下:

| # Global logging configuration log4j.rootLogger=DEBUG, stdout # Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n |
重新执行查看控制台输入语句:

三:总结&下节预告
通过本文学习,我们需要掌握的:
1:${}的使用。
${}的作用是什么?在什么请求下需要使用
${}为什么要慎用!!
2:log4j的使用
下节预告:
现在我们已经完成了根据id精确查找、根据用户名进行模糊查找。接下来我们要学习的是,向数据库中添加数据。那么在向数据库插入数据需要注意些什么呢?欢迎学习下一篇:《框架学习系列 mybatis 第6篇 mybatis入门程序之需求开发3向数据库中插入数据》




