这里以操作之前的learnmybatis这个数据库为例进行演示。
数据库表,如果之前已经创建了,则无需再次创建:
CREATE TABLE `learnmybatis`.`t_student` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(20) NULL,
`age` INT NULL,
`score` DOUBLE NULL,
PRIMARY KEY (`id`));
添加mybatis相关依赖
因为要使用mybatis了,所以需要添加相关的起步依赖,可以手动拷贝下面起步依赖到pom中,另外后面示例使用web来演示所以还需要添加web起步依赖
<!-- 加载mybatis整合springboot -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version> 2.1.2</version>
</dependency>
<!-- MySQL的jdbc驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- springboot 开发自动热部署 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<!-- alibaba的druid数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.20</version>
</dependency>
在pom中加入下面内容使maven将xml文件也添加到target目录下,否则在运行mybatis的时候会报找不到xml文件的错误,这里还有另一种方式,后面再介绍:
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
添加数据源相关配置
spring 2.x默认支持hikari的数据源,这是一个日语,中文是光的意思,通过名字可以体现出它非常快。这里的话,我们使用国产的druid作为数据源,druid提供了一系列的监控,方便我们查看,另外也支持一下国产。
在application.properties配置文件中添加下面内容:
#指定mapper文件的位置
mybatis.mapper-locations=classpath:com/monkey1024/mapper/*.xml
#指定bean的位置
mybatis.type-aliases-package=com.monkey1024.bean
#数据源
spring.datasource.username=root
spring.datasource.password=111111
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/learnmybatis?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#查看sql语句日志
logging.level.com.monkey1024.mapper=debug
注意上面的serverTimezone=Asia/Shanghai,这里如果写成serverTimezone=UTC或者GMT的话,在插入或更新数据的时候,日期可能会有问题,因为我们中国所在的时区是东八区。
创建Student类
下面省略了set和get方法
public class Student {
private Integer id;
private String name;
private Integer age;
private Double score;
}
创建mapper和dao接口
StudentMapper.xml
<?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.monkey1024.mapper.StudentMapper">
<!--查询多条数据-->
<select id="selectAllStudent" resultType="student">
SELECT id,name,age,score FROM t_student
</select>
</mapper>
dao接口,与之前不同的是这里需要在接口上面加上Mapper注解:
@Mapper//在dao接口上加入Mapper注解,这样springboot就可以扫描到
public interface StudentMapper {
List<Student> selectAllStudent();
}
创建service和controller
service实现类:
@Service
public class StudentServiceImpl implements StudentService{
@Autowired
private StudentMapper studentMapper;
@Override
public List<Student> selectAllStudent() {
System.out.println("测试");
return studentMapper.selectAllStudent();
}
}
controller:
@Controller
public class MybatisController {
@Autowired
private StudentService studentService;
@RequestMapping("/find")
@ResponseBody
public Object findAllStudent() {
return studentService.selectAllStudent();
}
}
之后运行spring boot启动类,在浏览器中发送请求即可。
@MapperScan注解
在上面的dao接口中,我们添加了@mapper注解,这样spring boot就可以扫描到该接口从而使用mybatis动态代理了。除了这种方式之外,可以在spring boot的启动类上添加@MapperScan注解,这样就无需再dao接口上添加@mapper注解了。
@SpringBootApplication
@MapperScan("com.monkey1024.mapper")//扫描mapper文件
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
开启事务
在spring boot中开启事务也非常简单通过下面两步即可
1.在入口类中使用注解 @EnableTransactionManagement 开启事务支持
@SpringBootApplication
@EnableTransactionManagement //开启事务支持
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
2.在访问数据库的Service方法上添加注解 @Transactional 即可
@Service
@Transactional//开启事务
public class StudentServiceImpl implements StudentService{
@Autowired
private StudentMapper studentMapper;
@Override
public List<Student> selectAllStudent() {
System.out.println("测试");
return studentMapper.selectAllStudent();
}
}
使用lombok
在之前所编写的代码中,我们写了很多bean,这里面加了很多set、get方法,这些方法冗余,但却也不可缺少。这里我们可以使用lombok包,通过该工具,就不用在bean源码中手动添加set、get方法了,除此之外equals,hashcode,toString方法也无需手动在源码中添加了。lombok会在生成的bean的class字节码中添加这些方法,在使用lombok之后,代码就清爽多了。
要使用lombok需要先添加依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
在idea中添加lombok插件,ctrl+alt+s打开设置,在plugins中搜索lombok:
插件安装完成之后,在Student类上面加上@Data注解,然后set、get等方法就可以去掉了:
import lombok.Data;
@Data
public class Student {
private Integer id;
private String name;
private Integer age;
private Double score;
}
mapper放到resources目录下
在之前的pom中我们加了让maven将xml文件也编译放到target目录下的代码,除了将mapper放到dao包下这种方式之外,还可以直接将mapper文件放到resources下。在resources下创建mappers目录,然后将mapper.xml文件放到这个目录下。
修改配置文件,指定mapper文件路径:
#指定mapper文件的位置
mybatis.mapper-locations=classpath:mappers/*.xml
删除配置
这样修改之后,之前在pom文件中的这部分代码就可以删除了:
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>