• pom.xml

    <dependencies>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.2.0</version>
    </dependency>
    <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    </dependency>
    <!-- https://mvnrepository.com/artifact/p6spy/p6spy -->
    <dependency>
    <groupId>p6spy</groupId>
    <artifactId>p6spy</artifactId>
    <version>3.8.0</version>
    </dependency>
    <dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
    </dependency>

    <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.49</version>
    <scope>test</scope>
    </dependency>
    <!-- for testing -->
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
    </dependency>
    </dependencies>
  • application.yml

    spring:
    datasource:
    driver-class-name: com.p6spy.engine.spy.P6SpyDriver
    url: jdbc:p6spy:h2:tcp://192.168.180.115:19200/~/mem/test
    username: root
    password: test
  • Mapper及注入器

    public class CustomizeSuperMapperSqlInjector extends DefaultSqlInjector {

    /**
    * 如果只需增加方法,保留MP自带方法
    * 可以super.getMethodList() 再add
    * @return
    */
    @Override
    public List<AbstractMethod> getMethodList(Class<?> mapperClass) {
    List<AbstractMethod> methodList = super.getMethodList(mapperClass);
    methodList.add(new FindOne());
    return methodList;
    }
    }

    public interface MySuperMapper<T> extends Mapper {

    public T findOne(Object id);

    }

    public interface UserMapper extends MySuperMapper<User> {

    }
  • 配置类

    @Configuration
    @MapperScan("com.mp.basemapper.mapper")
    public class MybatisPlusConfig {

    @Bean
    public CustomizeSuperMapperSqlInjector customizeSuperMapperSqlInjector(){
    return new CustomizeSuperMapperSqlInjector();
    }

    }
  • 实体类

    @Data
    @Accessors(chain = true)
    public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;

    private Integer version;

    private Integer deleted;

    private Timestamp createTime;
    }
     
  • 方法

    public class FindOne extends AbstractMethod {

    @Override
    public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
    /* 执行 SQL ,动态 SQL 参考类 SqlMethod */
    String sql = "select * from " + tableInfo.getTableName()
    + " where " + tableInfo.getKeyColumn() + "=#{" + tableInfo.getKeyProperty() + "}";
    /* mapper 接口方法名一致 */
    String method = "findOne";
    SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);
    return addSelectMappedStatementForTable(mapperClass, method, sqlSource, tableInfo);
    }
    }
  • 测试类

    @SpringBootTest
    class BasemapperApplicationTests {

    @Autowired
    UserMapper userMapper;

    @Test
    public void test() {
    User user = userMapper.findOne(1L);
    System.out.println(user);
    }

    }
  • 测试结果

    2019-10-31 11:59:30.159  INFO 828 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
    Consume Time:4 ms 2019-10-31 11:59:30
    Execute SQL:select * from user where id=1

最新文章

  1. onethink和thinkphp3.2学习
  2. 一些有用的HTML5 pattern属性
  3. C++学习基础五之函数参数——形参
  4. DataGridView导出Excel
  5. 【M14】明智运用异常规范
  6. UIAlertController 自定义输入框及KVO监听
  7. jquery如何设置html众标签中的值
  8. DOS、Mac 和 Unix 文件格式[转]
  9. 利用 vue-cli 构建一个 Vue 项目
  10. layui 的学习
  11. Confluence 6 修改日志文件的大小数量和级别
  12. Alpha 冲刺 (9/10)
  13. 【译】第38节---EF6-基于代码的配置
  14. 终于把joomla 的 protostar 模版的菜单,从垂直改到水平了
  15. 设置 SSH 通过密钥登录
  16. Android涉及到的网址都记录在这把~~~~
  17. 微服务架构之spring cloud turbine
  18. 大型网站的 HTTPS 实践(一)—— HTTPS 协议和原理(转)
  19. CSRF攻击的应对之道
  20. JAVA FILE.renameTo跨文件系统移动文件失败

热门文章

  1. 先森林后树木:Elasticsearch各版本升级核心内容必看
  2. 88.CSS---Grid 网格布局教程
  3. Ocelot自定义管道中间件
  4. lnmp环境搭设
  5. SpringCloud-动态配置变化监控-获取变化(支持Config、Nacos)
  6. How to Get What You Want 如何得到你想要的
  7. STM32SPI连续读写多个字节会产生时间间隔
  8. Oracle数据库提权(低权限提升至dba)
  9. php 安装vld扩展
  10. c++11::std::is_same/decay