一、介紹
SpringBoot有兩種方法與數據庫建立連接,一種是集成Mybatis,另一種用JdbcTemplate,本文主要討論集成Mybatis方式。
SpringBoot整合Mybatis也有兩種方式,分別為XML配置方式和注解方式,主要優勢點如下:
- XML配置方式:隔離sql和業務代碼,清晰表達sql,尤其對於較長的sql。
- 注解方式:代碼更加精簡,方便。
本文主要討論XML配置方式,后續文章討論注解方式。
二、SpringBoot整合Mybatis連接Mysql數據庫
1、添加MySQL 連接驅動依賴、SpringBoot Mybatis 依賴,完整pom文件如下:
<?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>com.example</groupId> <artifactId>demo</artifactId> <version>1.0.0</version> <packaging>jar</packaging> <name>hello</name> <description>Demo project for Spring Boot</description> <!--版本信息--> <properties> <mybatis-spring-boot>1.3.0</mybatis-spring-boot> <mysql-connector>5.1.39</mysql-connector> </properties> <!-- SpringBoot啟動父依賴 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <dependencies> <!-- Spring Boot Web 依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- MySQL 連接驅動依賴 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql-connector}</version> </dependency> <!-- SpringBoot Mybatis 依賴 --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>${mybatis-spring-boot}</version> </dependency> <!-- lombok依賴--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <!-- logback 依賴--> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </dependency> <!--Slf4j 依賴--> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> </dependency> </dependencies> </project>
注:
整合MyBatis的核心依賴MyBatis-Spring-Boot-Starter提供:
- 自動檢測現有的DataSource
- 將創建並注冊SqlSessionFactory的實例,該實例使用SqlSessionFactoryBean將該DataSource作為輸入進行傳遞
- 將創建並注冊從SqlSessionFactory中獲取的SqlSessionTemplate的實例。
- 自動掃描您的mappers,將它們鏈接到SqlSessionTemplate並將其注冊到Spring上下文,以便將它們注入到您的bean中。
因此,引入該Starter之后,只需要定義一個DataSource即可(application.properties中可配置),它會自動創建使用該DataSource的SqlSessionFactoryBean以及SqlSessionTemplate。會自動掃描你的Mappers,連接到SqlSessionTemplate,並注冊到Spring上下文中。
2、配置application.yml文件
-
配置數據庫連接信息(數據源)
spring: #數據源 datasource: url: jdbc:mysql://localhost:3306/springbootdb??useUnicode=true&characterEncoding=UTF-8 username: root password: 123 driver-class-name: com.mysql.jdbc.Driver
-
配置mybatis
#mybatis配置
mybatis:
typeAliasesPackage: com.example.mybaitsxml.dao.entity
mapperLocations: classpath:mapper/*.xml
#configLocation: classpath:/mybatis-config.xml
注:通常,若mybatis配置信息較少,只是針對基本配置無需復雜配置,則只需在application.yml文件中配置即可,否則最好配置在 mybatis-config.xml中。
3、代碼實現
demo工程文件結構:
-
controller層
@Slf4j @RestController @RequestMapping("/web") public class UserController { @Autowired private UserService userService; @GetMapping("/queryAllUsers") public List<User> queryAllUsers(){ return userService.queryAllUsers(); } }
-
service層(實現)
@Slf4j @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public List<User> queryAllUsers() { log.info("/queryAllUsers start..."); return userMapper.queryAllUsers(); } }
-
dao層
dao層分為數據庫實體類(entity)和數據庫操作mapper接口(mapper)
entity:
@Data public class User { private String name ; private String sex; private Integer age; private Integer classNo; }
mapper:
public interface UserMapper { List<User> queryAllUsers(); }
-
mapper.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.example.mybaitsxml.dao.mapper.UserMapper" > <resultMap id ="UserInfoMap" type="com.example.mybaitsxml.dao.entity.User"> <result column="name_" property="name"/> <result column="sex" property="sex"/> <result column="age" property="age"/> <result column="class_no" property="classNo"/> </resultMap> <select id = "queryAllUsers" resultMap="UserInfoMap"> select name_, sex, age, class_no from tbl_user </select> </mapper>
4、執行效果
5、Demo源碼
本文示例源碼已托管到本人Github倉庫,有需要的朋友請自行拉取。
地址:https://github.com/gavincoder/SpringBoot--Learning