《JavaEE开发的颠覆者: Spring Boot实战》系列读书笔记
Spring Boot整合Mybatis
Mybatis 初期使用比较麻烦,需要各种配置文件、实体类、Dao 层映射关联、还有一些其它配置。当然 Mybatis 也发现了这种弊端,初期开发了generator可以根据表结果自动生产实体类、配置文件和 Dao 层代码,可以减轻一部分开发量。
后来也可以使用注解了,自动管理 Dao 层和配置文件等,mybatis-spring-boot-starter 就是 Spring Boot+ Mybatis 可以完全注解不用配置文件,也可以简单配置轻松上手。
开始使用
引入依赖
-
在pom文件引入mybatis-spring-boot-starter的依赖:
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.0</version> </dependency>
引入数据库连接依赖:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.16</version> </dependency>
引入数据源
-
application.properties配置文件中引入数据源:
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://127.0.0.1:3306/XX?\ useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false spring.datasource.username=XX spring.datasource.password=XX mybatis.configuration.map-underscore-to-camel-case=true server.port=8080
springboot 会自动加载 spring.datasource.* 相关配置,数据源就会自动注入到sqlSessionFactory 中,sqlSessionFactory 会自动注入到 Mapper 中,这样就可以访问数据了
创建数据库表
-
创建实体:
public class CityInfo { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String city; public CityInfo(int id, String city) { this.id = id; this.city = city; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } }
dao层
-
数据访问,主要对sql进行操作。
public interface CityMapper { @Select("SELECT * FROM city") List<CityInfo> getAll(); @Select("SELECT * FROM city WHERE id = #{id}") CityInfo getOne(int id); @Insert("INSERT INTO city(city) VALUES(#{city})") void insert(CityInfo cityInfo); @Update("UPDATE city SET city=#{city} WHERE id =#{id}") void update(CityInfo cityInfo); @Delete("DELETE FROM city WHERE id =#{id}") void delete(int id); }
controller层
-
使用的时候把Mapper 层当作普通的类注入进入就可以了
/** * mybatis 测试增删改查 */ @RequestMapping(value = "Insert", method = RequestMethod.GET) public Result<CityInfo> mybatisInsert() throws Exception { CityInfo cityInfo = new CityInfo(1,"911"); cityMapper.insert(cityInfo); return new Result<CityInfo>(cityInfo); } @RequestMapping(value = "Query", method = RequestMethod.GET) public Result<List<CityInfo>> mybatisQuery() throws Exception { List<CityInfo> cityInfos = cityMapper.getAll(); return new Result<List<CityInfo>>(cityInfos); } @RequestMapping(value = "Update", method = RequestMethod.GET) public Result<CityInfo> mybatisUpdate() throws Exception { CityInfo cityInfo = cityMapper.getOne(3); System.out.println(cityInfo.toString()); cityInfo.setCity("深圳"); cityMapper.update(cityInfo); return new Result<CityInfo>(cityInfo); }
注意在启动类中添加对 mapper 包扫描@MapperScan(“路径”)。