SpringBoot?Web項(xiàng)目增刪改查入門實(shí)戰(zhàn)案例
前言
為了快速入門一個(gè)SpringBootWeb項(xiàng)目,這里就將基礎(chǔ)的增刪改查的案例進(jìn)行總結(jié),作為對(duì)SpringBoot+Mybatis的基礎(chǔ)用法的一個(gè)鞏固。
準(zhǔn)備工作
- 需求說(shuō)明
對(duì)員工表進(jìn)行增刪改查操作 - 環(huán)境搭建
- 準(zhǔn)備數(shù)據(jù)表
-- 員工管理(帶約束) create table emp ( id int unsigned primary key auto_increment comment 'ID', username varchar(20) not null unique comment '用戶名', password varchar(32) default '123456' comment '密碼', name varchar(10) not null comment '姓名', gender tinyint unsigned not null comment '性別, 說(shuō)明: 1 男, 2 女', image varchar(300) comment '圖像', job tinyint unsigned comment '職位, 說(shuō)明: 1 班主任,2 講師, 3 學(xué)工主管, 4 教研主管, 5 咨詢師', entrydate date comment '入職時(shí)間', dept_id int unsigned comment '部門ID', create_time datetime not null comment '創(chuàng)建時(shí)間', update_time datetime not null comment '修改時(shí)間' ) comment '員工表'; -- 員工表測(cè)試數(shù)據(jù) INSERT INTO emp (id, username, password, name, gender, image, job, entrydate,dept_id, create_time, update_time) VALUES (1,'jinyong','123456','金庸',1,'1.jpg',4,'2000-01-01',2,now(),now()), (2,'zhangwuji','123456','張無(wú)忌',1,'2.jpg',2,'2015-01-01',2,now(),now()), (3,'yangxiao','123456','楊逍',1,'3.jpg',2,'2008-05-01',2,now(),now()), (4,'weiyixiao','123456','韋一笑',1,'4.jpg',2,'2007-01-01',2,now(),now()), (5,'changyuchun','123456','常遇春',1,'5.jpg',2,'2012-12-05',2,now(),now()), (6,'xiaozhao','123456','小昭',2,'6.jpg',3,'2013-09-05',1,now(),now()), (7,'jixiaofu','123456','紀(jì)曉芙',2,'7.jpg',1,'2005-08-01',1,now(),now()), (8,'zhouzhiruo','123456','周芷若',2,'8.jpg',1,'2014-11-09',1,now(),now()), (9,'dingminjun','123456','丁敏君',2,'9.jpg',1,'2011-03-11',1,now(),now()), (10,'zhaomin','123456','趙敏',2,'10.jpg',1,'2013-09-05',1,now(),now()), (11,'luzhangke','123456','鹿杖客',1,'11.jpg',5,'2007-02-01',3,now(),now()), (12,'hebiweng','123456','鶴筆翁',1,'12.jpg',5,'2008-08-18',3,now(),now()), (13,'fangdongbai','123456','方東白',1,'13.jpg',5,'2012-11-01',3,now(),now()), (14,'zhangsanfeng','123456','張三豐',1,'14.jpg',2,'2002-08-01',2,now(),now()), (15,'yulianzhou','123456','俞蓮舟',1,'15.jpg',2,'2011-05-01',2,now(),now()), (16,'songyuanqiao','123456','宋遠(yuǎn)橋',1,'16.jpg',2,'2007-01-01',2,now(),now()), (17,'chenyouliang','123456','陳友諒',1,'17.jpg',NULL,'2015-03-21',NULL,now(),now());
創(chuàng)建springboot工程,引入對(duì)應(yīng)的起步依賴(web、mybatis、mysql驅(qū)動(dòng)、lombok)
配置文件application.properties中引入mybatis的配置信息,準(zhǔn)備對(duì)應(yīng)的實(shí)體類
- application.properties
#數(shù)據(jù)庫(kù)連接 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/tlias spring.datasource.username=root spring.datasource.password=1234 #開啟mybatis的日志輸出 mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl #開啟數(shù)據(jù)庫(kù)表字段 到 實(shí)體類屬性的駝峰映射 mybatis.configuration.map-underscore-to-camel-case=true
- 實(shí)體類
/*員工類*/ @Data @NoArgsConstructor @AllArgsConstructor public class Emp { private Integer id; private String username; private String password; private String name; private Short gender; private String image; private Short job; private LocalDate entrydate; private Integer deptId; private LocalDateTime createTime; private LocalDateTime updateTime; }
- application.properties
準(zhǔn)備對(duì)應(yīng)的Mapper、Service(接口、實(shí)現(xiàn)類)、Controller基礎(chǔ)結(jié)構(gòu)
數(shù)據(jù)訪問層:
- EmpMapper
import org.apache.ibatis.annotations.Mapper; @Mapper public interface EmpMapper { }
業(yè)務(wù)層:
EmpService
//員工業(yè)務(wù)規(guī)則 public interface EmpService { }
EmpServiceImpl
import com.exmaple.service.EmpService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; //員工業(yè)務(wù)實(shí)現(xiàn)類 @Slf4j @Service public class EmpServiceImpl implements EmpService { }
控制層:
- EmpController
package com.exmple.controller; import org.springframework.web.bind.annotation.RestController; //員工管理控制器 @RestController public class EmpController { }
- EmpMapper
- 開發(fā)規(guī)范
REST
傳統(tǒng)URL和REST風(fēng)格比較
(1)傳統(tǒng)URL風(fēng)格http://localhost:8080/user/getById?id=1 GET:查詢id為1的用戶 http://localhost:8080/user/saveUser POST:新增用戶 http://localhost:8080/user/updateUser POST:修改用戶 http://localhost:8080/user/deleteUser?id=1 GET:刪除id為1的用戶
(2)REST風(fēng)格URL:
http://localhost:8080/users/1 GET:查詢id為1的用戶 http://localhost:8080/users POST:新增用戶 http://localhost:8080/users PUT:修改用戶 http://localhost:8080/users/1 DELETE:刪除id為1的用戶
其中總結(jié)起來(lái),就一句話:通過(guò)URL定位要操作的資源,通過(guò)HTTP動(dòng)詞(請(qǐng)求方式)來(lái)描述具體的操作。
在REST風(fēng)格的URL中,通過(guò)四種請(qǐng)求方式,來(lái)操作數(shù)據(jù)的增刪改查。
- GET : 查詢
- POST :新增
- PUT :修改
- DELETE :刪除
統(tǒng)一響應(yīng)結(jié)果
前后端工程在進(jìn)行交互時(shí),使用統(tǒng)一響應(yīng)結(jié)果 Result。
package com.example.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor public class Result { private Integer code;//響應(yīng)碼,1 代表成功; 0 代表失敗 private String msg; //響應(yīng)信息 描述字符串 private Object data; //返回的數(shù)據(jù) //增刪改 成功響應(yīng) public static Result success(){ return new Result(1,"success",null); } //查詢 成功響應(yīng) public static Result success(Object data){ return new Result(1,"success",data); } //失敗響應(yīng) public static Result error(String msg){ return new Result(0,msg,null); } }
- 開發(fā)流程
查看頁(yè)面原型明確需求
- 根據(jù)頁(yè)面原型和需求,進(jìn)行表結(jié)構(gòu)設(shè)計(jì)、編寫接口文檔(已提供)
閱讀接口文檔
思路分析
功能接口開發(fā)
- 就是開發(fā)后臺(tái)的業(yè)務(wù)功能,一個(gè)業(yè)務(wù)功能,我們稱為一個(gè)接口
功能接口測(cè)試
- 功能開發(fā)完畢后,先通過(guò)Postman進(jìn)行功能接口測(cè)試,測(cè)試通過(guò)后,再和前端進(jìn)行聯(lián)調(diào)測(cè)試
前后端聯(lián)調(diào)測(cè)試
- 和前端開發(fā)人員開發(fā)好的前端工程一起測(cè)試
新增員工
需求
在新增用戶時(shí),我們需要保存用戶的基本信息,并且還需要上傳的員工的圖片,目前我們先完成第一步操作,保存用戶的基本信息。接口文檔
我們參照接口文檔來(lái)開發(fā)新增員工功能
- 基本信息
請(qǐng)求路徑:/emps 請(qǐng)求方式:POST 接口描述:該接口用于添加員工的信息
請(qǐng)求參數(shù)
參數(shù)格式:application/json參數(shù)說(shuō)明:
名稱 類型 是否必須 備注 username string 必須 用戶名 name string 必須 姓名 gender number 必須 性別, 說(shuō)明: 1 男, 2 女 image string 非必須 圖像 deptId number 非必須 部門id entrydate string 非必須 入職日期 job number 非必須 職位, 說(shuō)明: 1 班主任,2 講師, 3 學(xué)工主管, 4 教研主管, 5 咨詢師 請(qǐng)求數(shù)據(jù)樣例:
{ "image": "https://web-framework.oss-cn-hangzhou.aliyuncs.com/2022-09-03-07-37-38222.jpg", "username": "linpingzhi", "name": "林平之", "gender": 1, "job": 1, "entrydate": "2022-09-18", "deptId": 1 }
響應(yīng)數(shù)據(jù)
參數(shù)格式:application/json
參數(shù)說(shuō)明:
參數(shù)名 類型 是否必須 備注 code number 必須 響應(yīng)碼,1 代表成功,0 代表失敗 msg string 非必須 提示信息 data object 非必須 返回的數(shù)據(jù)
思路分析
接口文檔規(guī)定:- 請(qǐng)求路徑:/emps
- 請(qǐng)求方式:POST
- 請(qǐng)求參數(shù):Json格式數(shù)據(jù)
- 響應(yīng)數(shù)據(jù):Json格式數(shù)據(jù)
問題1:如何限定請(qǐng)求方式是POST?
@PostMapping
問題2:怎么在controller中接收json格式的請(qǐng)求參數(shù)?
@RequestBody //把前端傳遞的json數(shù)據(jù)填充到實(shí)體類中
功能開發(fā)
EmpController
@Slf4j @RestController @RequestMapping("/emps") public class EmpController { @Autowired private EmpService empService; //新增 @PostMapping public Result save(@RequestBody Emp emp){ //記錄日志 log.info("新增員工, emp:{}",emp); //調(diào)用業(yè)務(wù)層新增功能 empService.save(emp); //響應(yīng) return Result.success(); } //省略... }
EmpService
public interface EmpService { /** * 保存員工信息 * @param emp */ void save(Emp emp); //省略... }
EmpServiceImpl
@Slf4j @Service public class EmpServiceImpl implements EmpService { @Autowired private EmpMapper empMapper; @Override public void save(Emp emp) { //補(bǔ)全數(shù)據(jù) emp.setCreateTime(LocalDateTime.now()); emp.setUpdateTime(LocalDateTime.now()); //調(diào)用添加方法 empMapper.insert(emp); } //省略... }
EmpMapper
@Mapper public interface EmpMapper { //新增員工 @Insert("insert into emp (username, name, gender, image, job, entrydate, dept_id, create_time, update_time) " + "values (#{username}, #{name}, #{gender}, #{image}, #{job}, #{entrydate}, #{deptId}, #{createTime}, #{updateTime});") void insert(Emp emp); //省略... }
刪除員工
需求
前端頁(yè)面可以一次性刪除一個(gè)或多個(gè)員工。
問題:我們需要開發(fā)兩個(gè)功能接口嗎?一個(gè)刪除單個(gè)員工,一個(gè)刪除多個(gè)員工
答案:不需要。 只需要開發(fā)一個(gè)功能接口即可(刪除多個(gè)員工包含只刪除一個(gè)員工)接口文檔
基本信息
請(qǐng)求路徑:/emps/{ids} 請(qǐng)求方式:DELETE 接口描述:該接口用于批量刪除員工的數(shù)據(jù)信息
請(qǐng)求參數(shù)
參數(shù)格式:路徑參數(shù)參數(shù)說(shuō)明:
參數(shù)名 類型 示例 是否必須 備注 ids 數(shù)組 array 1,2,3 必須 員工的id數(shù)組 請(qǐng)求參數(shù)樣例:
/emps/1,2,3
響應(yīng)數(shù)據(jù)
參數(shù)格式:application/json
參數(shù)說(shuō)明:
參數(shù)名 類型 是否必須 備注 code number 必須 響應(yīng)碼,1 代表成功,0 代表失敗 msg string 非必須 提示信息 data object 非必須 返回的數(shù)據(jù) 響應(yīng)數(shù)據(jù)樣例:
{ "code":1, "msg":"success", "data":null }
- 思路分析
接口文檔規(guī)定:
前端請(qǐng)求路徑:/emps/{ids}
前端請(qǐng)求方式:DELETE
問題1:怎么在controller中接收請(qǐng)求路徑中的路徑參數(shù)?
@PathVariable
問題2:如何限定請(qǐng)求方式是delete?
@DeleteMapping
問題3:在Mapper接口中,執(zhí)行delete操作的SQL語(yǔ)句時(shí),條件中的id值是不確定的是動(dòng)態(tài)的,怎么實(shí)現(xiàn)呢?
Mybatis中的動(dòng)態(tài)SQL:foreach
功能開發(fā)
EmpController@Slf4j @RestController @RequestMapping("/emps") public class EmpController { @Autowired private EmpService empService; //批量刪除 @DeleteMapping("/{ids}") public Result delete(@PathVariable List<Integer> ids){ empService.delete(ids); return Result.success(); } }
EmpService
public interface EmpService { /** * 批量刪除操作 * @param ids id集合 */ void delete(List<Integer> ids); //省略... }
EmpServiceImpl
@Slf4j @Service public class EmpServiceImpl implements EmpService { @Autowired private EmpMapper empMapper; @Override public void delete(List<Integer> ids) { empMapper.delete(ids); } //省略... }
EmpMapper
@Mapper public interface EmpMapper { //批量刪除 void delete(List<Integer> ids); //省略... }
EmpMapper.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.mapper.EmpMapper"> <!--批量刪除員工--> <select id="delete"> delete from emp where id in <foreach collection="ids" item="id" open="(" close=")" separator=","> #{id} </foreach> </select> <!-- 省略... --> </mapper>
元素用于迭代傳入的集合。在這個(gè)例子中,它用于構(gòu)建IN子句中的值列表。
collection屬性:指定要迭代的集合名稱。在這個(gè)例子中,collection="ids"意味著傳入的參數(shù)應(yīng)該是一個(gè)名為ids的集合。
item屬性:指定每次迭代時(shí)使用的變量名。在這里,item=“id"表示每次迭代時(shí),當(dāng)前元素會(huì)被賦值給變量id。
open屬性:指定循環(huán)產(chǎn)生的SQL片段的開頭字符。在這里,open=”(“表示循環(huán)開始時(shí)添加一個(gè)左括號(hào)。
close屬性:指定循環(huán)產(chǎn)生的SQL片段的結(jié)尾字符。在這里,close=”)“表示循環(huán)結(jié)束時(shí)添加一個(gè)右括號(hào)。
separator屬性:指定每次迭代之間使用的分隔符。在這里,separator=”,"表示每次迭代之間添加一個(gè)逗號(hào)。
修改員工
需求
修改員工信息接口文檔
基本信息
請(qǐng)求路徑:/emps 請(qǐng)求方式:PUT 接口描述:該接口用于修改員工的數(shù)據(jù)信息
請(qǐng)求參數(shù)
參數(shù)格式:application/json
參數(shù)說(shuō)明:
名稱 類型 是否必須 備注 id number 必須 id username string 必須 用戶名 name string 必須 姓名 gender number 必須 性別, 說(shuō)明: 1 男, 2 女 image string 非必須 圖像 deptId number 非必須 部門id entrydate string 非必須 入職日期 job number 非必須 職位, 說(shuō)明: 1 班主任,2 講師, 3 學(xué)工主管, 4 教研主管, 5 咨詢師 請(qǐng)求數(shù)據(jù)樣例:
{ "id": 1, "image": "https://web-framework.oss-cn-hangzhou.aliyuncs.com/2022-09-03-07-37-38222.jpg", "username": "linpingzhi", "name": "林平之", "gender": 1, "job": 1, "entrydate": "2022-09-18", "deptId": 1 }
響應(yīng)數(shù)據(jù)
參數(shù)格式:application/json
參數(shù)說(shuō)明:
參數(shù)名 類型 是否必須 備注 code number 必須 響應(yīng)碼,1 代表成功,0 代表失敗 msg string 非必須 提示信息 data object 非必須 返回的數(shù)據(jù) 響應(yīng)數(shù)據(jù)樣例:
{ "code":1, "msg":"success", "data":null }
代碼實(shí)現(xiàn)
EmpMapper
@Mapper public interface EmpMapper { //修改員工信息 public void update(Emp emp); //省略... }
- EmpMapper.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.itheima.mapper.EmpMapper"> <!--更新員工信息--> <update id="update"> update emp <set> <if test="username != null and username != ''"> username = #{username}, </if> <if test="password != null and password != ''"> password = #{password}, </if> <if test="name != null and name != ''"> name = #{name}, </if> <if test="gender != null"> gender = #{gender}, </if> <if test="image != null and image != ''"> image = #{image}, </if> <if test="job != null"> job = #{job}, </if> <if test="entrydate != null"> entrydate = #{entrydate}, </if> <if test="deptId != null"> dept_id = #{deptId}, </if> <if test="updateTime != null"> update_time = #{updateTime} </if> </set> where id = #{id} </update> <!-- 省略... --> </mapper>
- EmpService
public interface EmpService { /** * 更新員工 * @param emp */ public void update(Emp emp); //省略... }
- EmpServiceImpl
@Slf4j @Service public class EmpServiceImpl implements EmpService { @Autowired private EmpMapper empMapper; @Override public void update(Emp emp) { emp.setUpdateTime(LocalDateTime.now()); //更新修改時(shí)間為當(dāng)前時(shí)間 empMapper.update(emp); } //省略... }
- EmpController
@Slf4j @RestController @RequestMapping("/emps") public class EmpController { @Autowired private EmpService empService; //修改員工 @PutMapping public Result update(@RequestBody Emp emp){ empService.update(emp); return Result.success(); } //省略... }
查詢員工
- 需求
- 根據(jù)ID查詢員工信息
接口文檔
根據(jù)ID查詢員工數(shù)據(jù)基本信息
請(qǐng)求路徑:/emps/{id} 請(qǐng)求方式:GET 接口描述:該接口用于根據(jù)主鍵ID查詢員工的信息
請(qǐng)求參數(shù)
參數(shù)格式:路徑參數(shù)
參數(shù)說(shuō)明:
參數(shù)名 類型 是否必須 備注 id number 必須 員工ID 請(qǐng)求參數(shù)樣例:
/emps/1
響應(yīng)數(shù)據(jù)
參數(shù)格式:application/json
參數(shù)說(shuō)明:
名稱 類型 是否必須 默認(rèn)值 備注 code number 必須 響應(yīng)碼, 1 成功 , 0 失敗 msg string 非必須 提示信息 data object 必須 返回的數(shù)據(jù) id number 非必須 id username string 非必須 用戶名 name string 非必須 姓名 password string 非必須 密碼 entrydate string 非必須 入職日期 gender number 非必須 性別 , 1 男 ; 2 女 image string 非必須 圖像 job number 非必須 職位, 說(shuō)明: 1 班主任,2 講師, 3 學(xué)工主管, 4 教研主管, 5 咨詢師 deptId number 非必須 部門id createTime string 非必須 創(chuàng)建時(shí)間 updateTime string 非必須 更新時(shí)間 響應(yīng)數(shù)據(jù)樣例:
{ "code": 1, "msg": "success", "data": { "id": 2, "username": "zhangwuji", "password": "123456", "name": "張無(wú)忌", "gender": 1, "image": "https://web-framework.oss-cn-hangzhou.aliyuncs.com/2022-09-02-00-27-53B.jpg", "job": 2, "entrydate": "2015-01-01", "deptId": 2, "createTime": "2022-09-01T23:06:30", "updateTime": "2022-09-02T00:29:04" } }
代碼實(shí)現(xiàn)
EmpMapper
@Mapper public interface EmpMapper { //根據(jù)ID查詢員工信息 @Select("select id, username, password, name, gender, image, job, entrydate, dept_id, create_time, update_time " + "from emp " + "where id = #{id}") public Emp findById(Integer id); //省略... }
- EmpService
public interface EmpService { /** * 根據(jù)ID查詢員工 * @param id * @return */ public Emp getById(Integer id); //省略... }
- EmpServiceImpl
@Slf4j @Service public class EmpServiceImpl implements EmpService { @Autowired private EmpMapper empMapper; @Override public Emp getById(Integer id) { return empMapper.findById(id); } //省略... }
- EmpController
@Slf4j @RestController @RequestMapping("/emps") public class EmpController { @Autowired private EmpService empService; //根據(jù)id查詢 @GetMapping("/{id}") public Result getById(@PathVariable Integer id){ Emp emp = empService.getById(id); return Result.success(emp); } //省略... }
后記
springboot + mybatis做數(shù)據(jù)的增刪改查其實(shí)相對(duì)比較簡(jiǎn)單,我們根據(jù)上面的案例就可以進(jìn)行學(xué)習(xí),主要關(guān)注的是常用的注解以及mybatis復(fù)雜查詢時(shí)xml文件的配置。
到此這篇關(guān)于SpringBoot Web項(xiàng)目增刪改查入門實(shí)戰(zhàn)案例的文章就介紹到這了,更多相關(guān)SpringBoot Web增刪改查內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決idea 項(xiàng)目編譯后沒有class文件的問題
這篇文章主要介紹了解決idea 項(xiàng)目編譯后沒有class文件的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12Java多數(shù)據(jù)源的三種實(shí)現(xiàn)方式小結(jié)
多數(shù)據(jù)源是在一個(gè)應(yīng)用程序中配置和使用多個(gè)不同的數(shù)據(jù)庫(kù)連接,本文主要介紹了Java多數(shù)據(jù)源的三種實(shí)現(xiàn)方式小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下2025-03-03詳解Spring Cloud 跨服務(wù)數(shù)據(jù)聚合框架
這篇文章主要介紹了詳解Spring Cloud 跨服務(wù)數(shù)據(jù)聚合框架,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03JAVA 時(shí)間區(qū)間的字符串合法性驗(yàn)證
需要對(duì)獲得的諸如08:30-11:00這樣的字符串進(jìn)行合法性驗(yàn)證,判定表示的時(shí)間區(qū)間是否合法,以及對(duì)高峰期時(shí)間的區(qū)間是否在總的時(shí)間區(qū)間內(nèi)部進(jìn)行判斷。2013-03-03Java輕松掌握面向?qū)ο蟮娜筇匦苑庋b與繼承和多態(tài)
本文主要講述的是面向?qū)ο蟮娜筇匦裕悍庋b,繼承,多態(tài),內(nèi)容含括從封裝到繼承再到多態(tài)的所有重點(diǎn)內(nèi)容以及使用細(xì)節(jié)和注意事項(xiàng),內(nèi)容有點(diǎn)長(zhǎng),請(qǐng)大家耐心看完2022-05-05POST方法給@RequestBody傳參數(shù)失敗的解決及原因分析
這篇文章主要介紹了POST方法給@RequestBody傳參數(shù)失敗的解決及原因分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(10)
下面小編就為大家?guī)?lái)一篇Java基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望可以幫到你2021-07-07MyBatis通過(guò)JDBC數(shù)據(jù)驅(qū)動(dòng)生成的執(zhí)行語(yǔ)句問題
這篇文章主要介紹了MyBatis通過(guò)JDBC數(shù)據(jù)驅(qū)動(dòng)生成的執(zhí)行語(yǔ)句問題的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-08-08