使用插件生成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.xml
将src/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找