首先我們先建立專案注意:建立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
tempsuffix:## cache: false
tempsuffix: .html#c: class.html#: class /
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"> <h2 id="美国职业篮球联盟-NBA-球员信息">美国职业篮球联盟(NBA)球员信息</h2> <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"> <h4 id="新增球员">新增球员</h4> <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"> <h2 id="修改球员信息">修改球员信息</h2> <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頁面並且資料成功修改################跳到index.html頁面並且資料成功修改###以上是SpringBoot怎麼整合Mybatis與thymleft實現增刪改查功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

新興技術對Java的平台獨立性既有威脅也有增強。 1)雲計算和容器化技術如Docker增強了Java的平台獨立性,但需要優化以適應不同雲環境。 2)WebAssembly通過GraalVM編譯Java代碼,擴展了其平台獨立性,但需與其他語言競爭性能。

不同JVM實現都能提供平台獨立性,但表現略有不同。 1.OracleHotSpot和OpenJDKJVM在平台獨立性上表現相似,但OpenJDK可能需額外配置。 2.IBMJ9JVM在特定操作系統上表現優化。 3.GraalVM支持多語言,需額外配置。 4.AzulZingJVM需特定平台調整。

平台獨立性通過在多種操作系統上運行同一套代碼,降低開發成本和縮短開發時間。具體表現為:1.減少開發時間,只需維護一套代碼;2.降低維護成本,統一測試流程;3.快速迭代和團隊協作,簡化部署過程。

Java'splatformindependencefacilitatescodereusebyallowingbytecodetorunonanyplatformwithaJVM.1)Developerscanwritecodeonceforconsistentbehavioracrossplatforms.2)Maintenanceisreducedascodedoesn'tneedrewriting.3)Librariesandframeworkscanbesharedacrossproj

要解決Java應用程序中的平台特定問題,可以採取以下步驟:1.使用Java的System類查看系統屬性以了解運行環境。 2.利用File類或java.nio.file包處理文件路徑。 3.根據操作系統條件加載本地庫。 4.使用VisualVM或JProfiler優化跨平台性能。 5.通過Docker容器化確保測試環境與生產環境一致。 6.利用GitHubActions在多個平台上進行自動化測試。這些方法有助於有效地解決Java應用程序中的平台特定問題。

類加載器通過統一的類文件格式、動態加載、雙親委派模型和平台無關的字節碼,確保Java程序在不同平台上的一致性和兼容性,實現平台獨立性。

Java編譯器生成的代碼是平台無關的,但最終執行的代碼是平台特定的。 1.Java源代碼編譯成平台無關的字節碼。 2.JVM將字節碼轉換為特定平台的機器碼,確保跨平台運行但性能可能不同。

多線程在現代編程中重要,因為它能提高程序的響應性和資源利用率,並處理複雜的並發任務。 JVM通過線程映射、調度機制和同步鎖機制,在不同操作系統上確保多線程的一致性和高效性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。