MyBati 框架下的模糊查询
引言:之前有一篇博客,是JDBC方式下实现的模糊查询,地址:https://blog.****.net/qq_36654606/article/details/86631569
最近学习 MyBati 框架,也有关于模糊查询的部分,这里做一篇笔记,对两者做一些比较,加深印象,顺带复习模糊查询思路
Mybatis 中文版网站:http://www.mybatis.org/mybatis-3/zh/index.html
一、使用 MyBati 框架步骤
-
导入相关 Jar 包
- 使用 MyBati 框架本身需要的 jar 包(核心包 + 依赖包)
- 数据库驱动,Juint 等其他 jar 包
- 导入到根目录下lib文件
- 将这个 lib 文件添加到项目的Lib中
-
配置全局配置文件(可以从官方文件中找到标准模板)
- 固定文件头
- 配置 mybatis 环境信息(可以使用 db.properties 方式)
- 配置别名(路径写法:xx.xx.xx 而非 xx/xx/xx)
- 配置映射文件接口(类似Dao,仅写方法)
-
配置映射文件(类似DaoImp,写接口的实现)
- 固定文件头(可以从官方文件中找到标准模板)
- 空间名为映射文件接口局路径(路径写法:xx.xx.xx 而非 xx/xx/xx)
-
在全局配置文件中配置映射文件
- 配置映射文件地址(路径写法:xx.xx.xx 而非 xx/xx/xx)
- 要求被配置的映射文件和映射文件接口名字一致
-
编写测试类
- 读取全局配置文件路径
- 创建 SqlSessionFactory 会话工厂,通过新建的 SqlSessionFactoryBuilder().build() 方法
- 创建 SqlSession 对象,通过 SqlSessionFactory 会话工厂的 openSession() 方法
- 调用 SqlSession 对象中的增删改查方法,并传入映射文件中的SQL对象的 id,parameterType
- 根据需求处理映射文件中 SQL 返回的结果
二、模糊查询介绍
1. 前言
- 在一中,主要是关于如果使用 MyBati 框架进行数据库操作,需要的一些前提准备
- 在二中,主要是对 SQL 查询思路做分析
2. 关于模糊查询
- 正如字面意思,无法确定查询条件的查询称为模糊查询。
即在 SQL 查询语句中,条件语句会随时变化。 - 因此考虑对 SQL 语句来拼接实现模糊查询效果。
即首先定义初始 SQL 语句默认的查询对象,然后通过判断是否需要对基础 SQL 语句加入筛选查询的条件 -
难点:
- 如何拼接 SQL
- 如何判断是否有新增加的筛选条件
三、MyBati 框架下模糊查询写法
1. 针对二中模糊查询思想的实现
-
如何拼接 SQL:
- 简而言之,就是若干个 and x=x 的形式
- 提前写好可能出现的 and x=x,当需要这一部分时候取出拼接即可
- 这里通过 if 语法判断,如果需要这个部分,就执行拼接
-
如何判断是否增加了新的筛选条件:
- 以查询用户为例,基础查询为全部用户,筛选条件可以有姓名,性别,学号等
- 那么,在调用这个 SQL 查询的时候,总归需要传送过来这些参数才能实现拼接
- 那么,就就可能传入的参数进行判断,如果在 SQL 的传入类型参数中发现了这个参数,则拼接对应的 SQL 语句,否则对应的 SQL 语句则不生效(通过 If 语句判断是否传入了这个参数)
2. 代码组成部分
- 测试类
- Mapper.java 接口(MyBati 框架中用法,类似 J2EE 中 Dao 接口)
- Mapper.xml 映射文件(MyBati 框架中用法,类似 J2EE 中 DaoImp 实现类)
四、代码具体实现(使用IDEA)
1. 文件目录结构
- 如图
2. Mapper包(同一对象的映射文件与接口名需要保持一致)
- UserMapper.java 接口
- UserMapper.xml 映射文件
3. 测试类
-
一张图片放不下…
-
这是第二张…
-
@After 和 @Before
- 是 AOP 思想(面向切面编程)
- 对会重复出现的部分,提取出来,抽取为 @After 和 @Before,减少代码量
4. 数据库测试数据
- 如图
5. 测试结果
- 当筛选条件为性别为 " 1 " 的对象
- 当筛选条件为姓名中包含 " 陈 " 字的对象
五、总结
1. 模糊查询思想
- 事先根据可能出现的筛选条件,写出待拼接的 SQL 语句,并使用 if 语句进行判定,等待拼接
- 对筛选条件进行判定,出现筛选条件则将对应的 if 语句,则将 if 语句内 SQL 取出,与基础的 SQL 进行拼接
2. Mybatis语法下的模糊查询
- 使用 MyBati 框架需要事先准备好一些 Jar 包,对应的配置文件等
- MyBati 框架下使用 Mapper.java ,Mapper.xml 而非 Dao,DaoImp(实际含义相同)
- MyBati 框架下对于 SQL 拼接可以使用 < where > 框架,比较方便
- 逻辑思想与 J2EE 下的查询思想类似,变化在于对 SQL 的拼接处理,使用 MyBati 框架后有较为方便的语法格式
六、代码分享
-
项目本身和sql文件可以在我的资源中找到,网址:https://download.****.net/download/qq_36654606/10960295
-
项目写时候使用的是工具:
- JDK 1.7
- Tomcat 7.0
- Navicat 10.0
- IDEA 2017