依赖导入
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>MyBatisSpringBoot</artifactId>
<version>1.0-SNAPSHOT</version>
<!--父工程-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<!--Java版本-->
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--spring boot 核心库-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--测试模块-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<!--spring boot测试模块-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--连接MySQL-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.3</version>
</dependency>
<!--mybatis包-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
</dependencies>
</project>
创建一个示例数据库
create database `mybatis`;
use `mybatis`;
create table `user`(
`id` int(20) not null,
`name` varchar(30) default null,
`pwd` varchar(30) default null,
primary key (`id`)
)engine = innodb default charset = utf8;
insert into `user`(`id`, `name`, `pwd`)
values ('1', '张三', '123456'),('2', '李四', '123456'),('3', '王五', '123456');
使用application.yaml,整个应用都可以配置在这里
mybatis:
mapper-locations: classpath:mapper/*.xml #mapper文件存放地址
configuration:
map-underscore-to-camel-case: true #自动映射
spring:
datasource: #数据库路径
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF-8
username: root
password: 123456
com.mysql.jdbc.Driver
;高于6.0的使用com.mysql.cj.jdbc.Driver
,同时需要在url中指明时区根据配置,在resources目录下新建一个名为mapper的文件夹,mybatis的映射文件都放在这个目录下,会被系统自动扫描到。
用于MyBatis映射,MyBatis可以将从数据库取到的数据自动填充到实体对象中。
它们的关系:
Java概念 | 数据库概念 |
---|---|
类 | 表 |
属性 | 字段/列 |
对象 | 记录/行 |
映射文件的命名规则
对应数据库的user
表,添加User
实体类
//根据自己需求使用lombok,一些公司要求不得使用lombok,而我认为lombok简化了开发
@Data
public class User {
private int id;
private String name;
private String pwd;
}
用于获取所有用户信息
public interface UserMapper {
List<User> getUserList();
}
UserMapper.xml
<?xml version="1.0" encoding="UTF8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper">
<select id="getUserList" resultType="com.example.pojo.User">
select * from mybatis.user
</select>
</mapper>
创建spring boot主入口,定义一个Java类,我命名为MainApplication。配置好后,无需再配置tomcat等,启动该方法,就表示启动了整个项目。
@MapperScan("com.example.mapper")
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
SpringApplication.run(MainApplication.class, args);
}
}
dao层的每一个接口变成实现类,要在每个接口类上加上@Mapper注解,比较麻烦,这里用到了MapperScan,顾名思义,就是用作扫描mapper使用,在启动类上添加@MapperScan注解指定扫描的包,该包下的所有接口在编译之后都会生成相应的实现类。
@SpringBootTest注解是SpringBoot自1.4.0版本开始引入的一个用于测试的注解,像本示例,因为用到了自动注入,所以执行测试代码前需要启动整个项目程序,因此需要使用如下注解启动整个项目。(固定写法,其中@SpringBootTest的参数是项目启动入口对象)
@SpringBootTest(classes = MainApplication.class)
@RunWith(SpringRunner.class)
测试代码:
@SpringBootTest(classes = MainApplication.class)
@RunWith(SpringRunner.class)
public class Test {
@Autowired
private UserMapper userMapper;
@org.junit.Test
public void Test(){
List<User> userList = userMapper.getUserList();
for (User user : userList) {
System.out.println(user);
}
}
}
测试正常:
User{id=1, name='张三', pwd='123456'}
User{id=2, name='李四', pwd='123456'}
User{id=3, name='王五', pwd='123456'}
整体结构: