亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java之SpringBoot實(shí)現(xiàn)基本增刪改查(前后端分離版)

 更新時(shí)間:2023年03月30日 09:21:21   作者:Fish_Vast  
這篇文章主要介紹了Java中SpringBoot如何實(shí)現(xiàn)基本的增刪改查,前后端分離版,沒有和前端進(jìn)行聯(lián)系,感興趣的小伙伴可以借鑒閱讀本文

根據(jù)上圖所示,idea中我們有7個(gè)比較重要的模塊需要建立

(1)controller包:如果學(xué)習(xí)過或者對(duì)SpringMVC有所了解的小伙伴,肯定知道,controller是控制層,相當(dāng)于我們的接收瀏覽器信息并響應(yīng)發(fā)送相關(guān)信息的地方,具體的還結(jié)合計(jì)算機(jī)網(wǎng)絡(luò)相關(guān)知識(shí),了解在瀏覽器中如何接收信息,并如何響應(yīng)信息,在controller控制層下我們實(shí)現(xiàn)相關(guān)數(shù)據(jù)操縱(此處特別鳴謝我研究生生涯階段的師兄給我講解了很久關(guān)于Web編程方面的知識(shí),收益良多。希望大家利用相關(guān)時(shí)間,多去查詢資料和相關(guān)視頻進(jìn)行學(xué)習(xí));
(2)entity包:這里存放我們的實(shí)體類,跟單純學(xué)java里面建立類一模一樣,沒有區(qū)別;
(3)mapper包:SpringMVC中稱之為持久層也就是(DAO層(數(shù)據(jù)訪問對(duì)象)),這里可以直接對(duì)數(shù)據(jù)庫進(jìn)行操作,一般與第五個(gè)包mapping包連用;
(4)service包:SpringMVC中稱之為業(yè)務(wù)邏輯層,所以這里存放的類都是處理相關(guān)的業(yè)務(wù)邏輯;
(5)mapping包:放在resources下面作為classpath,存放的mybatis文件,因?yàn)楝F(xiàn)在的SpringBoot集成性很強(qiáng),把很多配置文件都可以放在一塊,哪怕是沒有太多的mybatis基礎(chǔ)的小伙伴也可以進(jìn)行學(xué)習(xí)。之所以說mapper包與mapping包是一起連用,是因?yàn)樗鼈冃纬捎成潢P(guān)系,它們兩的結(jié)合使用來訪問我們的數(shù)據(jù)庫文件;
(6)application.yml:作為全局默認(rèn)配置文件,適用于整個(gè)項(xiàng)目,要整合我們這么多的配置信息,這個(gè)配置文件肯定少不了(此處最好是使用yaml語言編寫配置文件,因?yàn)榫帉懴鄬?duì)而言簡(jiǎn)單明朗一些);
(7)application-dev.yml:這個(gè)算是具體某個(gè)環(huán)境的配置文件,具體要結(jié)合我們的實(shí)際項(xiàng)目。因?yàn)轫?xiàng)目本身不只是開發(fā)環(huán)境,還有測(cè)試、生產(chǎn)等一系列環(huán)境。當(dāng)我們做開發(fā)是用開發(fā)的環(huán)境配置application-dev.yml,當(dāng)我們做測(cè)試的時(shí)候用測(cè)試的環(huán)境配置application-test.yml,當(dāng)我們做生產(chǎn)的時(shí)候用的是生產(chǎn)的環(huán)境配置application-pro.yml。目前我們暫時(shí)只說開發(fā)環(huán)境,所以就只用到了一個(gè)配置文件application-dev.yml。具體的某個(gè)環(huán)境配置信息在使用時(shí)會(huì)覆蓋applicaiton.yml的默認(rèn)配置,所以,不用擔(dān)心默認(rèn)配置中的語句與環(huán)境配置中的語句發(fā)生沖突。

(1)程序入口

每個(gè)java程序都有程序入口,DemoApplication本身在我們初始化SpringBoot時(shí)就已經(jīng)存在了,我們?cè)谶@里不需要做過多的配置。

package com.example.demo;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@MapperScan("com.example.demo.mapper")
@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

●@SpringBootApplication注解:是用來表示這是一個(gè)springboot項(xiàng)目的啟動(dòng)項(xiàng)類,目的是開啟自動(dòng)配置(其實(shí)它是繼承于Configuration配置類,深解需要大家去剖析SpringBoot的原理)
●@MapperScan(“com.example.demo.mapper”)是為了掃描我們的mapper文件,進(jìn)行有效訪問相關(guān)數(shù)據(jù)庫文件URL映射(這個(gè)注解的作用很大!)

(2)建立數(shù)據(jù)庫文件

●相應(yīng)的sql創(chuàng)建表語句如下所示:

CREATE TABLE `water` (
  `id` int NOT NULL,
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `salary` double(10,2) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_unicode_ci;

(3)建立User實(shí)體類

package com.example.demo.entity;

/**
 * @description:    實(shí)體類
 * @author: Fish_Vast
 * @Date: 2021/8/25
 * @version: 1.0
 */
public class User {
    private String name;
    private Integer id;
    private Double salary;

    public User() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Double getSalary() {
        return salary;
    }

    public void setSalary(Double salary) {
        this.salary = salary;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", id=" + id +
                ", salary=" + salary +
                '}';
    }
}

●這里想必大家不會(huì)陌生,這是純Java基礎(chǔ)都能編寫出來的類,建立三個(gè)私有屬性,一個(gè)空參構(gòu)造器,相應(yīng)的get、set方法,還重寫了一個(gè)toString()方法。這里值得注意的點(diǎn)是在聲明屬性時(shí),最好是使用包裝類進(jìn)行聲明。
●在Java中跟mybatis相關(guān)的讀取與錄入,為何盡量使用包裝類而不使用基本數(shù)據(jù)類型呢?
①在MySQL中沒有給字段賦值默認(rèn)為null,當(dāng)你從數(shù)據(jù)庫中查出來也是null,如果該字段在對(duì)應(yīng)的Java代碼中是int類型,null不能對(duì)應(yīng)int類型,因?yàn)閕nt代表的是基本數(shù)據(jù)類型,只能是基本的數(shù)字。
②實(shí)體類的屬性可以給它賦值也可以不給它賦值,當(dāng)你不給它賦值時(shí),它擁有默認(rèn)值,比如int的默認(rèn)值就為0。但是主動(dòng)為它設(shè)置值為0與它默認(rèn)為0是兩個(gè)不同的概念。比如,一個(gè)班的成績(jī):0代表某學(xué)生分?jǐn)?shù)為0,而null代表這個(gè)學(xué)生該門考試沒有成績(jī),這是兩個(gè)不同的概念。

(4)建立UserMapper接口

package com.example.demo.mapper;

import com.example.demo.entity.User;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface UserMapper {
    //1.通過id查詢用戶信息
    User getUser(int id);
    //2.通過id刪除用戶信息
    int delete(int id);
    //3.更改用戶信息
    int update(User user);
    //4.插入用戶信息
    int save(User user);
    //5.查詢所有用戶信息
    List<User> selectAll();
}

●@Repository,注解它本身的作用便是標(biāo)注數(shù)據(jù)訪問組件,作為DAO對(duì)象,它將 DAO 導(dǎo)入 IoC 容器,并使未經(jīng)檢查的異常有資格轉(zhuǎn)換為 Spring DataAccessException。通過這個(gè)注解能夠報(bào)出更多發(fā)現(xiàn)不了的錯(cuò)誤,更有利于對(duì)項(xiàng)目的維護(hù)和開發(fā)。其實(shí)@Repository不在接口上進(jìn)行注明,我們的程序照樣可以運(yùn)行,因?yàn)樵谖覀兪褂聾MapperScan的時(shí)候,我們已經(jīng)將我們的接口交給框架中的代理類,所以即便是我們不寫,程序不會(huì)報(bào)錯(cuò),只是我們?cè)赟ervice層寫明接口的時(shí)候,IDEA會(huì)給出紅色的波浪線。可以這樣理解,標(biāo)注@Repository是為了告訴編譯器我將接口注入到了IoC容器了,你不要報(bào)錯(cuò)啦~
●相應(yīng)地,寫出增刪查改和查詢?nèi)啃畔⒌奈鍌€(gè)方法。

(5)配置UserMapper.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.demo.mapper.UserMapper">
    <resultMap id="BaseResultMap" type="com.example.demo.entity.User">
        <result column="id" jdbcType="INTEGER" property="id" />
        <result column="name" jdbcType="VARCHAR" property="name" />
        <result column="salary" jdbcType="DOUBLE" property="salary" />
    </resultMap>
    <!--查詢用戶信息-->
    <select id="getUser" resultType="com.example.demo.entity.User">
        select * from water where id = #{id}
    </select>
    <!--刪除用戶信息-->
    <delete id="delete" parameterType="int">
        delete from water where id=#{id}
    </delete>
    <!--返回所有用戶信息-->
    <select id="selectAll"  resultType="com.example.demo.entity.User">
        select * from water
    </select>

    <!--增加用戶信息-->
    <insert id="save" parameterType="com.example.demo.entity.User" >
        insert into water
        <trim prefix="(" suffix=")" suffixOverrides="," >
            <if test="id != null" >
                id,
            </if>
            <if test="name != null" >
                name,
            </if>
            <if test="salary != null" >
                salary,
            </if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides="," >
            <if test="id != null" >
                #{id,jdbcType=INTEGER},
            </if>
            <if test="name != null" >
                #{name,jdbcType=VARCHAR},
            </if>
            <if test="salary != null" >
                #{salary,jdbcType=DOUBLE},
            </if>
        </trim>
    </insert>

    <!--根據(jù)id更改用戶信息-->
    <update id="update" parameterType="com.example.demo.entity.User">
        update water
        <set >
            <if test="name != null" >
                name = #{name,jdbcType=VARCHAR},
            </if>
            <if test="salary != null" >
                salary = #{salary,jdbcType=DOUBLE},
            </if>
        </set>
        where id = #{id,jdbcType=INTEGER}
    </update>
</mapper>

●mapper namespace用于綁定mapper接口的,當(dāng)你的namespace綁定接口后,你可以不用寫接口實(shí)現(xiàn)類,mybatis會(huì)通過該綁定自動(dòng)幫你找到對(duì)應(yīng)要執(zhí)行的SQL語句(通過mapper方法名進(jìn)行綁定);
●resultMap 定義了一個(gè)id為BaseResultMap的標(biāo)識(shí),type代表使用哪種類作為我們所要映射的類;
●<select id="getUser" resultType="com.example.demo.entity.User">在這里中的id = “xxx” ,必須要和mapper接口方法名保持一致,如果不一致,程序會(huì)報(bào)相應(yīng)的錯(cuò)誤。

(6)建立UserService類

package com.example.demo.service;

import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @description:	實(shí)現(xiàn)類,對(duì)進(jìn)行相關(guān)的業(yè)務(wù)邏輯
 * @author: Fish_Vast
 * @Date: 2021/8/25
 * @version: 1.0
 */
@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    public User getUser(int id){    
        return userMapper.getUser(id);
    }

    public int delete(int id){
        return userMapper.delete(id);
    }

    public int update(User user){
        return userMapper.update(user);
    }

    public int save(User user){
        return userMapper.save(user);
    }

    public List<User>  selectAll(){
        return userMapper.selectAll();
    }
}

●這里我特別說明一下,private UserMapper userMapper既可以當(dāng)做是引用數(shù)據(jù)類型,也可以作為接口對(duì)象進(jìn)行使用,這里我們當(dāng)接口對(duì)象使用(初次接觸的時(shí)候肯定對(duì)這個(gè)會(huì)有些許疑問,很正常,因?yàn)槲耶?dāng)時(shí)對(duì)于這個(gè)接口也糾結(jié)了很久哦);
●@Service表示我們?cè)跇I(yè)務(wù)邏輯層進(jìn)行操縱,屬于自動(dòng)配置的環(huán)節(jié);
●相應(yīng)的五個(gè)方法,通過對(duì)象得到相應(yīng)返回值給UserMapper接口。

(7)建立UserController類

package com.example.demo.controller;

import com.example.demo.entity.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.xml.ws.Service;
import java.util.List;

/**
 * @description:	控制器,接收并響應(yīng)相關(guān)信息
 * @author: Fish_Vast
 * @Date: 2021/8/25
 * @version: 1.0
 */
@RestController
@RequestMapping("/seven")
public class UserController {
    @Autowired
    private UserService userService;
    //通過id得到用戶信息
    @RequestMapping(value = "/getUser/{id}", method = RequestMethod.GET)
    public String getUser(@PathVariable int id){
        return userService.getUser(id).toString();
    }
    //通過id刪除用戶信息
    @RequestMapping(value = "/delete", method = RequestMethod.GET)
    public String delete(int id){
        int result = userService.delete(id);
        if(result >= 1){
            return "刪除成功!";
        }else{
            return "刪除失敗!";
        }
    }
    //更改用戶信息
    @RequestMapping(value = "/update", method = RequestMethod.GET)
    public String update(User user){
        int result = userService.update(user);
        if(result >= 1){
            return "更新成功!";
        }else{
            return "更新失??!";
        }
    }
    //插入用戶信息
    @RequestMapping(value = "/insert", method = RequestMethod.GET)
    public int insert(User user){
        return userService.save(user);
    }
    //查詢所有用戶的信息
    @RequestMapping(value = "/selectAll")
    @ResponseBody   //理解為:?jiǎn)为?dú)作為響應(yīng)體,這里不調(diào)用實(shí)體類的toString方法
    public List<User>  listUser(){
        return userService.selectAll();
    }
}

●@RestController注解:就表示我們?cè)诳刂茖幽K??刂茖邮亲鳛镾pringMVC最重要的一個(gè)環(huán)節(jié),進(jìn)行前端請(qǐng)求的處理,轉(zhuǎn)發(fā),重定向,還包括調(diào)用Service方法;
●@RequestMapping注解:處理請(qǐng)求和控制器方法之間的映射關(guān)系;
●@ResponseBody注解:將返回的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為JSON格式響應(yīng)到瀏覽器(這里說得比較籠統(tǒng),只是簡(jiǎn)單滴給大家說明一下,水平還不夠,認(rèn)識(shí)還不深,不到之處還請(qǐng)見諒!);
●更多的注解解釋,還需要大家多去學(xué)習(xí)一下SpringMVC和SpringBoot,這里面會(huì)詳細(xì)地介紹,在這里我只是做了很粗略的說明而已(本人也是正接觸不久,正在努力學(xué)習(xí)當(dāng)中)。

(8)配置application.yml文件

spring:
  profiles:
    active: dev

●語句很簡(jiǎn)單,指明我們要使用的開發(fā)環(huán)境配置文件

(9)配置application-dev.yml

#服務(wù)器端口配置
server:
  port: 8081

#數(shù)據(jù)庫配置
spring:
  datasource:
    username: 數(shù)據(jù)庫名稱
    password: 賬號(hào)密碼
    url: jdbc:mysql://localhost:3306/user?useUnicode=true&characterEncoding=utf-8&nullCatalogMeansCurrent=true&useSSL=true&&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.cj.jdbc.Driver

#mybatis配置
mybatis:
  mapper-locations: classpath:mapping/*.xml
  type-aliases-package: com.example.demo.entity

#showSQL
logging:
  level:
    com.example.demo.entity: debug

●在開發(fā)配置文件當(dāng)中,我們配置好我們的服務(wù)器端口號(hào)、數(shù)據(jù)庫的配置、mybatis的配置和如何展示我們的Sql;
●其中要注意的是,數(shù)據(jù)庫的配置中的username和password使用我們安裝MySQL數(shù)據(jù)庫時(shí)使用的賬號(hào)名稱和密碼,url中的3306/緊跟著我們的數(shù)據(jù)庫名稱,如果建立的數(shù)據(jù)庫名稱不一致,也需要進(jìn)行修改。

(10)效果展示

通過以上9個(gè)步驟,我們從第(1)個(gè)步驟程序入口處點(diǎn)擊運(yùn)行按鈕,在瀏覽器中輸入相應(yīng)指令即可得到不同的展示信息:(到這一步,大概知道為啥要使用@MapperScan注解了吧,可以直接將掃描到的包文件交到代理類中,SpringBoot就是很人性化的框架!)

①查詢操作:http://localhost:8081/seven/getUser/1

②刪除操作:http://localhost:8081/seven/delete?id=14

③更改操作:http://localhost:8081/seven/update?id=1&name=小丸子&salary=12000

④插入操作:http://localhost:8081/seven/insert?id=15&name=浩子&salary=13000

⑤查詢?nèi)坑脩粜畔ⅲ篽ttp://localhost:8081/seven/selectAll

到此這篇關(guān)于Java之SpringBoot實(shí)現(xiàn)基本增刪改查(前后端分離版)的文章就介紹到這了,更多相關(guān)SpringBoot增刪改查內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java Socket編程簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java Socket編程簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了Java Socket編程簡(jiǎn)介的相關(guān)知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-05-05
  • Jenkins遷移job插件Job Import Plugin流程詳解

    Jenkins遷移job插件Job Import Plugin流程詳解

    這篇文章主要介紹了Jenkins遷移job插件Job Import Plugin流程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 詳解JAVA中獲取文件MD5值的四種方法

    詳解JAVA中獲取文件MD5值的四種方法

    這篇文章主要介紹了JAVA中獲取文件MD5值的四種方法,獲取文件MD5值主要分為三個(gè)步驟,第一步獲取文件的byte信息,第二步通過MessageDigest類進(jìn)行MD5加密,第三步轉(zhuǎn)換成16進(jìn)制的MD5碼值,需要的朋友可以參考下
    2022-08-08
  • SpringBoot使用hutool-captcha實(shí)現(xiàn)驗(yàn)證碼生成與驗(yàn)證

    SpringBoot使用hutool-captcha實(shí)現(xiàn)驗(yàn)證碼生成與驗(yàn)證

    在springboot的登陸頁面中為了防止機(jī)器大規(guī)模注冊(cè),機(jī)器暴力破解數(shù)據(jù)密碼等危害,需要驗(yàn)證隨機(jī)生成的驗(yàn)證碼,本文主要介紹了SpringBoot使用hutool-captcha實(shí)現(xiàn)驗(yàn)證碼生成與驗(yàn)證,感興趣的可以了解一下
    2023-12-12
  • 詳解Java 序列化與反序列化(Serialization)

    詳解Java 序列化與反序列化(Serialization)

    這篇文章主要介紹了Java 序列化與反序列化(Serialization),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí) 吧
    2019-03-03
  • Java實(shí)現(xiàn)醫(yī)院管理系統(tǒng)

    Java實(shí)現(xiàn)醫(yī)院管理系統(tǒng)

    這篇文章主要介為大家詳細(xì)紹了Java實(shí)現(xiàn)醫(yī)院管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • 兼容Spring Boot 1.x和2.x配置類參數(shù)綁定的工具類SpringBootBindUtil

    兼容Spring Boot 1.x和2.x配置類參數(shù)綁定的工具類SpringBootBindUtil

    今天小編就為大家分享一篇關(guān)于兼容Spring Boot 1.x和2.x配置類參數(shù)綁定的工具類SpringBootBindUtil,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Spring AOP事務(wù)管理的示例詳解

    Spring AOP事務(wù)管理的示例詳解

    這篇文章將通過轉(zhuǎn)賬案例為大家詳細(xì)介紹一下Spring AOP是如何進(jìn)行事務(wù)管理的,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-06-06
  • 登錄EasyConnect后無法通過jdbc訪問服務(wù)器數(shù)據(jù)庫問題的解決方法

    登錄EasyConnect后無法通過jdbc訪問服務(wù)器數(shù)據(jù)庫問題的解決方法

    描述一下近期使用EasyConnect遇到的問題,下面這篇文章主要給大家介紹了關(guān)于登錄EasyConnect后無法通過jdbc訪問服務(wù)器數(shù)據(jù)庫問題的解決方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • Mybatisplus集成springboot完成分頁查詢功能(示例代碼)

    Mybatisplus集成springboot完成分頁查詢功能(示例代碼)

    今天小編給大家分享Mybatisplus集成springboot完成分頁查詢功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2023-11-11

最新評(píng)論