MyBatis 是一款優秀的持久層框架,支持定製化 SQL、存儲過程以及高級映射。它採用面向對象編程的方式對數據庫進行 CRUD 的操做,使程序中對關係數據庫的操做更方便簡單。它支持 XML 描述符配置文件和註解兩種方式執行 SQL 語句。「簡單靈活」是它在對象關係映射工具上的最大優點。php
過去使用 MyBatis 開發,須要各類配置文件、實體類、Dao 層映射關聯、還有一大推其它配置。通過進行不斷的優化後,終於他來了,mybatis-spring-boot-starter
能夠作到無需配置只用註解開發,也可使用簡單的配置輕鬆上手。 固然兩種方式都須要在 POM 文件引入mybatis-spring-boot-starter
:java
<!-- mybaits -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
複製代碼
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for t_user
-- ----------------------------
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
`id` int(8) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`user_name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '用戶姓名',
`user_sex` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '用戶性別',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of t_user
-- ----------------------------
BEGIN;
INSERT INTO `t_user` VALUES (1, '劉備', '男');
INSERT INTO `t_user` VALUES (2, '孫尚香', '女');
INSERT INTO `t_user` VALUES (3, '周瑜', '男');
INSERT INTO `t_user` VALUES (4, '小喬', '女');
INSERT INTO `t_user` VALUES (5, '諸葛亮', '男');
INSERT INTO `t_user` VALUES (6, '黃月英', '女');
INSERT INTO `t_user` VALUES (7, '關羽', '男');
INSERT INTO `t_user` VALUES (8, '張飛', '男');
INSERT INTO `t_user` VALUES (9, '趙雲', '男');
INSERT INTO `t_user` VALUES (10, '黃總', '男');
INSERT INTO `t_user` VALUES (11, '曹操', '男');
INSERT INTO `t_user` VALUES (12, '司馬懿', '男');
INSERT INTO `t_user` VALUES (13, '貂蟬', '女');
INSERT INTO `t_user` VALUES (14, '呂布', '男');
INSERT INTO `t_user` VALUES (15, '馬超', '男');
INSERT INTO `t_user` VALUES (16, '魏延', '男');
INSERT INTO `t_user` VALUES (17, '孟獲', '男');
INSERT INTO `t_user` VALUES (18, '大喬', '女');
INSERT INTO `t_user` VALUES (19, '劉嬋', '男');
INSERT INTO `t_user` VALUES (20, '姜維', '男');
INSERT INTO `t_user` VALUES (21, '廖化', '男');
INSERT INTO `t_user` VALUES (22, '關平', '男');
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;
複製代碼
public class UserEntity {
private Long id;
private String userName;
private String userSex;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserSex() {
return userSex;
}
public void setUserSex(String userSex) {
this.userSex = userSex;
}
}
複製代碼
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- 熱部署模塊 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <!-- 這個須要爲 true 熱部署纔有效 -->
</dependency>
<!-- mysql 數據庫驅動. -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- mybaits -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
</dependencies>
複製代碼
#datasource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/db_test?useUnicode=true&characterEncoding=UTF-8&useSSL=true
spring.datasource.username=root
spring.datasource.password=root
複製代碼
在啓動類中添加對 mapper 包掃描@MapperScanmysql
@SpringBootApplication
@MapperScan("cn.zwqh.springboot.dao")
public class SpringBootMybatisApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootMybatisApplication.class, args);
}
}
複製代碼
或者直接在 Mapper 類上面添加註解@Mapper,建議使用上面那種,否則每一個 mapper 加個註解也挺麻煩的git
public interface UserDao {
//使用註解方式
/** * 獲取全部用戶 * @return */
@Select("select * from t_user")
@Results({
@Result(property = "userName",column = "user_name"),
@Result(property = "userSex",column = "user_sex")
})
List<UserEntity> getAll2();
/** * 根據id獲取用戶 * @param id * @return */
@Select("select * from t_user where id=#{id}")
@Results({
@Result(property = "userName",column = "user_name"),
@Result(property = "userSex",column = "user_sex")
})
List<UserEntity> getOne2(Long id);
/** * 新增用戶 * @param user */
@Insert("insert into t_user (user_name,user_sex) values(#{userName},#{userSex})")
void insertUser2(UserEntity user);
/** * 修改用戶 * @param user */
@Update("update t_user set user_name=#{userName},user_sex=#{userSex} where id=#{id}")
void updateUser2(UserEntity user);
/** * 刪除用戶 * @param id */
@Delete("delete from t_user where id=#{id}")
void deleteUser2(Long id);
}
複製代碼
註解: @Select 是查詢類的註解,全部的查詢均使用這個 @Result 修飾返回的結果集,關聯實體類屬性和數據庫字段一一對應,若是實體類屬性和數據庫屬性名保持一致,就不須要這個屬性來修飾。 @Insert 插入數據庫使用,直接傳入實體類會自動解析屬性到對應的值 @Update 負責修改,也能夠直接傳入對象 @delete 負責刪除github
UserControllerweb
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserDao userDao;
//使用註解方式
/** * 獲取全部用戶 * @return */
@RequestMapping("/getAll2")
public List<UserEntity> getAll2(){
return userDao.getAll2();
}
/** * 根據id獲取用戶 * @return */
@RequestMapping("/getOne2")
public List<UserEntity> getOne2(Long id){
return userDao.getOne2(id);
}
/** * 新增用戶 * @param user * @return */
@RequestMapping("/insertUser2")
public String insertUser2(UserEntity user) {
userDao.insertUser2(user);
return "insert success";
}
/** * 修改用戶 * @param user * @return */
@RequestMapping("/updateUser2")
public String updateUser2(UserEntity user) {
userDao.updateUser2(user);
return "update success";
}
/** * 刪除用戶 * @param user * @return */
@RequestMapping("/deleteUser2")
public String deleteUser2(Long id) {
userDao.deleteUser2(id);
return "delete success";
}
}
複製代碼
啓動項目後能夠經過瀏覽器訪問 http://127.0.0.1:8080/user/getOne2?id=1
進行測試,其餘雷同。也能夠編寫單元測試進行測試。spring
#datasource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/db_test?useUnicode=true&characterEncoding=UTF-8&useSSL=true
spring.datasource.username=root
spring.datasource.password=root
#mybatis
mybatis.mapper-locations=classpath:/mapper/*.xml
複製代碼
public interface UserDao {
//mapper.xml方式
/** * 獲取全部用戶 * @return */
List<UserEntity> getAll();
/** * 根據id獲取用戶 * @return */
List<UserEntity> getOne(Long id);
/** * 新增用戶 * @param user */
void insertUser(UserEntity user);
/** * 修改用戶 * @param user */
void updateUser(UserEntity user);
/** * 刪除用戶 * @param id */
void deleteUser(Long id);
}
複製代碼
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.4//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.zwqh.springboot.dao.UserDao">
<resultMap type="cn.zwqh.springboot.model.UserEntity" id="user">
<id property="id" column="id"/>
<result property="userName" column="user_name"/>
<result property="userSex" column="user_sex"/>
</resultMap>
<!-- 獲取全部用戶 -->
<select id="getAll" resultMap="user">
select * from t_user
</select>
<!-- 根據用戶ID獲取用戶 -->
<select id="getOne" resultMap="user">
select * from t_user where id=#{id}
</select>
<!-- 新增用戶 -->
<insert id="insertUser" parameterType="cn.zwqh.springboot.model.UserEntity">
insert into t_user (user_name,user_sex) values(#{userName},#{userSex})
</insert>
<!-- 修改用戶 -->
<update id="updateUser" parameterType="cn.zwqh.springboot.model.UserEntity">
update t_user set user_name=#{userName},user_sex=#{userSex} where id=#{id}
</update>
<!-- 刪除用戶 -->
<delete id="deleteUser" parameterType="Long">
delete from t_user where id=#{id}
</delete>
</mapper>
複製代碼
我的以爲,註解方式適合輕量級的項目,如今的微服務項目比較適合這種模式;對於大型項目,複雜的多表聯合查詢sql用 xml 更適合。sql
<!-- pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.12</version>
</dependency>
複製代碼
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserDao userDao;
/** * 使用pagehelper分頁插件 * @param pageNum * @param pageSize * @return */
@RequestMapping("/pagehelperTest")
public List<UserEntity> pagehelperTest(int pageNum,int pageSize){
PageHelper.startPage(pageNum, pageSize);
return userDao.getAll(); //直接使用上面的 mapper
}
}
複製代碼
瀏覽器直接訪問 http://127.0.0.1:8080/user/pagehelperTest?pageNum=1&pageSize=10
,改變參數試試。數據庫
非特殊說明,本文版權歸 朝霧輕寒 全部,轉載請註明出處.
原文標題: Spring Boot 2.X(二):集成 MyBatis 數據層開發
原文地址: https://www.zwqh.top/article/info/3
若是文章對您有幫助,請掃碼關注下個人公衆號,文章持續更新中...