mybatis的增强工具 —— Mybatis Plus

官方文档:https://baomidou.com/

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());
}

 

posted @ 2022-03-20 09:51  残城碎梦  阅读(416)  评论(0编辑  收藏  举报