<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
首先我們先建立專案 注意:建立SpringBoot專案時一定要聯網不然會報錯
專案建立好後我們首先對 application.yml 進行編譯
#指定埠號
server:
port: 8888
#設定mysql資料來源
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/nba?serverTimezone=Asia/Shanghai
username: root
password: root
#設定模板引擎 thymeleaf
thymeleaf:
mode: HTML5
cache: false
suffix: .html
prefix: classpath:/templates/
mybatis:
mapper-locations: classpath:/mapper/*.xml
type-aliases-package: com.bdqn.springboot #放包名
注意:在 :後一定要空格,這是他的語法,不空格就會執行報錯
接下來我們進行對專案的構建 建立好如下幾個包 可根據自己實際需要建立其他的工具包之類的
mapper:用於存放dao層介面
pojo:用於存放實體類
service:用於存放service層介面,以及service層實現類
web:用於存放controller控制層
接下來我們開始編寫程式碼
首先是實體類,今天做的是一個兩表的簡單增刪改查
package com.baqn.springboot.pojo; import lombok.Data; @Data public class Clubs { private int cid; private String cname; private String city; }
package com.baqn.springboot.pojo; import lombok.Data; @Data public class Players { private int pid; private String pname; private String birthday; private int height; private int weight; private String position; private int cid; private String cname; private String city; }
使用@Data註解可以有效減少實體類中的程式碼數量,縮減了對於get/set和toString的編寫
然後是mapper層
package com.baqn.springboot.mapper; import com.baqn.springboot.pojo.Players; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; import java.util.List; @Mapper @Repository public interface PlayersMapper { /** * 查詢所有 * @return */ List<Players> findAll(); /** * 根據ID查詢 * @return */ Players findById(Integer id); /** * 新增 * @param players * @return */ Integer add(Players players); /** * 刪除 * @param pid * @return */ Integer delete(Integer pid); /** * 修改 * @param players * @return */ Integer update(Players players); }
使用@mapper後,不需要在spring設定中設定掃描地址,通過mapper.xml裡面的namespace屬性對應相關的mapper類,spring將動態的生成Bean後注入到Servicelmpl中。
然後是service層
package com.baqn.springboot.service; import com.baqn.springboot.pojo.Players; import org.apache.ibatis.annotations.Param; import java.util.List; public interface PlayersService { List<Players> findAll(); Players findById(Integer pid); Integer add(Players players); Integer delete(Integer pid); Integer update(Players players); }
package com.baqn.springboot.service; import com.baqn.springboot.mapper.PlayersMapper; import com.baqn.springboot.pojo.Players; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class PlayersServiceImpl implements PlayersService{ @Autowired private PlayersMapper mapper; @Override public List<Players> findAll() { return mapper.findAll(); } @Override public Players findById(Integer pid) { return mapper.findById(pid); } @Override public Integer add(Players players) { return mapper.add(players); } @Override public Integer delete(Integer pid) { return mapper.delete(pid); } @Override public Integer update(Players players) { return mapper.update(players); } }
最後是web層的controller控制類
package com.baqn.springboot.web; import com.baqn.springboot.pojo.Players; import com.baqn.springboot.service.PlayersServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import java.util.List; @Controller public class PlayersController { @Autowired private PlayersServiceImpl service; @RequestMapping("/findAll") public String findAll(Model model) { List<Players> allList = service.findAll(); model.addAttribute("allList",allList); return "index"; } @RequestMapping("/findById/{pid}") public String findById(Model model,@PathVariable("pid") Integer pid) { Players list = service.findById(pid); //System.out.println("---------------"+list.toString()); model.addAttribute("list",list); return "update.html"; } @RequestMapping("/add") public String add(Model model, Players players){ Integer count = service.add(players); if (count>0){ return "redirect:/findAll"; } return "add"; } @RequestMapping("/delete/{pid}") public String delete(Model model,@PathVariable("pid") Integer pid){ Integer count = service.delete(pid); if (count>0){ return "redirect:/findAll"; } return null; } @RequestMapping("/a1") public String a1(Model model, Players players){ return "add.html"; } @RequestMapping("/update") public String update(Model model,Players plays){ Integer count = service.update(plays); if (count>0){ return "redirect:/findAll"; } return null; } }
注意:a1方法僅僅是用於跳轉頁面,並沒有其他作用,如果有更好的跳轉方法可以給我留言哦
現在準備工作都做完了,可以開始編寫SQL語句了
mapper.xml可以寫在下面resources裡面也可以寫在上面的mapper層裡
如果寫在上面的話需要在pom裡面寫一個資源過濾器,有興趣的話可以去百度
<?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"> <!--namespace=繫結一個對應的Dao/Mapper介面--> <mapper namespace="com.baqn.springboot.mapper.PlayersMapper"> <select id="findAll" resultType="com.baqn.springboot.pojo.Players"> select * from clubs c , players p where c.cid = p.cid </select> <select id="findById" resultType="com.baqn.springboot.pojo.Players"> select * from clubs c , players p where c.cid = p.cid and p.pid=#{pid} </select> <insert id="add" parameterType="com.baqn.springboot.pojo.Players"> INSERT INTO `nba`.`players`(pname, birthday, height, weight, position, cid) VALUES (#{pname}, #{birthday}, #{height}, #{weight}, #{position}, #{cid}); </insert> <delete id="delete" parameterType="int"> delete from players where pid = #{pid} </delete> <update id="update" parameterType="com.baqn.springboot.pojo.Players"> UPDATE `nba`.`players` <set> <if test="pname != null">pname=#{pname},</if> <if test="birthday != null">birthday=#{birthday},</if> <if test="height != null">height=#{height},</if> <if test="weight != null">weight=#{weight},</if> <if test="position != null">position=#{position},</if> <if test="cid != null">cid=#{cid}</if> </set> WHERE `pid` = #{pid}; </update> </mapper>
注意:mapper.xml中的id裡對應的是mapper層介面的方法,一定不能寫錯
到現在為止我們的後端程式碼就已經完全搞定了,前端頁面如下
主頁 index.html
<html> <head> <title>Title</title> </head> <body> <div align="center"> <table border="1"> <h1>美國職業籃球聯盟(NBA)球員資訊</h1> <a th:href="@{/a1}" rel="external nofollow" >新增</a> <tr> <th>球員編號</th> <th>球員名稱</th> <th>出生時間(yyyy-MM-dd)</th> <th>球員身高(cm)</th> <th>球員體重(kg)</th> <th>球員位置</th> <th>所屬球隊</th> <th>相關操作</th> </tr> <!--/*@thymesVar id="abc" type=""*/--> <tr th:each="list : ${allList}"> <td th:text="${list.pid}"></td> <td th:text="${list.pname}"></td> <td th:text="${list.birthday}"></td> <td th:text="${list.height}">${list.height}</td> <td th:text="${list.weight}"></td> <td th:text="${list.position}"></td> <td th:text="${list.cname}"></td> <td> <a th:href="@{'/findById/'+${list.pid}}" rel="external nofollow" >修改</a> <a th:href="@{'/delete/'+${list.pid}}" rel="external nofollow" >刪除</a> </td> </tr> </c:forEach> </table> </div> </body> </html>
新增頁 add.html
<!DOCTYPE html> <html> <head> <title>Title</title> </head> <body> <div align="center"> <h3 align="center">新增球員</h3> <form action="/add"> <p> 球員名稱: <input name="pname" id="pname"> </p > <p> 出生日期: <input name="birthday" id="birthday"> </p > <p> 球員升高: <input name="height" id="height"> </p > <p> 球員體重: <input name="weight" id="weight"> </p > <p> 球員位置: <input type="radio" name="position" value="控球后衛"/>控球后衛 <input type="radio" name="position" value="得分後衛"/>得分後衛 <input type="radio" name="position" value="小前鋒" />小前鋒 <input type="radio" name="position" value="大前鋒" />大前鋒 <input type="radio" name="position" value="中鋒"/>中鋒 </p > <p> 所屬球隊: <select name="cid"> <option value="1">熱火隊</option> <option value="2">奇才隊</option> <option value="3">魔術隊</option> <option value="4">山貓隊</option> <option value="5">老鷹隊</option> </select> </p > <input type="submit" value="儲存"> <input type="reset" value="重置"> </form> </div> </body> </html>
修改頁 update.html
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body class="container"> <div align="center"> <h1>修改球員資訊</h1> <br/> <form action="/update" method="get" id="form2"> <table> <tr> <td colspan="2"></td> </tr> <tr> <td>球員編號:</td> <td><input type="text" name="pid" id="pid" th:value="${list.pid}"/></td> </tr> <tr> <td>球員姓名:</td> <td><input type="text" name="pname" id="pname" th:value="${list.pname}"/></td> </tr> <tr> <td>出身日期:</td> <td><input type="text" name="birthday" id="birthday" th:value="${list.birthday}"/></td> </tr> <tr> <td>球員身高:</td> <td><input type="text" name="height" id="height" th:value="${list.height}"/></td> </tr> <tr> <td>球員體重:</td> <td><input type="text" name="weight" id="weight" th:value="${list.weight}"/></td> </tr> <tr> <td>球員位置:</td> <td><input type="text" name="position" id="position" th:value="${list.position}"/></td> </tr> <tr> <td>所屬球隊:</td> <td> <select name="cid" id="cid" th:value="${list.cid}"/> <option value="">--請選擇球隊--</option> <option value="1">熱火隊</option> <option value="2">奇才隊</option> <option value="3">魔術隊</option> <option value="4">山貓隊</option> <option value="5">老鷹隊</option> </select></td> </tr> <tr> <td colspan="2"><input type="submit" id="btn2" value="儲存"/> <input type="reset" id="wrap-clera" value="重置"/> <a th:href="@{/index.html}" rel="external nofollow" ><input type="button" id="btn1" value="返回"/></a> </td> </tr> </table> </form> </div> </body> </html>
資料庫建立原始碼 -- 注意:我用的是MySQL資料庫
create table clubs( cid int primary key auto_increment, cname varchar(50) not null, city varchar(50) not null ) create table players( pid int primary key auto_increment, pname varchar(50) not null, birthday datetime not null, height int not null, weight int not null, position varchar(50) not null, cid int not null ) alter table players add constraint players_cid foreign key(cid) references clubs(cid); insert into clubs values (1,'熱火隊','邁阿密'), (2,'奇才隊','華盛頓'), (3,'魔術隊','奧蘭多'), (4,'山貓隊','夏洛特'), (5,'老鷹隊','亞特蘭大') insert into players values (4,'多多','1989-08-08',213,186,'前鋒',1), (5,'西西','1987-10-16',199,162,'中鋒',1), (6,'南南','1990-01-23',221,184,'後鋒',1)
最後給大家看一下頁面展示
在位址列輸入:http://localhost:8888/findAll 進入到查詢所有方法再跳轉到idnex.html進行顯示
點選新增跳轉到新增頁面
輸入引數
然後點選儲存 新增成功後跳轉到idnex.html並顯示資料
前端資料顯示錶面成功新增
點選修改 根據findById方法找到資料,並跳轉到update.htnl頁面進行顯示
我們修改所屬球隊為 奇才隊 點選儲存
跳轉到index.html頁面並且資料成功修改
到此這篇關於SpringBoot整合Mybatis與thymleft實現增刪改查功能詳解的文章就介紹到這了,更多相關SpringBoot Mybatis thymleft實現增刪改查內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45