spring-boot使用mybatis如何配置xml

使用插件生成Mapper文件

IDEA使用mybatis-generator

配置数据源

application.properties

1
2
3
4
5
# 配置数据库信息
spring.datasource.url=jdbc:mysql://localhost:3306/test1
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

情景1 目录结构如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
src
├── main
│   ├── java
│   │   └── ai
│   │       └── ynt
│   │           └── learn
│   │               ├── Application.java
│   │               ├── controller
│   │               │   └── UserController.java
│   │               ├── mapper
│   │               │   ├── UserMapper.java
│   │               │   ├── UserMapper.xml
│   │               │   └── base
│   │               │       ├── UserBaseMapper.java
│   │               │       └── UserBaseMapper.xml
│   │               └── model
│   │                   └── User.java
│   └── resources
│       └── application.properties

操作一

需要在Application.java中添加Mapper扫描路径@MapperScan("ai.ynt.learn.mapper")

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
package ai.ynt.learn;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;


@ComponentScan(basePackages = {"ai.ynt.learn.controller"}) // 配置扫描的包,就可以加载多个控制器
@MapperScan("ai.ynt.learn.mapper")
@EnableAutoConfiguration
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

操作二

上面的代码结构是xml文件和mapper文件在同一个文件夹.即xml在源文件夹,没有在资源文件夹

maven在打包时不会打包源文件夹里面的非代码文件,所以要在打包时指定哪些是资源文件

修改pom.xmlsrc/main/java目录下的所有xml文件打包

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
    </build>
打包结果一
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.
├── META-INF
│   ├── MANIFEST.MF
│   ├── maven
│   │   └── ai.ynt.learn
│   │       └── test2
│   │           ├── pom.properties
│   │           └── pom.xml
│   ├── spring-configuration-metadata.json
│   └── test2.kotlin_module
├── ai
│   └── ynt
│       └── learn
│           ├── Application.class
│           ├── controller
│           │   └── UserController.class
│           ├── mapper
│           │   ├── UserMapper.class
│           │   ├── UserMapper.xml
│           │   └── base
│           │       ├── UserBaseMapper.class
│           │       └── UserBaseMapper.xml
│           └── model
│               ├── User$1.class
│               ├── User$Builder.class
│               ├── User$ConditionBuilder.class
│               ├── User$QueryBuilder.class
│               ├── User$UpdateBuilder.class
│               └── User.class
└── application.properties

如果不执行操作二打包结果如下,是没有xml文件的,程序找不到xml就会报错.

打包结果二
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
.
├── META-INF
│   ├── MANIFEST.MF
│   ├── maven
│   │   └── ai.ynt.learn
│   │       └── test2
│   │           ├── pom.properties
│   │           └── pom.xml
│   ├── spring-configuration-metadata.json
│   └── test2.kotlin_module
├── ai
│   └── ynt
│       └── learn
│           ├── Application.class
│           ├── controller
│           │   └── UserController.class
│           ├── mapper
│           │   ├── UserMapper.class
│           │   └── base
│           │       └── UserBaseMapper.class
│           └── model
│               ├── User$1.class
│               ├── User$Builder.class
│               ├── User$ConditionBuilder.class
│               ├── User$QueryBuilder.class
│               ├── User$UpdateBuilder.class
│               └── User.class
└── application.properties

情景二 目录结构如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
src
└── main
    ├── java
    │   └── ai
    │       └── ynt
    │           └── learn
    │               ├── Application.java
    │               ├── controller
    │               │   └── UserController.java
    │               ├── mapper
    │               │   ├── UserMapper.java
    │               │   └── base
    │               │       └── UserBaseMapper.java
    │               └── model
    │                   └── User.java
    └── resources
        ├── ai
        │   └── ynt
        │       └── learn
        │           └── mapper
        │               ├── UserMapper.xml
        │               └── base
        │                   └── UserBaseMapper.xml
        └── application.properties

执行操作一

xml文件在resources目录,与mapper是分开的,且路径是形同的都是在ai.ynt.learn.mapper目录下

maven在打包时会把resources里面的文件一起打包,所以不用执行操作二

打包结果和打包结果二一样

情景三 目录结构如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
src
└── main
    ├── java
    │   └── ai
    │       └── ynt
    │           └── learn
    │               ├── Application.java
    │               ├── controller
    │               │   └── UserController.java
    │               ├── mapper
    │               │   ├── UserMapper.java
    │               │   └── base
    │               │       └── UserBaseMapper.java
    │               └── model
    │                   └── User.java
    └── resources
        ├── application.properties
        └── mapper
            ├── UserMapper.xml
            └── base
                └── UserBaseMapper.xml

执行操作一

xml文件在resources目录,与mapper是分开的,但是他们的路径不相同

一个在ai.ynt.learn.mapper目录下,xml在mapper目录下

maven在打包时会把resources里面的文件一起打包,所以不用执行操作二

打包结果三
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
.
├── META-INF
│   ├── MANIFEST.MF
│   ├── maven
│   │   └── ai.ynt.learn
│   │       └── test2
│   │           ├── pom.properties
│   │           └── pom.xml
│   ├── spring-configuration-metadata.json
│   └── test2.kotlin_module
├── ai
│   └── ynt
│       └── learn
│           ├── Application.class
│           ├── controller
│           │   └── UserController.class
│           ├── mapper
│           │   ├── UserMapper.class
│           │   └── base
│           │       └── UserBaseMapper.class
│           └── model
│               ├── User$1.class
│               ├── User$Builder.class
│               ├── User$ConditionBuilder.class
│               ├── User$QueryBuilder.class
│               ├── User$UpdateBuilder.class
│               └── User.class
├── application.properties
└── mapper
    ├── UserMapper.xml
    └── base
        └── UserBaseMapper.xml

操作三

从打包结果看,xml和mapper没在同一文件夹下,因此程序无法找到mapper对应的xml在什么地方,所以我们需要加个配置,让程序知道xml文件在哪里.

增加application.properties

1
mybatis.mapper-locations=classpath:mapper/**/*.xml

即告诉mybatis,mapper对应的xml就在classpath下面的mapper找

updatedupdated2020-03-262020-03-26