mybatis plus最后一课

本文介绍了如何在MyBatis Plus的SqlSessionFactory中配置并使用各种插件,包括分页插件、执行分析插件、性能分析插件和乐观锁插件。通过实例展示了分页查询的测试,详细打印了分页信息,并提供了测试代码。

在mybatisSqlsessionFactory里面注册各种插件

<!-- 插件注册 -->
		<property name="plugins">
			<list>
				<!-- 注册分页插件 -->
				<bean class="com.baomidou.mybatisplus.plugins.PaginationInterceptor"></bean>
				
				<!-- 注册执行分析插件 -->
				<bean class="com.baomidou.mybatisplus.plugins.SqlExplainInterceptor">
					<property name="stopProceed" value="true"></property>
				</bean>
				
				<!-- 注册性能分析插件 -->
				<bean class="com.baomidou.mybatisplus.plugins.PerformanceInterceptor">
					<property name="format" value="true"></property>
					<!-- <property name="maxTime" value="5"></property> -->
				</bean>
				
				<!-- 注册乐观锁插件 -->
				<bean class="com.baomidou.mybatisplus.plugins.OptimisticLockerInterceptor">
				</bean>
			
			</list>
			
		</property>

测试分页

/**
	 * 测试分页插件
	 */
	@Test
	public void testPage() {
		
		Page<Employee> page = new Page<>(1,1);
		
		List<Employee > emps = 
				employeeMapper.selectPage(page, null);
		System.out.println(emps);
		
		
		System.out.println("===============获取分页相关的一些信息======================");
		
		System.out.println("总条数:" +page.getTotal());
		System.out.println("当前页码: "+  page.getCurrent());
		System.out.println("总页码:" + page.getPages());
		System.out.println("每页显示的条数:" + page.getSize());
		System.out.println("是否有上一页: " + page.hasPrevious());
		System.out.println("是否有下一页: " + page.hasNext());
		
		//将查询的结果封装到page对象中
		page.setRecords(emps);
		
		
	}
### 使用 MyBatis-Plus 实现关系映射 #### 关系映射 在处理的关系时,假设有个 `User` 表和个 `Detail` 表,其中每个用户仅对应一条详情记录。 ```java // User.java @Data @TableName("t_user") public class User { @TableId(type = IdType.AUTO) private Long id; private String name; // 关联字段 @TableField(exist = false) private Detail detail; } // Detail.java @Data @TableName("t_detail") public class Detail { @TableId(type = IdType.AUTO) private Long id; private Long userId; // 对应用户的ID private String address; } ``` 为了查询带有详情信息的用户数据,在对应的 Mapper 中可以定义如下方法: ```java // UserMapper.java public interface UserMapper extends BaseMapper<User> { /** * 查询带有关联详情的用户列表 */ List<Map<String, Object>> selectUsersWithDetails(); } ``` 并且可以在 XML 文件中编写相应的 SQL 来完成联合查询[^1]。 对于多对多的情况,则涉及到中间表的设计。比如存在两个实体 `Student` 和 `Course`,它们之间通过张关联表 `student_course` 建立联系。 ```sql CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50), ); CREATE TABLE course ( id INT PRIMARY KEY AUTO_INCREMENT, title VARCHAR(100), ); CREATE TABLE student_course( student_id INT NOT NULL, course_id INT NOT NULL, FOREIGN KEY (student_id) REFERENCES student(id), FOREIGN KEY (course_id) REFERENCES course(id) ); ``` Java 类型表示如下: ```java // Student.java @Data @TableName("student") public class Student { @TableId(type = IdType.AUTO) private Integer id; private String name; // 集合属性用于存储多个程对象 @TableField(exist = false) private Set<Course> courses; } // Course.java @Data @TableName("course") public class Course { @TableId(type = IdType.AUTO) private Integer id; private String title; // 反向引用学生集合 @TableField(exist = false) private Set<Student> students; } ``` 当需要获取某个学生的选情况时,可以通过嵌套查询的方式实现;而要得到某门下所有的学员名单则相反。通常会借助于分页插件来优化性能并控制返回的数据量大小[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值