暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

框架学习系列 mybatis 第五篇 mybatis入门程序之需求开发2根据用户名模糊查询

凯哥java 2021-09-24
233

本节主要内容

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向数据库中插入数据》


文章转载自凯哥java,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论