小编最近工作项目里面用到了 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 即可调用接口,查询数据。
即可。