mybatis的增强工具 —— Mybatis Plus
MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window) 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
我们在 mybatis和spring整合(基于xml) 的基础上进行改造。
Mybatis Plus快速入门
① 添加mybatis plus 依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.3.2</version>
</dependency>
注意版本的对应匹配。
1)配置 MapperScan
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 指定扫描的包名
如果扫描多个包,那么每个包中间使用半角逗号分隔 -->
<property name="basePackage" value="com.harvey.mapper"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
2)调整 SqlSessionFactory 为 MyBatis-Plus 的 SqlSessionFactory
<!-- 配置sqlSessionFactory,SqlSessionFactoryBean是用来产生sqlSessionFactory的 -->
<bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
<!-- 加载mybatis的全局配置文件,放在classpath下的mybatis文件夹中 -->
<property name="configLocation" value="classpath:mybatis-configuration.xml"/>
<!-- 加载数据源,使用上面配置好的数据源 -->
<property name="dataSource" ref="dataSource"/>
</bean>
通常来说,一般的简单工程,通过以上配置即可正常使用 MyBatis-Plus。
② 使用注解配置实体类
/**
* @TableName 表名注解,标识实体类对应的表
*/
@TableName(value = "user")
public class UserInfo {
/*主键注解, 数据库自增*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/*字段注解(非主键)*/
@TableField(value = "username", exist = true)
private String username;
@TableField(value = "sex")
private String sex;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", sex=" + sex
+ "]";
}
}
更多的注解参考:https://baomidou.com/pages/223848/#tablename
③ 自定义mapper xml的位置
在配置sqlSessionFactory bean时,指定xml的位置:
<!-- 配置sqlSessionFactory,SqlSessionFactoryBean是用来产生sqlSessionFactory的 -->
<bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
<!-- 加载mybatis的全局配置文件,放在classpath下的mybatis文件夹中 -->
<property name="configLocation" value="classpath:mybatis-configuration.xml"/>
<!--自定义xml文件位置,此处为resources下的mapper目录-->
<property name="mapperLocations" value="mappers/*.xml"/>
<!-- 加载数据源,使用上面配置好的数据源 -->
<property name="dataSource" ref="dataSource"/>
</bean>
④ 测试代码
@RunWith(SpringJUnit4ClassRunner.class)//表示整合JUnit4进行测试
@ContextConfiguration(locations={"classpath:applicationContext.xml"})//加载spring配置文件
public class BaseJunit4Test {
@Autowired
private UserInfoMapper userInfoMapper;
@Test
public void testSelectUserById() throws Exception {
UserInfo user = userInfoMapper.selectUserById(1);
System.out.println(user);
}
}
Mybatis Plus使用分页插件
<!-- 配置sqlSessionFactory,SqlSessionFactoryBean是用来产生sqlSessionFactory的 -->
<bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
<!-- 加载mybatis的全局配置文件,放在classpath下的mybatis文件夹中 -->
<property name="configLocation" value="classpath:mybatis-configuration.xml"/>
<!--自定义xml文件位置-->
<property name="mapperLocations" value="mappers/*.xml"/>
<!-- 加载数据源,使用上面配置好的数据源 -->
<property name="dataSource" ref="dataSource"/>
<property name="plugins">
<list>
<!-- 分页配置旧版本 3.4以下-->
<bean class="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor">
<!--开启 count 的 join 优化,只针对部分 left join-->
<property name="countSqlParser" ref="countSqlBean"/>
<!-- 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false-->
<property name="overflow" value="true"/>
<!--设置最大单页限制数量,默认 500 条,-1 不受限制-->
<property name="limit" value="100"/>
</bean>
<!-- 新版本 3.4以上 MybatisPlusInterceptor-->
<!--<bean id="mybatisPlusInterceptor" class="com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor">
<property name="interceptors">
<list>
<bean class="com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor">
<property name="dbType" value="MYSQL"/>
</bean>
</list>
</property>
</bean>-->
</list>
</property>
</bean>
<bean id="countSqlBean"
class="com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize">
<property name="optimizeJoin" value="true"/>
</bean>
测试代码:
@Test
public void testSelectUserPage() throws Exception {
Page page = new Page<>();
page.setCurrent(1);
page.setSize(2);
IPage<UserInfo> firstPageInfo = userInfoMapper.selectPage(page, null);
System.out.println("count: " + firstPageInfo.getTotal());
System.out.println("first page user list: " + firstPageInfo.getRecords());
Page page1 = new Page<>();
page1.setCurrent(2);
page1.setSize(2);
IPage<UserInfo> secondPageInfo = userInfoMapper.selectPage(page1, null);
System.out.println("count: " + secondPageInfo.getTotal());
System.out.println("second page user list: " + secondPageInfo.getRecords());
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!