当前位置: 首页 > news >正文

MyBatis——配置优化和分页插件

MyBatis配置优化

MyBatis配置文件的元素结构如下:

configuration(配置)

        properties(属性)

        settings(设置)

        typeAliases(类型别名)

        plugins(插件)

        environments(环境配置)

                environment(环境变量)

                       transactionManager(事务管理器)

                        dataSource(数据源)

        mappers(映射器)

配置别名(typealiases)

类型别名是为 Java 类型命名一个短的名字。它只和XML配置有关, 只用来减少类完全限定名的多余部分。

<typeAliases><typeAlias type="net.onest.entity.User" alias="User"/>
</typeAliases>

也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean

<typeAliases><package name="net.onest.entity"/>
</typeAliases>
数据源配置(db.properties)

将数据库配置单独方法一个Java属性文件中

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
username=root
password=

使用properties元素在mybatis.xml配置文件中引用Java属性文件中的配置 

 

 <!-- 引用properties文件 --><properties resource="db.properties"></properties><environments default="development"><environment id="development">……        </environment></environments>

 

 在dataSource中采用${name}的形式引用属性文件中定义的参数

 <dataSource type="POOLED"><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource>
MyBatis中$和#的异同

可以获取对象中的属性值,${userName}和#{userName}相同

#可以防止SQL注入,解析时会把所有使用#的地方变成?占位符,再设置参数的值

$在解析时,会直接使用传入的参数作为字符串直接填充到SQL语句中,会导致SQL注入

#会把传入的参数使用引号括起来,$则不会

$一般用传入数据库相关参数,如数据库表名、字段名 

 MyBatis分页插件

MyBatis中要想实现分页功能,需要使用limit子句实现分页的SQL语句,比较麻烦

PageHelper插件能方便解决MyBatis分页问题,其GitHub源码地址:

https://github.com/pagehelper/Mybatis-PageHelper

PageHelper使用方法

引入PageHelper的jar包

在MyBatis的XML配置文件中配置拦截器插件

调用PageHelper类的方法实现分页功能

在MyBatis的XML配置文件中配置拦截器插件

MyBatis允许使用插件来拦截方法的调用,如update、query、commit、rollback等方法

实现插件时,只需定义类实现MyBatis的Interceptor接口,并指定想要拦截的方法名即可

<plugins><!-- com.github.pagehelper为PageHelper类所在包名 --><plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>

调用PageHelper类的方法实现分页功能

PageHelper.startPage(2,3);
List<User> users = userMapper.findAllUsers();

调用PageHelper的startPage静态方法之后,跟在后面的第一个查询方法将进行分页查询

分页查询时,查询方法返回的List对象实际上是Page<E>类型,如果需要取得分页信息,需要将结果强制类型转换为Page<E>类型

Page<User> userPages = (Page<User>)users;
System.out.println(userPages.getTotal());//总条数
System.out.println(userPages.getPageNum());//当前页数
System.out.println(userPages.getPageSize());//每页条数
System.out.println(userPages.getPages());//总页数

 

 

 

 

http://www.lryc.cn/news/334272.html

相关文章:

  • [蓝桥杯 2013 省 B] 翻硬币
  • [BT]BUUCTF刷题第13天(4.1)
  • 特别详细的Spring Cloud 系列教程1:服务注册中心Eureka的启动
  • Day108:代码审计-PHP模型开发篇MVC层动态调试未授权脆弱鉴权未引用错误逻辑
  • 重读Java设计模式: 桥接模式详解
  • 新规解读 | 被网信办豁免数据出境申报义务的企业,还需要做什么?
  • fakebook-攻防世界
  • mynet开源库
  • 深度挖掘商品信息,jd.item_get API助您呈现商品全面规格参数
  • A Random Walk Based Anonymous Peer-to-Peer
  • php代码执行计划任务dos实现方式和宝塔面板实现方式
  • 千万不要错过这6款能让你快速写作成长的宝藏软件…… #学习方法#AI写作
  • TypeScript系列之-理解TypeScript类型系统画图讲解
  • 制造业智能化一体式I/O模块的集成与应用案例分享
  • 《云原生安全攻防》-- 云原生应用风险分析
  • 抖音-引流私域转化模式1.0现场视频,从抖音源源不断把人加到私域,
  • 外包干了6天,技术明显进步
  • 上传应用程序到苹果应用商店的工具和要
  • vue:判断当前日期时间是否在一个日期时间区间里
  • 浏览器禁用cookie后session还能用吗?
  • C语言——顺序表
  • CentOS7安装Docker及禅道
  • 如何在社交媒体中使用增强现实来提高客户参与度?
  • Autodesk AutoCAD 2025 (macOS, Windows) - 自动计算机辅助设计软件
  • 买卖股票的最佳时机III
  • fastlio2 保存每帧的点云和每帧的里程计为单独的文件做后端回环优化和手动回环优化
  • 【线段树】【前缀和】:1687从仓库到码头运输箱子
  • [AIGC] 实现博客平台的推荐排行榜
  • C++利用键值对计算某一个数对应的最值及其索引位置
  • conda修改默认安装python版本为指定版本