🥳🥳Welcome Huihui's Code World ! !🥳🥳
接下来看看由辉辉所写的关于Mybatis的相关操作吧
目录
🥳🥳Welcome Huihui's Code World ! !🥳🥳
一.Mybatis分页
1. Mybatis自带分页
2.插件分页
二.特殊字符的操作
1.使用CDATA区间
2.实体引用
三.结果集的处理
其实Mybatis本身是有分页的功能的,但是我们还是需要重写其中的分页,这是因为Mybatis的分页功能很弱,它是基于内存的分页(查出所有记录再按偏移量offset和边界limit取结果),在大数据量的情况下这样的分页基本上是没有用的
一.Mybatis分页
1. Mybatis自带分页
//BookMapper.xml <select id="selectPage" parameterType="map" resultType="com.wh.model.Book"> SELECT * FROM t_mvc_book LIMIT #{offset}, #{limit} </select>
//BookMapper List<Book> selectPage(Map map);
//BookBiz List<Book> selectPage(Map map);
//BookBizImpl @Override public List<Book> selectPage(Map map) { return bookMapper.selectPage(map); }
@Test public void selectPage() { Map map=new HashMap(); map.put("bname","%圣墟%"); map.put("offset",10); map.put("limit",10); bookBiz.selectPage(map).forEach(System.out::println); }
结果
上面我们也说了,这样的代码会使得分页效率低下,我们可以用到插件,这样可以使得分页的效率更高
2.插件分页
首先将依赖导入pom.xml
<!--******************************github分页插件*******************************--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.1.2</version> </dependency>
Mybatis.cfg.xml配置拦截器(注意要符合dtd约束!!)
<plugins> <!-- 配置分页插件PageHelper, 4.0.0以后的版本支持自动识别使用的数据库 --> <plugin interceptor="com.github.pagehelper.PageInterceptor"> </plugin> </plugins>
BookMapper.xml
<select id="listPager" resultType="com.wh.model.Book" parameterType="java.lang.String"> select * from t_mvc_book where bname like concat(concat('%',#{bname}),'%') </select>
之后的操作跟上面是一样的,我们现在直接来看结果吧
二.特殊字符的操作
在 Mybatis 中,特殊字符是指在 SQL 语句中使用的具有特殊含义的字符。例如,单引号(')用于表示字符串,双引号(")用于表示标识符或关键字,反斜杠(\)用于转义特殊字符等,但特殊字符有时会引发一些问题...我们可以来看一下到底会引起什么问题
BookMapper.xml
<select id="test" resultType="com.wh.model.Book" parameterType="java.util.Map"> select * from t_mvc_book where bname like concat(concat('%',#{bname}),'%') and price < #{max} </select>
测试之后便可得到结果
可以看到,这里是有告诉你出现了错误的,在这里我们有两种方式进行解决
1.使用CDATA区间
<select id="test" resultType="com.wh.model.Book" parameterType="java.util.Map"> select * from t_mvc_book where bname like concat(concat('%',#{bname}),'%') <![CDATA[ and price < #{max}]]> </select>
2.实体引用
实体引用是指在 XML 文档中,对于某个标记,如果该标记的值中包含一个实体名称,那么这个实体名称就应该用实体引用的方式来表示。实体引用的格式为
&entityName;
,其中&
符号表示实体引用的开始,entityName
表示实体名称。例如,<
表示小于号<
,>
表示大于号>
等,大家有需要的也可以去网上自行查找相关的实体引用<select id="test" resultType="com.wh.model.Book" parameterType="java.util.Map"> select * from t_mvc_book where bname like concat(concat('%',#{bname}),'%') and price < #{max} </select>
三.结果集的处理
在正式开发中,结果集的处理,常常会用一个专门的类来存放
在 Java 开发中,VO 和 DTO 都是数据传输对象
VO(View Object)是视图层传输的对象,主要用于展示层,它将页面或组件的所有数据封装起来
DTO(Data Transfer Object)是服务层传输的对象,主要用于业务逻辑层和表示层之间,它只包含需要传递的数据,不包含业务逻辑