SpringBoot + Mybatis增刪改查實(shí)戰(zhàn)記錄
簡(jiǎn)介
SpringBoot和Mybatis是啥請(qǐng)自行百度,作者這里也是花了幾天時(shí)間入門(mén)了這個(gè)框架用來(lái)完成任務(wù),并且也算符合要求的完成了任務(wù),期間也各種百度但是沒(méi)找到自己想要的那種簡(jiǎn)單易懂的教程,所以踩了很多坑,寫(xiě)這個(gè)博客的目的就是為了讓大家少踩一點(diǎn)坑,開(kāi)始。
創(chuàng)建一個(gè)SpringBoot項(xiàng)目https://start.spring.io/
點(diǎn)開(kāi)這個(gè)網(wǎng)站,創(chuàng)建一個(gè)Springboot項(xiàng)目,如下圖,這里用的是2.1.5,學(xué)技術(shù)嘛,就是要學(xué)新的。
選擇依賴(lài),點(diǎn)擊左下角的Dependencies
- Web 我們這次開(kāi)發(fā)的是web應(yīng)用所以選擇web
- Thymeleaf 一款模板引擎,能夠比較方便的展現(xiàn)后臺(tái)傳來(lái)的數(shù)據(jù)
- MySQL 我們這次使用Mysql數(shù)據(jù)庫(kù)
- JDBC Java 數(shù)據(jù)庫(kù)連接 Java Database Connectivity,簡(jiǎn)稱(chēng)JDBC
- MyBatis 請(qǐng)看第一段
最后點(diǎn)擊左下角的Generate Project,將會(huì)開(kāi)始下載一個(gè)以你項(xiàng)目名稱(chēng)開(kāi)頭的zip文件,下載完成后解壓到你的工作目錄。
打開(kāi)這個(gè)項(xiàng)目
這里使用的是IDEA,別的啥也行比如eclipse,這里只講解IDEA的操作,安裝破解IDEA百度一大堆,安裝好之后打開(kāi)IDEA(發(fā)現(xiàn)IDEA有個(gè)問(wèn)題,有的時(shí)候自動(dòng)import包好用,有的時(shí)候不好用,坑?。?,然后選擇左上角的File->Open,找到你剛剛解壓的項(xiàng)目文件里的pom.xml點(diǎn)擊ok如下圖
目錄結(jié)構(gòu)
增加修改目錄結(jié)構(gòu)為下圖
開(kāi)始編寫(xiě)
這里我們就編寫(xiě)一個(gè)人員信息的增刪改查
配置數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)創(chuàng)建
打開(kāi)mysql數(shù)據(jù)庫(kù)創(chuàng)建一個(gè)叫test的數(shù)據(jù)庫(kù)之后創(chuàng)建person表,這里使用的是Navicat百度有破解版,會(huì)命令用命令行也行,如下圖,記得設(shè)置主鍵自增,然后隨便加幾個(gè)數(shù)據(jù)以便之后查詢。
application.yml
路徑:/resources/application.yml
server: port: 8080 spring: datasource: name: url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=UTC username: root password: root mybatis: mapper-locations: classpath:mapper/*.xml
Person類(lèi)
路徑/model/Person.java
package com.ljsh.test.model; public class Person { /* {id} 自增主鍵 {name} 人員姓名 {mobile} 人員電話 */ private int id; private String name; private String mobile; // 右鍵 Generate -> Setter and Getter -> Shift全選 -> ok 生成如下代碼 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getMobile() { return mobile; } public void setMobile(String mobile) { this.mobile = mobile; } // 右鍵 Generate -> toString() -> 全選 -> ok 生成如下代碼 @Override public String toString() { return "Person{" + "id=" + id + ", name='" + name + '\'' + ", mobile='" + mobile + '\'' + '}'; } }
PersonDao
路徑:/dao/PersonDao.java
package com.ljsh.test.dao; import com.ljsh.test.model.Person; import org.apache.ibatis.annotations.Mapper; import java.util.List; @Mapper public interface PersonDao { /* 查所有 return List<Person> */ List<Person> getAll(); /* 根據(jù)ID查詢 {id} 要查詢?nèi)藛T的 id */ Person getPersonByID(int id); /* 刪除 {id} 要?jiǎng)h除人員的 id */ void delete(int id); /* 更新 {p} 要更新的Person實(shí)例 */ void update(Person p); /* 增加 {p} 要新增的Person實(shí)例 */ void newp(Person p); }
PersonDao.xml
路徑:/mapper/PersonDao.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" > <!-- 這里填寫(xiě)對(duì)應(yīng)的Dao文件所在的路徑 --> <mapper namespace="com.ljsh.test.dao.PersonDao" > <!-- 填寫(xiě)數(shù)據(jù)庫(kù)里實(shí)例Person對(duì)應(yīng)的表的表名 --> <!-- 這里是作為一個(gè)變量使用 --> <sql id="table">person</sql> <!-- id屬性填寫(xiě)Dao文件里的函數(shù)名稱(chēng) xxType是參數(shù)或是結(jié)果的類(lèi)型根據(jù)情況填寫(xiě) --> <!-- 查詢所有 --> <select id="getAll" resultType="com.ljsh.test.model.Person"> SELECT * FROM <include refid="table" /> </select> <!-- 根據(jù)id查詢 --> <select id="getPersonById" resultType="com.ljsh.test.model.Person"> SELECT * FROM <include refid="table"/> WHERE id = #{id} </select> <!-- 增 --> <insert id="newp" parameterType="com.ljsh.test.model.Person"> INSERT INTO <include refid="table"/> (name,phone) VALUES (#{name},#{phone}) </insert> <!-- 改 --> <update id="update" parameterType="com.ljsh.test.model.Person"> UPDATE <include refid="table"/> SET <!--<if test="name != null">name = #{name}</if>--> name = #{name},phone = #{phone},status = #{status} WHERE id = #{id} </update> <!-- 刪 --> <delete id="delete" parameterType="com.ljsh.test.model.Person"> DELETE FROM <include refid="table"/> WHERE id = #{id} </delete> </mapper>
PersonService
路徑:/service/PersonService.java
package com.ljsh.test.service; import com.ljsh.test.dao.PersonDao; import com.ljsh.test.model.Person; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class PersonService { @Autowired PersonDao personDao; /* Service層介于controller和dao之間作為服務(wù)層進(jìn)行一些邏輯處理, 這里邏輯太簡(jiǎn)單所以知識(shí)單純調(diào)用dao所以不做注釋 */ public List<Person> getAll(){ return personDao.getAll(); } public Person getPersonByID(int id){ return personDao.getPersonByID(id); } public void delete(int id){ personDao.delete(id); } public void update(Person p){ personDao.update(p); } public void newp(Person p){ personDao.newp(p); } }
PersonController
路徑:/controller/PersonController.java
package com.ljsh.test.controller; import com.ljsh.test.model.Person; import com.ljsh.test.service.PersonService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import java.util.List; @Controller public class PersonController { @Autowired PersonService personService; // 設(shè)置訪問(wèn)路由值為路徑 @RequestMapping("/") public ModelAndView index(){ // 顧名思義 實(shí)體和數(shù)據(jù) 同時(shí)返回頁(yè)面模板和數(shù)據(jù) ModelAndView mav = new ModelAndView("index"); List<Person> list = personService.getAll(); mav.addObject("list",list); return mav; } }
前端頁(yè)面
路徑:/templates/index.html
<!DOCTYPE html> <html lang="en"> <!-- --> <!-- 使用thymeleaf需引入 --> <html xmlns:th="http://www.thymeleaf.org"> <head> </head> <body> <div id="tableP"> <table> <caption>人員信息</caption> <tr> <th>Name</th> <th>Phone</th> </tr> <!-- 通過(guò)th命令使用一些操作 --> <!-- 通過(guò)${} 使用變量 --> <tr th:each="item: ${list}"> <td th:text="${{item.name}}">還沒(méi)有任何人員信息哦</td> <td th:text="${{item.mobile}}">你是不是想獨(dú)吞獎(jiǎng)品</td> </tr> </table> </div> </div> </body> </html>
右上角運(yùn)行
要是沒(méi)有這個(gè)可以右側(cè)選擇TestApplication右鍵Run,結(jié)果圖如下
未完待續(xù)
熄燈睡覺(jué)了,寫(xiě)的有點(diǎn)慢,刪改查還沒(méi)來(lái)及寫(xiě),如果需求留言,我會(huì)繼續(xù)更新。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
mybatis注解動(dòng)態(tài)sql注入map和list方式(防sql注入攻擊)
這篇文章主要介紹了mybatis注解動(dòng)態(tài)sql注入map和list方式(防sql注入攻擊),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2021-11-11java關(guān)鍵字final用法知識(shí)點(diǎn)
在本篇文章里小編給大家分享的是關(guān)于java關(guān)鍵字final用法知識(shí)點(diǎn)以及相關(guān)實(shí)例內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。2019-09-09Java觀察者模式之實(shí)現(xiàn)對(duì)象間的一對(duì)多依賴(lài)
這篇文章主要介紹了Java觀察者模式之實(shí)現(xiàn)對(duì)象間的一對(duì)多依賴(lài)的方法,Java觀察者模式是一種行為型設(shè)計(jì)模式,用于實(shí)現(xiàn)對(duì)象之間的消息傳遞和通信,文中有詳細(xì)的實(shí)現(xiàn)步驟和代碼示例,,需要的朋友可以參考下2023-05-05Java實(shí)現(xiàn)文件壓縮與解壓的示例[zip格式,gzip格式]
本篇文章主要介紹了Java實(shí)現(xiàn)文件壓縮與解壓的示例[zip格式,gzip格式],具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-01-01基于Spring中各個(gè)jar包的作用及依賴(lài)(詳解)
下面小編就為大家?guī)?lái)一篇基于Spring中各個(gè)jar包的作用及依賴(lài)(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11Alibaba?SpringCloud集成Nacos、openFeign實(shí)現(xiàn)負(fù)載均衡的解決方案
Spring?Cloud?Alibaba?致力于提供微服務(wù)開(kāi)發(fā)的一站式解決方案,此項(xiàng)目包含開(kāi)發(fā)分布式應(yīng)用微服務(wù)的必需組件,這篇文章主要介紹了Alibaba?SpringCloud集成Nacos、openFeign實(shí)現(xiàn)負(fù)載均衡,需要的朋友可以參考下2024-05-05分析設(shè)計(jì)模式之模板方法Java實(shí)現(xiàn)
所謂模板方法模式,就是一個(gè)對(duì)模板的應(yīng)用,就好比老師出試卷,每個(gè)人的試卷都是一樣的,這個(gè)原版試卷就是一個(gè)模板,可每個(gè)人寫(xiě)在試卷上的答案都是不一樣的,這就是模板方法模式。它的主要用途在于將不變的行為從子類(lèi)搬到超類(lèi),去除了子類(lèi)中的重復(fù)代碼2021-06-06