关于mybatis-plus配置xml映射路径不生效的问题
一、前言
今天要启动一个新项目,准备搭建基础结构,想来mybatis-plus是肯定要上的,springboot也是异常方便,心里想着先搞好结构然后就咔咔把一通拦截器之类直接cv就结束了,没想到又被自己坑了,关键这个坑上次配项目的时候就踩过,于是这篇随笔就这样诞生了,下次就可以给我的猪脑子提个醒,省的再浪费时间找问题了。
二、mybatis-plus配置
既然写都写了,那干脆就来一个完整配置记录好了。
首先在创建的项目pom文件中添加maven依赖,如下:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
然后在application配置文件填上连接mysql的配置项,大致如下:
spring.datasource.password=
spring.datasource.username=
spring.datasource.url=
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
在不添加额外连接池的配置时,spring直接默认使用hikariCP,内置了一套默认配置,hikari好东西,大家都懂。
再然后可以在启动添加@MapperScan并且填上扫描dao接口的包路径,当然也可以不写,在后面从创建的每一个dao接口都加上@Mapper效果也是一样的,就是每个都加太麻烦,人嘛当然是能懒则懒,关键懒的也不失优雅就行。
接下来准备一些测试dao接口,以及表和实体类:
public class TestTable {
@TableId//主键名为id是可省略
private Integer id;
private String name;
private Integer age;
//省略getter,setter
}
@Mapper //配置@MapperScan后可省略
public interface TestDao extends BaseMapper<TestTable> {
TestTable getTest();
}
配置到这里已经可以正常使用mybatis-plus封装好的各种基础查询以及QueryWrapper 功能了。
三、自定义sql,xml
针对业务比较复杂的B端系统来说,上面的简单查询是肯定不够用的,那么这时候是难免要使用xml格式的sql配置了,洋洋洒洒上百行一句的sql肯定是不可能用@Select注解一类的去书写的。
<?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.example.demo.dao.TestDao">
<select id="getTest" reslutType="com.example.demo.domain.TestTable">
<!-- 此处省略sql -->
</select>
</mapper>
按照常规书写xml就行行了,最关键的配置是下面一项:
#具体路径是项目实际路径确定,下面展示的是starer包默认配置
mybatis-plus.mapper-locations=classpath*:/mapper/*/*.xml
最坑的地方来了:在idea中创建resources下面的文件夹时,千万不能“偷懒”,像创建类一样用xx.xx.xx的方式快速创建包结构。
就这样一个结构,如果你直接mybatis.mapper建立的文件夹,那你完了。这跟先创建mybatis,再创建mapper用肉眼凡胎是指定看不出什么区别了。
但是“幸运”的是,项目启动以后,在你调用sql的时候,系统会亲切的用一个Invalid bound statement (not found) 问候你。
呵呵,接下来就是我下午的百思不得其解了,当然下午有点头疼状态不佳,到了晚上突然就顿悟了想起来上次搭建项目就是这么被玩的。
就这样把,哎,希望能帮到有缘人~~(其实是提醒自己下次别再呵呵。。。)