mybatis的分页和特殊字符处理

简介: mybatis的分页和特殊字符处理

1. 什么是分页

分页是指将大量数据按照固定大小进行划分,每次只查询一部分数据并进行展示。在数据库查询中,分页可以提高查询效率和用户体验。

1.2. MyBatis中的分页实现方式

MyBatis提供了多种实现分页的方式,其中常用的有两种:

1.2.1. 基于参数的分页

通过在Mapper接口的方法中加入相关参数来实现分页功能。常见的参数包括offset(偏移量)和limit(每页数据量)。使用这种方式,开发者需要手动计算参数,然后在SQL语句中使用LIMIT关键字来限制查询结果的数量。

示例代码:

java @Select(“SELECT * FROM users LIMIT #{offset}, #{limit}”)

List getUsers(@Param(“offset”) int offset, @Param(“limit”) int

limit);

1.2.2. 使用插件实现分页

MyBatis还支持使用插件来实现分页功能。插件可以自定义拦截器,在执行SQL前后进行一些额外的处理,比如修改查询语句、计算总记录数等。常见的分页插件有PageHelper、PaginationInterceptor等。

使用插件实现分页的好处是可以减少开发工作量,不需要手动编写分页逻辑,并且可以提供更加灵活的分页功能。

bookmapper.xml

<select id="BookListPager" resultType="com.niyin.model.Book" parameterType="java.util.Map">
  select * from t_mvc_book
  where bname like concat(concat('%',#{bname}),'%')
  </select>

bookMapper

List<Book> queryByMinMax(BookDto bookDto);

bizimpl

public List<Book> BookListPager(String bname, PageBean pageBean) {
        if (pageBean!=null&& pageBean.isPagination()){
            PageHelper.startPage(pageBean.getPage(),pageBean.getRows());
        }
       List<Book>books= bookMapper.BookListPager(bname);
        if(pageBean!=null && pageBean.isPagination()){
            PageInfo<Book> pageInfo = new PageInfo<>(books);
            pageBean.setTotal((int) pageInfo.getTotal());
        }
        return books;
    }

demo

public void text5(){
        PageBean pageBean = new PageBean();
        pageBean.setPage(1);
        pageBean.setRows(20);
        bookBiz.BookListPager("圣墟", pageBean).forEach(System.out::println);
    }

1.3. 避免SQL注入的技巧

SQL注入是一种常见的安全漏洞,攻击者通过在用户输入的数据中插入恶意SQL语句,从而执行非法的数据库操作。为了防止SQL注入,我们可以采取以下技巧:

1.3.1. 使用预编译语句

预编译语句是指在执行SQL语句之前,将SQL语句发送给数据库进行编译,然后再传入参数执行。这样可以避免直接拼接参数值到SQL语句中,从而减少了注入的可能性。

1.3.2. 参数化查询

参数化查询是将SQL语句中需要动态传入的参数使用占位符来表示,然后将参数值与SQL语句分开传递给数据库执行。这样可以确保参数值被正确地转义和处理,避免了SQL注入的风险。

示例代码:

java

@Select(“SELECT * FROM users WHERE username = #{username}”)

User getUserByUsername(@Param(“username”) String username);

二、特殊字符的正确使用方式

2.1. 什么是特殊字符

特殊字符是指在SQL语句中具有特殊含义的字符,比如’、"、%等。如果不正确处理这些特殊字符,可能会导致SQL语句解析错误或者产生安全隐患。

2.2. 特殊字符在SQL查询中的作用

特殊字符在SQL查询中有不同的作用,比如’用于表示字符串的起始和结束,%用于模糊匹配等。如果在输入的数据中包含这些特殊字符,并且没有正确处理,可能会导致查询结果不准确或者产生意外的结果。

2.3. 如何避免特殊字符引起的问题

为了避免特殊字符引起的问题,我们可以采取以下两种方式:

2.3.1. 使用CDATA区段

在编写SQL语句时,可以使用CDATA区段来将SQL语句包裹起来,这样特殊字符就不会被解析为XML的保留字符。示例代码:

<select id="queryByMinMax" resultType="com.niyin.model.Book" parameterType="java.util.Map">
  select
  <include refid="Base_Column_List" />
  from t_mvc_book
  where price &gt;#{min} and price &lt; #{max}
--   where <![CDATA[
--   price <#{max} and price > #{min}
  ]]>
  </select>

. 使用实体引用

在输入数据中包含特殊字符时,可以将这些特殊字符使用实体引用来代替。比如将<替换为<,将>替换为>等。这样可以确保特殊字符被正确地解析和处理。

示例代码:

<select id="queryByMinMax" resultType="com.niyin.model.Book" parameterType="java.util.Map">
  select
  <include refid="Base_Column_List" />
  from t_mvc_book
  where price &gt;#{min} and price &lt; #{max}
--   where <![CDATA[
--   price <#{max} and price > #{min}
  ]]>
  </select>

三、总结和展望

3.1. MyBatis的优点和不足

优点

简化了数据库操作,通过配置文件和注解可以快速实现数据访问层的开发。

提供了灵活的SQL编写方式,支持动态SQL、参数映射等功能。

可以与各种主流数据库进行集成。

不足之处

对于复杂的查询需求,需要编写较多的SQL语句,增加了开发工作量。

需要手动管理数据库连接,没有像Hibernate那样的ORM框架自动管理事务。

3.2. 未来发展趋势和应用场景

随着大数据和云计算的快速发展,数据处理的需求越来越复杂。MyBatis作为一种轻量级的ORM框架,具有简单、灵活和可定制化的特点,在各种应用场景中仍然具有广泛的使用价值。

未来的发展趋势可能包括:

进一步优化性能,提高查询效率。

支持更多的数据库类型和技术栈。

提供更多的插件和工具,方便开发者使用和扩展。

对于需要对数据库进行精细控制和自定义操作的项目,MyBatis仍然是一个不错的选择;对于对ORM框架要求较高的项目,可能会选择其他更加全面的框架如Hibernate等。

目录
相关文章
|
3月前
|
SQL XML Java
8、Mybatis-Plus 分页插件、自定义分页
这篇文章介绍了Mybatis-Plus的分页功能,包括如何配置分页插件、使用Mybatis-Plus提供的Page对象进行分页查询,以及如何在XML中自定义分页SQL。文章通过具体的代码示例和测试结果,展示了分页插件的使用和自定义分页的方法。
8、Mybatis-Plus 分页插件、自定义分页
|
5天前
|
SQL Java 数据库连接
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。本文讲解了最新版MP的使用教程,包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段等核心功能。
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
|
14天前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
1月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
54 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
2月前
|
SQL Java 数据库连接
解决mybatis-plus 拦截器不生效--分页插件不生效
本文介绍了在使用 Mybatis-Plus 进行分页查询时遇到的问题及解决方法。依赖包包括 `mybatis-plus-boot-starter`、`mybatis-plus-extension` 等,并给出了正确的分页配置和代码示例。当分页功能失效时,需将 Mybatis-Plus 版本改为 3.5.5 并正确配置拦截器。
607 6
解决mybatis-plus 拦截器不生效--分页插件不生效
|
2月前
|
SQL XML Java
springboot整合mybatis-plus及mybatis-plus分页插件的使用
这篇文章介绍了如何在Spring Boot项目中整合MyBatis-Plus及其分页插件,包括依赖引入、配置文件编写、SQL表创建、Mapper层、Service层、Controller层的创建,以及分页插件的使用和数据展示HTML页面的编写。
springboot整合mybatis-plus及mybatis-plus分页插件的使用
|
3月前
|
SQL Java 关系型数据库
MyBatis-Plus 分页魅力绽放!紧跟技术热点,带你领略数据分页的高效与便捷
【8月更文挑战第29天】在 Java 开发中,数据处理至关重要,尤其在大量数据查询与展示时,分页功能尤为重要。MyBatis-Plus 作为一款强大的持久层框架,提供了便捷高效的分页解决方案。通过封装数据库分页查询语句,开发者能轻松实现分页功能。在实际应用中,只需创建 `Page` 对象并设置页码和每页条数,再通过 `QueryWrapper` 构建查询条件,调用 `selectPage` 方法即可完成分页查询。MyBatis-Plus 不仅生成分页 SQL 语句,还自动处理参数合法性检查,并支持条件查询和排序等功能,极大地提升了系统性能和稳定性。
55 0
|
1月前
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
108 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
|
1月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
300 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
1月前
|
SQL Java 数据库连接
mybatis使用二:springboot 整合 mybatis,创建开发环境
这篇文章介绍了如何在SpringBoot项目中整合Mybatis和MybatisGenerator,包括添加依赖、配置数据源、修改启动主类、编写Java代码,以及使用Postman进行接口测试。
17 0
mybatis使用二:springboot 整合 mybatis,创建开发环境