- 數據的傳輸
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
加在了類和方法上
訪問/
的請求會被ContactController
的redirectToContactPage()
方法處理(加載在類上)
訪問/admin
的請求會被ContactController
的toAdminPage()
方法處理(加載在類的方法上)
其指定了不同請求對應要調用的方法
@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方法
返回這個表對應的類