SpringBoot-MySQL(查詢)


  • 數據的傳輸

http請求(由用戶輸入)---- 由controller接收獲得的數據 ---- 由mapper對數據庫執行操作 ------到達sql

同時也包含了entity層,存放實體類,實現了set和get方法,與數據庫的屬性基本保持一致

包中包含了entity(實體類),controller,mapper

 

  • 增加依賴

添加了兩個依賴庫,分別為MySQL和Mybatis

某些依賴需要進行配置,否則會運行報錯

        <!--MySQL-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!--Mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.0.1</version>
        </dependency>
  • 配置

對spring,需要設置該服務應用的名稱

spring.application.name = server-mybatis

對sever,需要設置通信的端口

server.port = 8080

對Mabatis依賴,需要設置通信的網址,用戶名,密碼

設置MySQL的請求網址

spring.datasourse.url= jdbc:mysql://localhost:3306/test?user=root&password=&useUnicode=true&characterEncoding=gbk&autoReconnect=true&failOverReadOnly=false

格式為idbc:mysql://服務器名:端口號/數據庫名?參數1&參數2

此處的數據庫名指的是use database中的database

建議加上如下參數避免時區錯誤

serverTimezone=Asia/Shanghai&allowMultiQueries=true

 

user 數據庫用戶名(用於連接數據庫)   所有版本
password 用戶密碼(用於連接數據庫)   所有版本
useUnicode 是否使用Unicode字符集,如果參數characterEncoding設置為gb2312或gbk,本參數值必須設置為true false 1.1g
characterEncoding 當useUnicode設置為true時,指定字符編碼。比如可設置為gb2312或gbk false 1.1g
autoReconnect 當數據庫連接異常中斷時,是否自動重新連接? false 1.1
autoReconnectForPools 是否使用針對數據庫連接池的重連策略 false 3.1.3
failOverReadOnly 自動重連成功后,連接是否設置為只讀? true 3.0.12

也可以設置用戶名和密碼

spring.datasourse,username = root
spring.datasourse,password = ******

指定Mybatis對應實體類的包名(mapper),主要是進行映射

mybatis.typeAliasesPackage = com.Lee.connect.mapper
  •  controller
package com.Lee.connect.controller;

import com.Lee.connect.mapper.UserMapper;
import com.Lee.connect.table.TableUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping(value = "/")
public class UserController{
    @Autowired
    UserMapper userMapper;
    @RequestMapping(value = "/getUser")
    @ResponseBody
    public Object getUser(){
        TableUser user = userMapper.getUserById(2);
        return user;
    }
}

@Controller表示當前類為一個控制器,加載在類上

@RequestMapping來映射請求,也就是通過它來指定控制器可以處理哪些URL請求,其被加載在了當前方法上(也可以加載在類上)

擁有參數

value:指定請求的實際地址,指定的地址可以是URI Template 模式(后面將會說明);

method: 指定請求的method類型, GET、POST、PUT、DELETE等

@Controller
@RequestMapping(value = "/", method = RequestMethod.GET)
public class ContactController {

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String redirectToContactPage() {
        return  "redirect:contact";
    }

    @RequestMapping(value = "/admin", method = RequestMethod.GET)
    public String toAdminPage() {
        return "admin";
    }

    @RequestMapping(value = "/contact", method = RequestMethod.GET)
    public String toContactForOhersPage() {
        return "contact";
    }
}

在上面的例子中,@RequestMapping加在了類和方法上

訪問/的請求會被ContactControllerredirectToContactPage()方法處理(加載在類上)

訪問/admin的請求會被ContactControllertoAdminPage()方法處理(加載在類的方法上)

其指定了不同請求對應要調用的方法

@ResponseBody加載在類的方法上,將controller的方法返回的對象通過適當的轉換器轉換為指定的格式之后,寫入到response對象的body區,通常用來返回JSON數據或者是XML數據

@Autowired,可以對類成員變量、方法及構造函數進行標注,完成自動裝配的工作

此處將mapper中的類方法重新定義了一個新的對象,用於后續在方法中調用(使用了mapper中定義的getuserbyid方法)

controller由以下結構組成

(頭部兩個注解)

定義@Controller

定義@RequestMapping

(一個類)

使用@Autowired將mapper類對象進行轉換(此處就將controller和mapper連接起來)

加載@ResponseBody和@RequestMapping到方法中(此處就將controller和http請求連接起來)

方法中使用剛剛的轉換中的mapper對象(實際上就是一個接口)中方法獲得一個結果,將結果賦值給一個object(實際上是entity類對應的實例對象,此處就將controllrt和entity連接了起來)並進行返回

  • mapper
package com.Lee.connect.mapper;

import com.Lee.connect.table.TableUser;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Component;

@Mapper
@Component(value = "UserMapper")
public interface UserMapper {

    @Select("select * from t1 where id=#{id};")
    TableUser getUserById(@Param("id") Integer id);
    
}

mapper實際上是一個接口,controller通過繼承這個接口來獲得mapper中的方法進行使用

(接口只定義方法)

@Mapper定義該類是一個映射類

@component ,當類不屬於各種歸類的時候(不屬於@Controller、@Services等的時候),可以使用@Component來標注這個類

使用value參數,參數名為當前類名,只有使用這種方式,當前的類才會被划入spring的容器中去

(使用@component才能對該類使用@Autowired)

@Select(“    ”),其內加上sql語句即可,其可以加載到方法上

此處為sql中的select關鍵字,同時當然也有@Delete,@Update,@Insert等等

@Param主要用於傳遞參數

在方法參數的前面寫上@Param("參數名"),表示給參數命名,名稱就是括號中的內容

例如public Student select(@Param("aaaa") String name,@Param("bbbb")int class_id);

給參數 String name 命名為aaaa,然后sql語句....where  s_name= #{aaaa} 中就可以根據aaaa得到參數值了

mapper由以下結構組成

(頭部兩個注解)

定義@Mapper和@@component

(一個接口)

使用@select來執行sql語句(此處就將mapper和sql服務器連接起來),將其加載到下面的方法中

(注意sql語句中的外部變量使用#{外部變量名}來操作)

定義一個方法,自定義函數名,其參數就是sql語句中使用的外部變量,返回的結果就是sql語句查詢的結果

返回結果由entity對應的object接收(此處就將mapper和entity連接起來)

有時候sql語句也沒有返回結果(比如刪除和更新),此時就使用void

有時候sql語句會返回一個主鍵id(比如插入),此時就使用int來接收這個id

  • entity
package com.Lee.connect.table;

import org.apache.ibatis.annotations.Param;

public class TableUser {

    private int id;
    private String UserName;
    private String PassWord;

    public int getId() {
        return id;
    }
    public void setId(int id){
        this.id = id;
    }
    public String getUserName(){
        return UserName;
    }
    public void setUserName(String userName){
        UserName = userName;
    }
    public String getPassWord(){
        return PassWord;
    }
    public void setPassWord(String passWord){
        PassWord = passWord;
    }

}

按照數據表的格式,為所有的字段添加set和get方法

返回這個表對應的類

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM