SpringBoot整合Mybatis的步驟--Baizhiedu
阿新 • • 發佈:2021-10-17
1、配置檔案pom.xml
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion><parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.0</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.baizhiedu</groupId> <artifactId>element_users01</artifactId> <version>0.0.1-SNAPSHOT</version> <name>element_users01</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.39</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.6</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build> </project>
2、編寫實體類entity User.java
package com.baizhiedu.entity; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.ToString; import lombok.experimental.Accessors; import java.util.Date; @Data @NoArgsConstructor @AllArgsConstructor @ToString @Accessors(chain = true) public class User { private Integer id; private String name; @JsonFormat(pattern = "yyyy-MM-dd") private Date birthday; private String gender; private String address; }
3、編寫DAO層介面 UserDao.java
package com.baizhiedu.dao; import com.baizhiedu.entity.User; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List;
/*
@Mapper註解:
作用:在介面類上添加了@Mapper,在編譯之後會生成相應的介面實現類
新增位置:介面類上面
@Mapper
public interface UserDAO {
//程式碼
}
*/
//@Mapper
public interface UserDao { // 查詢所有使用者資訊 List<User> findAll(); // 儲存使用者資訊 void save(User user); // 根據id刪除一個使用者 void deleteUserById(Integer id); // 更新使用者資訊 void updateUser(User user); // 分頁查詢 List<User> findByPage(@Param("start") Integer start, @Param("rows") Integer rows); // 查詢總條數 Long findTotals(); }
4、傳值定義值物件VO(Value Object)Result.java
package com.baizhiedu.vo; import lombok.Data; @Data public class Result { private Boolean status = true; private String msg; }
5、編寫Service層
UserService.java
package com.baizhiedu.service; import com.baizhiedu.entity.User; import org.apache.ibatis.annotations.Param; import java.util.List; public interface UserService { // 查詢所有使用者資訊 List<User> findAll(); // 儲存使用者資訊 void addUser(User user); // 根據id刪除一個使用者 void deleteUserById(Integer id); // 更新使用者資訊 void updateUser(User user); // 分頁查詢 List<User> findByPage(Integer pageNow, Integer rows); // 查詢總條數 Long findTotals(); }
UserServiceImpl.java
package com.baizhiedu.service; import com.baizhiedu.dao.UserDao; import com.baizhiedu.entity.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import java.util.List; @Service @Transactional public class UserServiceImpl implements UserService{ @Autowired private UserDao userDao; @Override public void updateUser(User user) { userDao.updateUser(user); } @Override public List<User> findByPage(Integer pageNow, Integer rows) { int start = (pageNow-1)*rows; return userDao.findByPage(start, rows); } @Override public Long findTotals() { return userDao.findTotals(); } @Override public void deleteUserById(Integer id) { userDao.deleteUserById(id); } @Override public void addUser(User user) { userDao.save(user); } @Override @Transactional(propagation = Propagation.SUPPORTS) public List<User> findAll() { return userDao.findAll(); } }
6、編寫Controller層 UserController.java
package com.baizhiedu.controller; import com.baizhiedu.entity.User; import com.baizhiedu.service.UserService; import com.baizhiedu.vo.Result; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.List; import java.util.Map; @RestController @CrossOrigin @RequestMapping("/user") public class UserController { @Autowired private UserService userService; // 分頁查詢方法 @GetMapping("/findByPage") public Map<String, Object> findByPage(Integer pageNow, Integer pageSize) { Map<String, Object> result = new HashMap<>(); pageNow = pageNow==null? 1:pageNow; pageSize = pageSize==null? 4:pageSize; List<User> users = userService.findByPage(pageNow, pageSize); Long totals = userService.findTotals(); result.put("users", users); result.put("totals", totals); return result; } // 根據id刪除一個使用者 @GetMapping("/delete") public Result deleteUserById(Integer id) { Result result = new Result(); try { userService.deleteUserById(id); result.setMsg("刪除使用者資訊成功!"); } catch (Exception e) { e.printStackTrace(); result.setStatus(false); result.setMsg("刪除使用者資訊失敗, 請稍後再試!"); } return result; } // 儲存使用者資訊 @PostMapping("/savaOrUpdate") public Result savaOrUpdate(@RequestBody User user) { Result result = new Result(); try { if (StringUtils.isEmpty(user.getId())) { userService.addUser(user); result.setMsg("使用者資訊儲存成功!"); } else { userService.updateUser(user); result.setMsg("使用者資訊修改成功!"); } } catch (Exception e) { e.printStackTrace(); result.setStatus(false); result.setMsg("系統錯誤:儲存使用者資訊失敗, 請稍後再試..."); } return result; } // 查詢所有 @GetMapping("/findAll") public List<User> findAll() { return userService.findAll(); } }
7、編寫Mapper檔案 UserDaoMapper.xml
該檔案放在:src\main\resources\com\baizhiedu\mapper
<?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.baizhiedu.dao.UserDao"> <!--分頁查詢--> <select id="findByPage" resultType="User"> select id, name, birthday, gender, address from t_users limit #{start}, #{rows} </select> <!----> <select id="findTotals" resultType="Long"> select count(id) from t_users </select> <!--更新使用者資訊--> <update id="updateUser" parameterType="User"> update t_users set name=#{name}, birthday=#{birthday}, gender=#{gender}, address=#{address} where id = #{id} </update> <!--查詢所有使用者資訊--> <select id="findAll" resultType="User"> select id, name, birthday, gender, address from t_users </select> <!--儲存使用者資訊--> <insert id="save" parameterType="User" useGeneratedKeys="true" keyProperty="id"> insert into t_users values(#{id}, #{name}, #{birthday}, #{gender}, #{address}) </insert> <!--根據id刪除一個使用者--> <delete id="deleteUserById" parameterType="Integer"> delete from t_users where id = #{id} </delete> </mapper>
8、SQL檔案t_users.sql
/* Navicat Premium Data Transfer Source Server : A本地win10-MySQL 5.6-3306 Source Server Type : MySQL Source Server Version : 50646 Source Host : localhost:3306 Source Schema : element_users01 Target Server Type : MySQL Target Server Version : 50646 File Encoding : 65001 Date: 30/08/2021 21:38:20 */ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for t_users -- ---------------------------- DROP TABLE IF EXISTS `t_users`; CREATE TABLE `t_users` ( `id` int(10) NOT NULL AUTO_INCREMENT, `name` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, `birthday` timestamp(0) NULL DEFAULT NULL, `gender` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, `address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact; SET FOREIGN_KEY_CHECKS = 1;
9、編寫配置檔案application.properties
server.port=8001
spring.application.name=element-users
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:58536/element_users01?characterEncoding=UTF-8
spring.datasource.username=element_users01
spring.datasource.password=SFY5ExMkYB4NX4NA
mybatis.mapper-locations=classpath:com/baizhiedu/mapper/*.xml
mybatis.type-aliases-package=com.baizhiedu.entity
10、SpringBoot的啟動入口 ElementUsers01Application.java
package com.baizhiedu; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
/*
@MapperScan
作用:指定要變成實現類的介面所在的包,然後包下面的所有介面在編譯之後都會生成相應的實現類
新增位置:是在Springboot啟動類上面新增,
*/
@SpringBootApplication @MapperScan("com.baizhiedu.dao")
public class ElementUsers01Application { public static void main(String[] args) { SpringApplication.run(ElementUsers01Application.class, args); } }