SpringBoot+Mybatsi 實現資料查詢、插入、刪除(前端與後臺資料均實現)
環境:
idea 2019
版本 2.4.0
資料庫:dbeaver、mysql
前端實現:postman
一、首先配置一下基本環境。
1. 新建專案,引入相關依賴:
<dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>2.1.3</version> </dependency> <!-- mybatis配置--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.3</version> </dependency> <!--jdbc--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jdbc</artifactId> </dependency> <!--mysql jdbc驅動--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!--web驅動--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--test驅動--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--valid註解依賴--> <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>1.1.0.Final</version> </dependency>
<!--charset引入--> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> <exclusions> <exclusion> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2</version> </dependency> <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>1.9.2</version> <exclusions> <exclusion> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.10</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.6</version> </dependency>
2. Mybatis配置:
@Configuration public class MyBatisConfig { /** * Mapper掃描配置. 自動掃描將Mapper介面生成代理注入到Spring. */ @Bean public static MapperScannerConfigurer mapperScannerConfigurer() { MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer(); // 注意這裡的掃描路徑: 1.不要掃描到自定義的Mapper; 2.定義的路徑不要掃描到tk.mybatis.mapper(如定義**.mapper). // 兩個做法都會導致掃描到tk.mybatis的Mapper,就會產生重複定義的報錯. mapperScannerConfigurer.setBasePackage("*.example.**.mapper"); return mapperScannerConfigurer; } }
3. application.properties中資料來源配置、mapper包對映設定:
#資料來源配置 spring.datasource.url=jdbc:mysql://47.100.59.91:3306/testdemo spring.datasource.username=root spring.datasource.password= Aa12345&_ #mybatis對映配置 mybatis.mapper-locations=classpath:mapper/*.xml mybatis.type-aliases-package=testdemo.system.dto mybatis.configuration.map-underscore-to-camel-case=true
4. 專案結構如下:
5. 前端程式碼承接部分要實現兩個類,分別是Result和Results類。
package testdemo.util; import testdemo.base.Result; /** * Result生成工具類 */ public class Results { protected Results() {} public static Result newResult() { return new Result(); } public static Result newResult(boolean success) { return new Result(success); } // // 業務呼叫成功 // ---------------------------------------------------------------------------------------------------- public static Result success() { return new Result(); } public static Result success(String msg) { return new Result(true, null, msg); } public static Result success(String code, String msg) { return new Result(true, code, msg); } public static Result successWithStatus(Integer status) { return new Result(true, status); } public static Result successWithStatus(Integer status, String msg) { return new Result(true, status, null, msg); } public static Result successWithData(Object data) { return new Result(true, null, null, data); } public static Result successWithData(Object data, String msg) { return new Result(true, null, msg, data); } public static Result successWithData(Object data, String code, String msg) { return new Result(true, code, msg, data); } // // 業務呼叫失敗 // ---------------------------------------------------------------------------------------------------- public static Result failure() { return new Result(false); } public static Result failure(String msg) { return new Result(false, null, msg); } public static Result failure(String code, String msg) { return new Result(false, code, msg); } public static Result failureWithStatus(Integer status) { return new Result(false, status); } public static Result failureWithStatus(Integer status, String msg) { return new Result(false, status, null, msg); } public static Result failureWithData(Object data) { return new Result(false, null, null, data); } public static Result failureWithData(Object data, String msg) { return new Result(false, null, msg, data); } public static Result failureWithData(Object data, String code, String msg) { return new Result(false, code, msg, data); } }
package testdemo.base; import com.fasterxml.jackson.annotation.JsonInclude; import java.io.Serializable; /** * 前端返回物件 */ public class Result implements Serializable { private static final long serialVersionUID = 1430633339880116031L; /** * 成功與否標誌 */ private boolean success = true; /** * 返回狀態碼,為空則預設200.前端需要攔截一些常見的狀態碼如403、404、500等 */ @JsonInclude(JsonInclude.Include.NON_NULL) private Integer status; /** * 編碼,可用於前端處理多語言,不需要則不用返回編碼 */ @JsonInclude(JsonInclude.Include.NON_NULL) private String code; /** * 相關訊息 */ @JsonInclude(JsonInclude.Include.NON_NULL) private String msg; /** * 相關資料 */ @JsonInclude(JsonInclude.Include.NON_NULL) private Object data; public Result() {} public Result(boolean success) { this.success = success; } public Result(boolean success, Integer status) { this.success = success; this.status = status; } public Result(boolean success, String code, String msg){ this(success); this.code = code; this.msg = msg; } public Result(boolean success, Integer status, String code, String msg) { this.success = success; this.status = status; this.code = code; this.msg = msg; } public Result(boolean success, String code, String msg, Object data){ this(success); this.code = code; this.msg = msg; this.data = data; } public boolean isSuccess() { return success; } public void setSuccess(boolean success) { this.success = success; } public Integer getStatus() { return status; } public void setStatus(Integer status) { this.status = status; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public Object getData() { return data; } public void setData(Object data) { this.data = data; } }
6. 實現列舉類BaseEnum和BaseEnums。
package testdemo.constants; import testdemo.base.BaseEnum; import java.util.HashMap; import java.util.Map; /** * 基礎列舉值 */ public enum BaseEnums implements BaseEnum<String, String> { SUCCESS("request.success", "請求成功"), FAILURE("request.failure", "請求失敗"), OPERATION_SUCCESS("operation.success", "操作成功"), OPERATION_FAILURE("operation.failure", "操作失敗"), ERROR("system.error", "系統異常"), NOT_FOUND("not_found", "請求資源不存在"), FORBIDDEN("forbidden", "無許可權訪問"), VERSION_NOT_MATCH("record_not_exists_or_version_not_match", "記錄版本不存在或不匹配"), PARAMETER_NOT_NULL("parameter_not_be_null", "引數不能為空"); private String code; private String desc; private static Map<String, String> allMap = new HashMap<>(); BaseEnums(String code, String desc) { this.code = code; this.desc = desc; } static { for(BaseEnums enums : BaseEnums.values()){ allMap.put(enums.code, enums.desc); } } @Override public String code() { return code; } @Override public String desc() { return desc; } public String desc(String code) { return allMap.get(code); } }
package testdemo.base; /** * 基礎列舉介面 */ public interface BaseEnum<K, V> { /** * 獲取編碼 * * @return 編碼 */ K code(); /** * 獲取描述 * * @return 描述 */ V desc(); }
7. 還有常量設定constants。
package testdemo.constants; import com.google.common.base.Charsets; import java.nio.charset.Charset; /** * 系統級常量類 */ public class Constants { public static final String APP_NAME = "spring"; /** * 系統編碼 */ public static final Charset CHARSET = Charsets.UTF_8; /** * 標識:是/否、啟用/禁用等 */ public interface Flag { Integer YES = 1; Integer NO = 0; } /** * 操作型別 */ public interface Operation { /** * 新增 */ String ADD = "add"; /** * 更新 */ String UPDATE = "update"; /** * 刪除 */ String DELETE = "delete"; } /** * 性別 */ public interface Sex { /** * 男 */ Integer MALE = 1; /** * 女 */ Integer FEMALE = 0; } }
8. 接下來就是資料庫設計。
資料庫名字是testdemo,資料庫表名叫sys-user。
先建立一個數據庫,然後建立使用者表。
USE testdemo;
CREATE TABLE `testdemo`.`user` (
`id` bigint NOT NULL AUTO_INCREMENT,
`username` varchar(255) NULL,
`passwprd` varchar(255) NULL,
PRIMARY KEY (`id`)
);
插入幾條資料:
基本準備做好了,接下來就進入程式碼編寫了。
二、實現資料庫表資料單條查詢和多條查詢。
1. UserController.java中程式碼如下:
@Autowired UserService userService ; /* * 查詢所有條資料 * */ @GetMapping("/select") public Result select(){ List<User> userList = userService.select(); return Results.successWithData(userList, BaseEnums.SUCCESS.code(),BaseEnums.SUCCESS.desc()); } /* * 查詢某條資料 * */ @GetMapping("/selectOne") public Result selectOne(@RequestParam("id") String id){ return Results.successWithData(userService.selectOne(id), BaseEnums.SUCCESS.code(),BaseEnums.SUCCESS.desc()); }
2. UserService介面中宣告方法。
/* * 通過id查詢使用者 * */ public List<User> select(); /* * 查詢某一條資料 * */ public User selectOne(String id);
3. UserServiceImp類繼承UserService,並完成資料傳遞。
@Service public class UserServiceImpl implements UserService { @Autowired UserMapper userMapper ; @Override public User selectOne(String id){ return userMapper.selectOne(id) ; } @Override public List<User> select(){ return userMapper.select(); } }
4. UserMapper中宣告方法,繼續傳遞資料。
@Repository @Mapper public interface UserMapper { public List<User> select(); public User selectOne(String id); }
5. UserMapper.xml中程式碼如下:
<mapper namespace="testdemo.system.dao.UserMapper"> <resultMap id="userMap" type="testdemo.system.dto.User"> <result property="id" column="id"/> <result property="userName" column="username"/> <result property="password" column="password"/> </resultMap> <select id="select" resultMap="userMap"> select * from sys_user </select> <select id="selectOne" resultMap="userMap"> select * from sys_user where id = #{id} </select> </mapper>
這樣一來,後端查詢程式碼就完成了,現在利用postman完成前端資料查詢。
6、前端資料查詢
(1). 查詢所有資料
(2). 查詢一條資料
三、插入一條或多條資料。
在上面程式碼基礎上新增程式碼。
1. UserController.java中:
/* * 插入一條資料 * */ @PostMapping("/InsertOne") public Result InsertOne(@RequestBody User user){ return Results.successWithData(userService.insertOne(user), BaseEnums.SUCCESS.code(),BaseEnums.SUCCESS.desc()); } /* * 插入多條資料 * */ @PostMapping("/InsertMany") public Result InsertMany(@RequestBody List<User> userlist){ return Results.successWithData(userService.insertMany(userlist), BaseEnums.SUCCESS.code(),BaseEnums.SUCCESS.desc()); }
2. UserService介面中新增方法:
/* * 新增一個使用者 * */ public Integer insertOne(User user); /* * 新增多個使用者 * */ public Integer insertMany(List<User> userList);
3.UserServiceImpl實現資料傳遞:
@Override public Integer insertOne(User user){ return userMapper.insertOne(user); } @Override public Integer insertMany(List<User> userList){ return userMapper.insertMany(userList) ; }
4. UserMapper.java中:
public Integer insertOne(User user); public Integer insertMany(List<User> userList);
5.UserMapper.xml中:
<insert id="insertOne"> insert into sys_user(id,username,password) values(#{id},#{userName},#{password}) </insert> <insert id="insertMany"> insert into sys_user(id,username,password) values <foreach collection="list" item="user" index="index" separator=","> (#{user.id} , #{user.userName},#{user.password}) </foreach> </insert>
6. 前端實現:
(1)插入一條資料:
(2)插入多條資料(先把資料表中清空,不然會出現重複插入情況)
四、刪除某條資料
1. UserController.java中:
/* * 刪除某條資料 * */ @PostMapping("/DeleteOne") public Result DeleteOne(@RequestParam("id") String id){ return Results.successWithData(userService.deleteOne(id), BaseEnums.SUCCESS.code(),BaseEnums.SUCCESS.desc()); }
2. UserService.java中:
/* * 刪除某一條資料 * */ public Integer deleteOne(String id);
3.UserServiceImpl.java中:
@Override public Integer deleteOne(String id){ return userMapper.deleteOne(id) ; }
4. UserMapper.java中:
public Integer deleteOne(String id);
5.UserMapper.xml中:
<delete id="deleteOne"> delete from sys_user where id = #{id} </delete>
6.前端實現:
以上就是springboot框架+mybatis中前後端完整的資料庫增刪改查實現。
至此,結束。