做网站宁波有什么的网络公司,5年的室内设计师收入,网站建设对信息公开的作用,友链购买有效果吗本章概要
Mapper 批量映射优化插件和分页插件 PageHelper 插件机制和 PageHelper 插件介绍PageHelper 插件使用 逆向工程和 MybatisX 插件 ORM 思维介绍逆向工程逆向工程插件 MyBatisX 使用
5.1 Mapper 批量映射优化
需求
Mapper 配置文件很多时#xff0c;在全局配置文件…本章概要
Mapper 批量映射优化插件和分页插件 PageHelper 插件机制和 PageHelper 插件介绍PageHelper 插件使用 逆向工程和 MybatisX 插件 ORM 思维介绍逆向工程逆向工程插件 MyBatisX 使用
5.1 Mapper 批量映射优化
需求
Mapper 配置文件很多时在全局配置文件中一个一个注册太麻烦希望有一个办法能够一劳永逸。
配置方式
Mybatis 允许在指定 Mapper 映射文件时只指定其所在的包
mapperspackage namecom.atguigu.mapper/
/mappers此时这个包下的所有 Mapper 配置文件将被自动加载、注册比较方便。
资源创建要求
Mapper 接口和 Mapper 配置文件名称一致 Mapper 接口EmployeeMapper.javaMapper 配置文件EmployeeMapper.xml Mapper 配置文件放在 Mapper 接口所在的包内 可以将mapperxml文件放在mapper接口所在的包可以在sources下创建mapper接口包一致的文件夹结构存放mapperxml文件 5.2 插件和分页插件 PageHelper
5.2.1 插件机制和 PageHelper 插件介绍 MyBatis 对插件进行了标准化的设计并提供了一套可扩展的插件机制。插件可以在用于语句执行过程中进行拦截并允许通过自定义处理程序来拦截和修改 SQL 语句、映射语句的结果等。 具体来说MyBatis 的插件机制包括以下三个组件
Interceptor拦截器定义一个拦截方法 intercept该方法在执行 SQL 语句、执行查询、查询结果的映射时会被调用。Invocation调用实际上是对被拦截的方法的封装封装了 Object target、Method method 和 Object[] args 这三个字段。InterceptorChain拦截器链对所有的拦截器进行管理包括将所有的 Interceptor 链接成一条链并在执行 SQL 语句时按顺序调用。
插件的开发非常简单只需要实现 Interceptor 接口并使用注解 Intercepts 来标注需要拦截的对象和方法然后在 MyBatis 的配置文件中添加插件即可。
PageHelper 是 MyBatis 中比较著名的分页插件它提供了多种分页方式例如 MySQL 和 Oracle 分页方式支持多种数据库并且使用非常简单。下面就介绍一下 PageHelper 的使用方式。
https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md#如何配置数据库方言
5.2.2 PageHelper 插件使用
pom.xml 引入依赖
dependencygroupIdcom.github.pagehelper/groupIdartifactIdpagehelper/artifactIdversion5.1.11/version
/dependencymybatis-config.xml 配置分页插件 在 MyBatis 的配置文件中添加 PageHelper 的插件 pluginsplugin interceptorcom.github.pagehelper.PageInterceptorproperty namehelperDialect valuemysql//plugin
/plugins其中com.github.pagehelper.PageInterceptor 是 PageHelper 插件的名称dialect 属性用于指定数据库类型支持多种数据库
分页插件使用 在查询方法中使用分页 Test
public void testTeacherRelationshipToMulti() {OrderMapper orderMapper session.getMapper(OrderMapper.class);PageHelper.startPage(1,2);// 查询Customer对象同时将关联的Order集合查询出来ListOrder allOrders orderMapper.selectOrderList();//PageInfoOrder pageInfo new PageInfo(allOrders);System.out.println(pageInfo pageInfo);long total pageInfo.getTotal(); // 获取总记录数System.out.println(total total);int pages pageInfo.getPages(); // 获取总页数System.out.println(pages pages);int pageNum pageInfo.getPageNum(); // 获取当前页码System.out.println(pageNum pageNum);int pageSize pageInfo.getPageSize(); // 获取每页显示记录数System.out.println(pageSize pageSize);ListOrder orderList pageInfo.getList(); //获取查询页的数据集合System.out.println(alOrders orderList);orderList.forEach(System.out::println);
}5.3 逆向工程和 MybatisX 插件
5.3.1 ORM 思维介绍 ORMObject-Relational Mapping对象-关系映射是一种将数据库和面向对象编程语言中的对象之间进行转换的技术。它将对象和关系数据库的概念进行映射最后我们就可以通过方法调用进行数据库操作 最终: 让我们可以使用面向对象思维进行数据库操作
ORM 框架通常有半自动和全自动两种方式
半自动 ORM 通常需要程序员手动编写 SQL 语句或者配置文件将实体类和数据表进行映射还需要手动将查询的结果集转换成实体对象。全自动 ORM 则是将实体类和数据表进行自动映射使用 API 进行数据库操作时ORM 框架会自动执行 SQL 语句并将查询结果转换成实体对象程序员无需再手动编写 SQL 语句和转换代码。
下面是半自动和全自动 ORM 框架的区别
映射方式半自动 ORM 框架需要程序员手动指定实体类和数据表之间的映射关系通常使用 XML 文件或注解方式来指定全自动 ORM 框架则可以自动进行实体类和数据表的映射无需手动干预。查询方式半自动 ORM 框架通常需要程序员手动编写 SQL 语句并将查询结果集转换成实体对象全自动 ORM 框架可以自动组装 SQL 语句、执行查询操作并将查询结果转换成实体对象。性能由于半自动 ORM 框架需要手动编写 SQL 语句因此程序员必须对 SQL 语句和数据库的底层知识有一定的了解才能编写高效的 SQL 语句而全自动 ORM 框架通过自动优化生成的 SQL 语句来提高性能程序员无需进行优化。学习成本半自动 ORM 框架需要程序员手动编写 SQL 语句和映射配置要求程序员具备较高的数据库和 SQL 知识全自动 ORM 框架可以自动生成 SQL 语句和映射配置程序员无需了解过多的数据库和 SQL 知识。
常见的半自动 ORM 框架包括 MyBatis 等常见的全自动 ORM 框架包括 Hibernate、Spring Data JPA、MyBatis-Plus 等。
5.3.2 逆向工程 MyBatis 的逆向工程是一种自动化生成持久层代码和映射文件的工具它可以根据数据库表结构和设置的参数生成对应的实体类、Mapper.xml 文件、Mapper 接口等代码文件简化了开发者手动生成的过程。逆向工程使开发者可以快速地构建起 DAO 层并快速上手进行业务开发。 MyBatis 的逆向工程有两种方式通过 MyBatis Generator 插件实现和通过 Maven 插件实现。
无论是哪种方式逆向工程一般需要指定一些配置参数例如数据库连接 URL、用户名、密码、要生成的表名、生成的文件路径等等。 总的来说MyBatis 的逆向工程为程序员提供了一种方便快捷的方式能够快速地生成持久层代码和映射文件是半自动 ORM 思维像全自动发展的过程提高程序员的开发效率。
注意逆向工程只能生成单表crud的操作多表查询依然需要我们自己编写
5.3.3 逆向工程插件 MyBatisX 使用 MyBatisX 是一个 MyBatis 的代码生成插件可以通过简单的配置和操作快速生成 MyBatis Mapper、pojo 类和 Mapper.xml 文件。 下面是使用 MyBatisX 插件实现逆向工程的步骤
安装插件
在 IntelliJ IDEA 中打开插件市场搜索 MyBatisX 并安装。
使用 IntelliJ IDEA连接数据库
连接数据库 填写信息 展示库表 逆向工程使用 查看生成结果 逆向工程案例使用 正常使用即可自动生成单表的 crud 方法 package com.atguigu.mapper;import com.atguigu.pojo.User;/**
* description 针对表【user】的数据库操作Mapper
* createDate 2023-06-02 16:55:32
*/
public interface UserMapper {int deleteByPrimaryKey(Long id);int insert(User record);int insertSelective(User record);User selectByPrimaryKey(Long id);int updateByPrimaryKeySelective(User record);int updateByPrimaryKey(User record);}