SpringBoot --- 集成 mybatis-plus 完整步骤

郗奇玮
2023-12-01

小编最近工作项目里面用到了 mybatis-plus,比自己手写sql,方便太多。
比较之前项目的 mybatis,也快捷不少。这里总结了一下,springboot 集成 mybatis-plus,
完整步骤。
1,添加 mybatis-plus-extension依赖。

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-extension</artifactId>
    <version>3.2.0</version>
</dependency>

2,application.properties 文件中,新增数据库连接信息。

spring.datasource.url=jdbc:oracle:thin:@127.0.0.1:1521/SECRETARYDB
spring.datasource.username=admin
spring.datasource.password=123456
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver

3,编写mybatisplus数据源及包扫描配置文件,这一步也是集成mybatis的核心步骤,
通过配置文件,将用户从原始的jdbc访问中解放出来,用户只需要定义操作的sql语句,
无须关注底层的jdbc操作,通过面向对象的方式进行持久化操作。
mybatis中常见的对象有 SqlSessionFactory和SqlSession。

@Configuration
@MapperScan(basePackages = MybatisPlusDataSourceConfig.PACKAGE_DAO, sqlSessionFactoryRef = "sqlSessionFactory")
public class MybatisPlusDataSourceConfig {

    // dao层所在路径
    static final String PACKAGE_DAO = "com.cmbchina.mapper";
    // *mapper.xml文件所在路径
    static final String MAPPER_LOCATION = "classpath:mybatis/mapper/*.xml";

    //Mybatis 插件扩展
    @Autowired
    private MybatisPlusConfig plusConfig;

    @Bean("dataSource")
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource dataSource() {
        DruidDataSource druidDataSource = new DruidDataSource();
        return druidDataSource;
    }

    @Bean("sqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource") DataSource dataSource) throws Exception {
        final MybatisSqlSessionFactoryBean sessionFactoryBean = new MybatisSqlSessionFactoryBean();
        sessionFactoryBean.setDataSource(dataSource);
        
        MybatisConfiguration configuration = new MybatisConfiguration();
        configuration.setJdbcTypeForNull(JdbcType.NULL);
        configuration.setMapUnderscoreToCamelCase(true);
        configuration.setCacheEnabled(false);
        configuration.setLogImpl(StdOutImpl.class);
        
        sessionFactoryBean.setPlugins(new Interceptor[]{plusConfig.paginationInterceptor()}); //Mybatis 插件扩展
        sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources(MybatisPlusDataSourceConfig.MAPPER_LOCATION));
        return sessionFactoryBean.getObject();
    }
}
@EnableTransactionManagement
@Configuration
public class MybatisPlusConfig {

    /**
     * 注册分页插件
     * @return
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }

    /**
     * 注册乐观锁插件
     * 取出记录时,获取当前version
     * 更新时,带上这个version
     * 执行更新时, set version = yourVersion+1 where version = yourVersion
     * 如果version不对,就更新失败
     * @return
     */
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }
	
    /**
     * 注册主键生成策略
     * @return
     */
    @Bean
    public OracleKeyGenerator oracleKeyGenerator(){
        return new OracleKeyGenerator();
    }
}

4,编写entity,实现Serializable接口(方便序列化和反序列化),
声明 serialVersionUID(保证反序列化不会出现异常)
COXDBO.BILL_CONFIG 是查询数据所有数据库下具体表格。

@TableName("COXDBO.BILL_CONFIG")
public class SwitchConfig implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId(value = "OWNER_APP", type = IdType.INPUT)
    private String ownerApp;
    @TableId(value = "CONFIG_KEY", type = IdType.INPUT)
    private String configKey;
    private String configValue;
    private String remark;
    private String runtimeConfig;
    //todo... get set 方法省略。。。
}

5,编写mapper层,继承BaseMapper。

@Mapper
@Repository
public interface MyBatisPlusMapper extends BaseMapper<SwitchConfig> {}

6,编写xml文件。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cmbchina.mapper.MyBatisPlusMapper">
</mapper>

7,编写service层,继承IService。

public interface MyBatisPlusService extends IService<SwitchConfig> {}

8,编写serviceImpl层,实现service层,继承ServiceImpl。

@Service
@Transactional(rollbackFor = Exception.class)
public class MyBatisPlusServiceImpl extends ServiceImpl<MyBatisPlusMapper, SwitchConfig> implements MyBatisPlusService {}

9,编写controller层。

@Api(tags = "测试mybatisplus接口 API")
@RestController
@RequestMapping("/mybatisTest")
public class MyBatisPlusController {

    @Resource
    private MyBatisPlusService myBatisPlusService;

    @ApiOperation("获取列表数据")
    @PostMapping("/getList")
    public List<SwitchConfig> getById() {
        /**
         * QueryWrapper 包含基本的sql 查询语句,解放了程序员的基础繁琐任务
         * 如果需要分页查询,可以使用 Page IPage 配合使用
         * Page<EventCurrent> page = new Page<EventCurrent>();
         *         page.setCurrent(start);
         *         page.setSize(limit);
         *         
         * IPage<EventCurrent> iPage = eventCurrentService.page(page,wrapper);
         */
        QueryWrapper<SwitchConfig> wrapper = new QueryWrapper<SwitchConfig>();
        List<SwitchConfig> list = myBatisPlusService.list(wrapper);
        return list;
    }
}

10,测试结果,浏览器输入: http://localhost:8080/mybatisTest/getList 即可调用接口,查询数据。
即可。

 类似资料: