☰
mybatis进阶使用(下)
2026/10/22 13:00:27 网站建设 项目流程

补充:

1.在实际项目开发中单一实体类往往不能满足实际需求那么就会需要其他格式来存储,这样分层保住了系统的安全底线,隔离了数据库、后端和前端的变化,让各个模块可以独立演进。

DO 对应数据库,DTO 对应前后端/服务间传参,VO 对应前端页面展示

2.POJO类概念

POJO 的全称是 Plain Old Java Object(普通老式 Java 对象)。它的核心意思是:一个不依赖任何特殊框架、不继承特定基类、也不实现特定接口的普通 Java 类。它通常只包含私有属性以及对应的 getter/setter 方法,不承载业务逻辑。

3.mybatis的一级和二级缓存

mybatis的一级缓存是SQLsession级别的,二级缓存是sessionfactory级别的

一级缓存:当mybatis的同一个SQLsession在短时间内执行了两次相同的查询时mybatis不会再次连接数据库而是直接将刚才的查询结果打印,但是在两次查询之间不能有插入或者添加操作。一级缓存的意义就是执行相同操作的时候不用反复连接数据库节省资源提高运行效率。

二级缓存:就是将一级缓存的内容拿到sessionfactory里,这样用同一个sessionfactory创建的SQLsession都可以用这个缓存不用连接数据库操作了,但是提交二级缓存要在mybatis配置文件里进行相关配置,而且还要在相关mapper映射里添加二甲缓存的标签,配置完成后要等SQLsession关闭或者提交一次后一级缓存才会进入到二级缓存中。

执行顺序:一级缓存(默认开启且无法关闭) ---->二级缓存(手动配置开启) ----->数据库

当你执行 save、update、delete 时,框架会同时清理(或者使其失效)一级和二级缓存中对应的数据,防止读到脏数据

4.MBG插件

当数据库中有很多张表时逐一创建实体类,相关mapper和映射效率太低,这时候就可以使用代码反向生成器MBG插件来自动生成。

首先要在项目的pom.xml里配置相关依赖,然后在resources文件夹下创建一个新的配置文件generatorConfig.xml,设置实体类、Mapper 映射文件、Dao 接口对应位置,最后打开Idea 中maven 的视图 , Plugins → mybatis-generator → mybatis-generator:generator,双击运行即可。

3.关联查询

3.1 1-1查询

建立实体类

public class Teacher { private int id; private String name; } public class Classes { private int id; private String name; private Teacher teacher; }

相关mapper映射的配置

<select id="getClass" parameterType="int" resultMap="ClassResultMap"> select * from class c, teacher t where c.teacher_id=t.t_id and c.c_id=#{id} </select> <resultMap type="_Classes" id="ClassResultMap"> <id property="id" column="c_id"/> <result property="name" column="c_name"/> <association property="teacher" javaType="_Teacher"> <id property="id" column="t_id"/> <result property="name" column="t_name"/> </association> </resultMap>

我个人理解的流程:先有一个表对应的实体类,然后创建一个vo类来继承这个实体类并且添加我们所需要的相关属性,完成之后要在对应的mapper映射文件里配置resultmap,配置完成后再写相关功能的sql,当然也要在接口中添加相关方法。

3.2 1-n查询

相关映射文件配置:

<select id="getClass3" parameterType="int" resultMap="ClassResultMap3"> select * from class c, teacher t,student s where c.teacher_id=t.t_id and c.C_id=s.class_id and c.c_id=#{id} </select> <resultMap type="_Classes" id="ClassResultMap3"> <id property="id" column="c_id"/> <result property="name" column="c_name"/> <!-- ofType指定students集合中的对象类型 --> <collection property="students" ofType="Student"> <id property="id" column="s_id"/> <result property="name" column="s_name"/> </collection> </resultMap>

4.分页插件配置

相关的依赖配置:

<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.0.3</version> </dependency>

在mybatis的配置文件中也要进行相关配置,但要注意这个配置在文件中的位置是有要求的,不知道的可以去mybatis中文官网查询

<plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin> </plugins>

分页插件的简单使用:

在查询之前通过PageHelper.startPage(页码,条数)设置分页信息,紧跟在这条信息后面的查询语句即为分页查询。

Page<Object> objects = PageHelper.startPage(2, 5); List<Product> products = mapper1.selectByExample(productExample);

在查询完数据后,使用PageInfo对象封装查询结果,可以获取更详细的分页信息以及可以完成分页逻辑。

Page<Object> objects = PageHelper.startPage(2, 5); List<Product> products = mapper1.selectByExample(productExample); PageInfo pageInfo=new PageInfo(products);

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询