今天开源一下我为公司抽象的一套基于mybatis的持久层快速开发框架的实现。这里强调一下,目前我公司的所有项目的mysql都是用的这套框架,投入生产使用已经一年多了,公司小伙伴们也反应说这个框架的确提高了他们20%-30%的开发效率。所以分享出来,有需要的同学可以直接使用。(github地址会写在文章结尾)
使用场景:
在使用mybatis开发时我们遇到的问题:
1: 在写xml的时候特别繁琐,很多东西明明都是重复的却每个mapper要对应一个xml文件。以及mybatis自成一套的xml格式,属性等高额的学习成本
2: 具有抽象的东西难以封装,想要封装的话需要学习很多mybatis的偏门技巧,很麻烦。
3: 在互联网微服务兴起后使用mybatis显得较为繁重,因为mybatis的xml主要是为了隔离代码和sql以免代码量大了后维护困难。但是在微服务环境下很明显没有这方面顾虑,因为每个微服务项目本身代码量就不多,其核心思想是为了追求快速迭代。这种情况下mybatis的这个特性就明显有些画蛇添足了
为了更直观,本文将以单独集成到spring-boot中讲解。
1 项目搭建
1) 首先我们可以去 https://start.spring.io/ 快速构建一个spring-boot项目:

2) 导入项目:


3) application.yml配置:
spring:
application:
name: mybatis_demo
datasource:
platform: mysql
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/${spring.application.name}?useUnicode=true&useSSL=false
username: root
password: zhbyQMUP,/.
mybatis:
mapper-locations: classpath:mybatis/mapper/*.xml
4) 这里写一个demo测试一下:
DO持久模型:
package com.mybatiss.demo.pojo.model;
import lombok.Data;
/***
* @author Eric Email :
* @version 创建时间:2018/10/16
* DemoDO
*/
@Data
public class DemoDO{
/**
* 主键
*/
private String id;
/***
* 姓名
*/
private String name;
/***
* 年龄
*/
private Integer age;
}
mapper.xml文件:

Mapper.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.mybatiss.demo.dao.DemoMapper">
<select id="selectAll" resultType="com.mybatiss.demo.pojo.model.DemoDO">
SELECT * FROM demo;
</select>
</mapper>

业务层:
package com.mybatiss.demo.service;
import com.mybatiss.demo.pojo.model.DemoDO;
import java.util.List;
/***
* @author Eric Email :
* @version 创建时间:2018/10/16
* DemoService
*/
public interface DemoService {
/***
* 获取所有
* @return DemoDO
*/
List<DemoDO> allDemo();
}
package com.mybatiss.demo.service.impl;
import com.mybatiss.demo.dao.DemoMapper;
import com.mybatiss.demo.pojo.model.DemoDO;
import com.mybatiss.demo.service.DemoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/***
* @author Eric Email :
* @version 创建时间:2018/10/16
* DemoServiceImpl
*/
@Service
public class DemoServiceImpl implements DemoService{
@Autowired
DemoMapper demoMapper;
@Override
public List<DemoDO> allDemo(){
return demoMapper.selectAll();
}
}
控制层:
package com.mybatiss.demo.rest;
import com.mybatiss.demo.pojo.model.DemoDO;
import com.mybatiss.demo.service.DemoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/***
* @author Eric Email :
* @version 创建时间:2018/10/16
* DemoController
*/
@RestController
@RequestMapping("/demo")
public class DemoController{
@Autowired
DemoService demoService;
@GetMapping("/all-demo-do")
public List<DemoDO> allDemoDO(){
return demoService.allDemo();
}
}
运行Application.java:

发送get请求 http://localhost:8080/demo/all-demo-do

2实现持久层的快速开发框架
到这里我们已经把基本的mybatis搭建起来了。接下来就是简化整个开发过程,实现快速持久层开发。
1 将所有sql移到代码中,xml中只是引用
例如:

对应mapper

2 封装常用功能(这里只展示部分,详情请见github)




从api上就能看出很多常用功能都得到了很大的简化常用业务覆盖了70%以上。单查询,队列查询,Tree结构操作等全都进行了封装,拆箱即用。有需要的同学可以拿来使用,有问题可以联系我。
另外,后续我会在github上持续更新api,详细写一下个别特殊高度封装的方法的使用方式。
3 github
分享企业级Mybatis快速开发框架,减少80%xml编写,封装常用功能,提升开发效率20%-30%。适用于Spring Boot集成,适合微服务场景。

830

被折叠的 条评论
为什么被折叠?



