MyBatis是一款优秀的持久层框架,原名叫作iBaits,2010年由ApacheSoftwareFoundation迁移到Google Code并改名为MyBatis,2013年又迁移到GitHub上。MyBatis支持定制化SQL、存储过程以及高级映射。MyBatis几乎避免了所有的JDBC代码手动设置参数以及获取结果集。在传统的SSM框架整合中,使用MyBatis需要大量的XML配置,而在Spring Boot中,MyBatis官方提供了一套自动化配置方案,可以做到MyBatis开箱即用。
但是官方的配置方案中绑定SQL语句是用Mapper对应的xml文件,那么接下来我就介绍纯注解的自动化配置方案,具体使用步骤如下。
一路点next即可,工程名和路径自己设置。
<dependency>
<groupId>org.mybatis.spring.bootgroupId>
<artifactId>mybatis-spring-boot-starterartifactId>
<version>1.3.1version>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druidartifactId>
<version>1.2.1version>
dependency>
<dependency>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
<version>1.2.17version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<scope>runtimescope>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<optional>trueoptional>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
执行以下语句建立person表:
DROP TABLE IF EXISTS `person`;
CREATE TABLE `person` (
`pid` int(20) NOT NULL AUTO_INCREMENT,
`pname` varchar(50) DEFAULT NULL,
`addr` varchar(50) DEFAULT NULL,
`gender` int(2) DEFAULT NULL,
`birth` date DEFAULT NULL,
PRIMARY KEY (`pid`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
执行以下查询来插入数据:
INSERT INTO `person` VALUES ('1', '李四', '广州', '1', '2020-06-02');
INSERT INTO `person` VALUES ('2', 'zhangsan', 'shanghai', '1', '2022-12-11');
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {
private int pid;
private String pname;
private String addr;
private int gender;
private Date birth;
public Person(String pname, String addr, int gender, Date birth) {
this.pname = pname;
this.addr = addr;
this.gender = gender;
this.birth = birth;
}
}
//springboot会自动扫描@Mapper注解的接口
@Mapper
public interface PersonMapper {
@Select("select * from person")
public List<Person> getPersons();
@Select("select * from person t where t.pid = #{id}")
public Person getPersonById(int id);
@Options(useGeneratedKeys =true, keyProperty = "pid")
@Insert("insert into person(pid, pname, addr,gender, birth)" +
" values(#{pid}, #{pname}, #{addr},#{gender}, #{birth})")
public void insert(Person person);
@Delete("delete 11from person where pid = #{id}")
public void delete(int id);
}
(1)配置数据源
在resources文件夹下新建application.yml文件,代码如下(注意修改password为自己的代码,还有修改houkydb为你自己的数据库名称。
spring:
datasource:
username: root
#注意修改为自己的数据库密码 --> 123456
password: 123456
#注意修改为自己的数据库名称 --> houkydb
url: jdbc:mysql://localhost:3306/houkydb?serverTimezone=UTC&userUnicode=true&characterEncoding=utf-8
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
filters: stat,wall,log4j
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
#设置编码
server:
servlet:
encoding:
force: true
(2)把数据源dataSource注入到spring中
在config包下建立DruidConfig包,代码如下:
@Configuration
public class DruidConfig {
//读取刚刚配置的数据源的信息到方法dataSource()的返回值 --> DruidDataSource()中,实现属性注入。
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource dataSource(){
return new DruidDataSource();
}
}
@RestController
public class TestController {
//这里用@Autowired运行后也可以输出同样的结果,但是编译时会有红线报错,强迫症的我选择使用@Resource
@Resource
PersonMapper personMapper;
@RequestMapping("selectById")
public List<Person> selectById() {
return personMapper.getPersons();
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fOy0q38l-1606569518307)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201128211449322.png)]
项目的整体结构如下:
总结:springboot中整合mybatis是非常简单的,一共有以下四步:
1、导入依赖、建表,创建对应的实体类。
2、创建对应的Mapper接口。
3、配置数据源,并注入到spring中。
4、在控制层中调用皆可。