Springboot 整合mybatis詳細教程

前言:

各位同學大家好,最近在學習springboot整合mybatis的知識點,正好放假有時間寫了一個springboot整合mybatis的經(jīng)典案例所以就分享大家拐袜,希望能幫助到同學對于springboot框架的學習赫粥,那么廢話不多說我們正式開始

準備工作

1安裝好idea 或者eclispe +sts開發(fā)環(huán)境
2安裝maven 并配置環(huán)境

需要用到三方庫

  <!--java -web依賴-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--數(shù)據(jù)庫依賴-->
        <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>1.1.1</version>
        </dependency>

建表語句

/*
SQLyog Ultimate v12.09 (64 bit)
MySQL - 5.7.17-log : Database - mybdtisdemo
*********************************************************************
*/


/*!40101 SET NAMES utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`mybdtisdemo` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_bin */;

USE `mybdtisdemo`;

/*Table structure for table `user` */

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `password` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `age` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `sex` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

/*Data for the table `user` */

insert  into `user`(`id`,`name`,`password`,`age`,`sex`) values (2,'xuqing','xq9527','27','男');

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

application.ymal 的配置 如下圖:

server:
  port: 8090
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/mybdtisdemo?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2b8&allowPublicKeyRetrieval=true
    username: root
    password: 123456
  #配置Mapper.xml映射文件
mybatis:
  mapper-locations: classpath*:mybatis/mapper/*.xml

準備按設置了utf-8編碼和 serverTimezone=UTC 和時區(qū) 以及數(shù)據(jù)庫賬號和密碼 jdbc 驅動 這些都配置好以后我們啟動一下


QQ截圖20200913193815.png

我們看到項目正常的啟動了我們打開postman工具訪問一下 測試的接口

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    UserService userservice;
    @RequestMapping("/index")
    public  Object index(){
        return  "部署成功";
    }
QQ截圖20200913193929.png

我們看到有一個部署成功的字符串返回 項目整個算是正常啟動成功我們需要加入一些業(yè)務邏輯代碼來配合Sprigboot整合mybatis框架 來實現(xiàn)我們的業(yè)務需求

具體實現(xiàn):

1創(chuàng)建bean類(數(shù)據(jù)模型)

package com.example.mybatis_demo.bean;
public class User {
    private int id;
    private String name;
    private String password;
    private String age;
    private String sex;

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }
    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

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

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}

bean類里面的屬性我們最好要跟我們數(shù)據(jù)庫對應表中的字段保持一致

2創(chuàng)建 Mapper類

package com.example.mybatis_demo.dao;
import com.example.mybatis_demo.bean.User;
import org.apache.ibatis.annotations.*;
import java.util.List;
@Mapper
public interface UserDao {
    @Select("select * from  user")
   public List<User>getallUser();

    @Select("select * from  user  where  id= #{id}")
    public User getuserbyId(Integer id);

    @Insert("insert into user (name,password, age ,sex) values (#{name},#{password},#{age},#{sex})")
    int addUser(User user);

    @Select("select * from  user  where  name= #{name}")
    public User getuserbyname(String name);

    @Update("update  user set password =#{password}  where  name= #{name}")
    public  int  upDatePassword(@Param("name") String name,
                                @Param("password") String password);
    @Delete("delete from user WHERE id = #{id}")
    int  deleteUser(@Param("id")Integer id);
}

我們需要用到的sql語句我們都在 Mapper類中用注解來實現(xiàn) 我們就不需要在Contorller中寫大量的sql語句了是不是使得代碼可讀性和管理也方便

3創(chuàng)建service 層

package com.example.mybatis_demo.service;
import com.example.mybatis_demo.bean.User;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import java.util.List;

public interface UserService {
     List<User> getallUser();
    User getuserbyId(Integer id);
    int addUser(User user);
    User getuserbyname(String name);
    String  upDatePassword(String name, String password, String newpsw);
    int  deleteUser(Integer id);
}

service 層的接口類定義的一些方法(包括增刪改查的方法)是給controller 來調用的

4處理service 層 實現(xiàn)層 impl層

package com.example.mybatis_demo.service.impl;
import com.example.mybatis_demo.bean.User;
import com.example.mybatis_demo.dao.UserDao;
import com.example.mybatis_demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
@Service(value = "userService")
public class UserServiceimpl implements UserService {
    @Autowired
    UserDao userDao;
    @Override
    public List<User> getallUser() {
        return userDao.getallUser();
    }
    /**
     * @param id
     * @return
     * 通過頭id查詢數(shù)據(jù)
     *
     *
     */
    @Override
    public User getuserbyId(Integer id) {
        return userDao.getuserbyId(id);
    }

    /**
     * @param user
     * @return
     * 添加數(shù)據(jù)
     */
    @Override
    public int addUser(User user) {
        return userDao.addUser(user);
    }

    //通過用戶名查詢數(shù)據(jù)
    @Override
    public User getuserbyname(String name) {
        return null;
    }
    /**
     * @param name
     * @param password
     * @return
     * 更新數(shù)據(jù)
     *
     */
    @Override
    public String upDatePassword(String name, String password, String newpsw) {
          User user=userDao.getuserbyname(name);
          if(user!=null){
            if(user.getPassword().equals(password)){
                  userDao.upDatePassword(name,newpsw);
                  return "success";
              }else{
                  return "defeated";
              }
          }else{
              return  "fail";
          }
    }
    @Override
    public int deleteUser(Integer id) {
        return userDao.deleteUser(id);
    }

}

這一層是真正的sercvie業(yè)務邏輯的實現(xiàn)我們需要用Autowired 這個注解來引入剛才的 Mapper類來處理對數(shù)據(jù)庫里面的數(shù)據(jù)操作(增刪改查)


QQ截圖20200913195822.png

通常大家在使用的時候

 @Autowired
  UserDao userDao;

都會有紅色報錯提示 這個不用管 這是IDE的問題我們的代碼可以正常運行的

5 controller 層具體業(yè)務邏輯實現(xiàn):

1添加數(shù)據(jù):

  @RequestMapping("/adduser")
    public  Object addUser(
                           @RequestParam (value = "name")String name,
                           @RequestParam (value = "password")String password,
                           @RequestParam (value = "age")String age,
                           @RequestParam (value = "sex")String sex){
        Map<String,Object>map=new HashMap<>();
        User user=new User();
        user.setName(name);
        user.setPassword(password);
        user.setAge(age);
        user.setSex(sex);
        int addcode=userservice.addUser(user);
        if(addcode==1){
            map.put("code",200);
            map.put("msg","添加數(shù)據(jù)成功");
        }else {
            map.put("code",100);
            map.put("msg","添加數(shù)據(jù)失敗");
        }
        return map;
    }

我們打開postman測試一下


QQ截圖20200913193902.png

接口給我們返回添加數(shù)據(jù)成功,我們打開數(shù)據(jù)庫可視化工具查詢下


QQ截圖20200913200440.png

我們看到數(shù)據(jù)庫里面已經(jīng)插入一條數(shù)據(jù)了

2查詢數(shù)據(jù):

2.1查詢所有數(shù)據(jù)
    @RequestMapping("/getalluser")
    public  Object getAllUser(){
        List<User>data=userservice.getallUser();
        Map<String,Object>map=new HashMap<>();
        if(data!=null&&data.size()>0){
            map.put("code",200);
            map.put("msg","獲取數(shù)據(jù)成功");
            map.put("data",data);
        }else{
            map.put("code",100);
            map.put("msg","暫時沒有數(shù)據(jù)");
        }
        return  map;
    }

我們打開postman測試請求一下


QQ截圖20200913200708.png

我們看到獲取到數(shù)據(jù)庫中所有的數(shù)據(jù)胃夏,因為只有一條所以json數(shù)組中只有一條

2.2查詢單條數(shù)據(jù)

這個時候我們需要傳入數(shù)據(jù)庫中user表的頭id來進行查詢我們看代碼實現(xiàn)

   @RequestMapping("/getusetbyid")
    public  Object getUserById(@RequestParam (value = "id") Integer id){
        User user=userservice.getuserbyId(id);
        Map<String,Object>map=new HashMap<>();
        if(user!=null){
            map.put("code",200);
            map.put("msg","獲取數(shù)據(jù)成功");
            map.put("user",user);
        }else{
            map.put("code",100);
            map.put("msg","暫時沒有數(shù)據(jù)");
        }
        return  map;
    }

我們來測試一下


QQ截圖20200913201125.png

我們可以看到通過接口我們把數(shù)據(jù)庫user表中 id=2的數(shù)據(jù)查詢到并且返回

3更新數(shù)據(jù):

 @RequestMapping("/updatepassword")
    public  Object updatePassword(@RequestParam(value = "name") String  name,
                                  @RequestParam (value = "password")String password,
                               @RequestParam (value = "newpsw")String newpsw) {
        Map<String, Object> map = new HashMap<>();
        if (TextUtils.Isempty(name) || TextUtils.Isempty(password) || TextUtils.Isempty(newpsw)) {
            map.put("msg", "賬號或者密碼不能為空");
            map.put("code", 100);
            return map;
        } else {
            if (password.equals(newpsw)) {
                map.put("msg", "新密碼和舊密碼不能一樣");
                map.put("code", 101);
                return map;
            } else {
                String infindpsw = userservice.upDatePassword(name, password, newpsw);
                if (infindpsw.equals("success")) {
                    map.put("msg", "修改密碼成功");
                    map.put("code", 200);
                    return map;
                } else if (infindpsw.equals("defeated")) {
                    map.put("msg", "舊密碼不對");
                    map.put("code", 102);
                    return map;
                } else if (infindpsw.equals("fail")) {
                    map.put("msg", "不存在該用戶");
                    map.put("code", 103);
                    return map;
                } else {
                    map.put("msg", "服務器錯誤");
                    map.put("code", 104);
                    return map;
                }
            }
        }
    }

更新password 這個字段 我們需要前端傳入 name password newpsw 3個字段來處理更新操作我們先空判轴或,然后判斷新密碼個舊密碼不一樣 ,然后我們調用service 層的更新數(shù)據(jù)的方法即可

更新前數(shù)據(jù)庫數(shù)據(jù):
QQ截圖20200913200440.png

我們用postman測試一下更新數(shù)據(jù)的接口


QQ截圖20200913202313.png

我們再次查詢數(shù)據(jù)庫

更新后數(shù)據(jù)庫數(shù)據(jù):
QQ截圖20200913202352.png

我們看到數(shù)據(jù)庫中的數(shù)據(jù)已經(jīng)更新過來了

4刪除數(shù)據(jù):

     @RequestMapping("/deleteuser")
    public  Object deleteUser(@RequestParam (value = "id")Integer id){
        Map<String,Object>map=new HashMap<>();
        User user=userservice.getuserbyId(id);
        if(user!=null){
            int deletecode=userservice.deleteUser(id);
            if(deletecode==1){
                map.put("code",200);
                map.put("msg","刪除數(shù)據(jù)成功");
            }else {
                map.put("code",100);
                map.put("msg","刪除數(shù)據(jù)失敗");
            }
        }else{
            map.put("code",101);
            map.put("msg","不存在該條數(shù)據(jù)");
        }
        return map;

    }

刪除數(shù)據(jù)我們需要傳入user表的頭id來處理刪除拿一條數(shù)據(jù)仰禀,這邊我們是先調用了查詢的方法先查看數(shù)據(jù)庫中是否存在該條數(shù)據(jù)如果不存在直接返回不存在該條數(shù)據(jù)照雁,如果存在我再調用刪除的方法刪除數(shù)據(jù)庫中對應id的數(shù)據(jù)

我們先查詢數(shù)據(jù)庫刪除前的數(shù)據(jù)
QQ截圖20200913202352.png

然后我們調用刪除數(shù)據(jù)的接口,我們打開postman測試請求一下


QQ截圖20200913202847.png

我們看到返回刪除數(shù)據(jù)成功答恶,我們再打開數(shù)據(jù)查詢一下改條數(shù)據(jù)是否存在 (id=2的數(shù)據(jù)庫)

刪除后的數(shù)據(jù):

QQ截圖20200913203035.png

我們可以看到數(shù)據(jù)庫中id=2的數(shù)據(jù)已經(jīng)不存在饺蚊,已經(jīng)我們用接口請求刪除了 萍诱。
到此整個springboot整合mybatis 的教程就講完了

最后總結:

這篇文章純屬記錄個人的學習經(jīng)歷 ,順帶分享給各位 希望能幫助到各位同學污呼,如果覺得文章還不錯麻煩動動你的小手指給我一個star 和轉發(fā)謝謝

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末裕坊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子燕酷,更是在濱河造成了極大的恐慌碍庵,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悟狱,死亡現(xiàn)場離奇詭異静浴,居然都是意外死亡,警方通過查閱死者的電腦和手機挤渐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門苹享,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人浴麻,你說我怎么就攤上這事得问。” “怎么了软免?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵宫纬,是天一觀的道長。 經(jīng)常有香客問我膏萧,道長漓骚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任榛泛,我火速辦了婚禮蝌蹂,結果婚禮上,老公的妹妹穿的比我還像新娘曹锨。我一直安慰自己孤个,他們只是感情好,可當我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布沛简。 她就那樣靜靜地躺著齐鲤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪椒楣。 梳的紋絲不亂的頭發(fā)上给郊,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天,我揣著相機與錄音撒顿,去河邊找鬼丑罪。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的吩屹。 我是一名探鬼主播跪另,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼煤搜!你這毒婦竟也來了免绿?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤擦盾,失蹤者是張志新(化名)和其女友劉穎嘲驾,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體迹卢,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡辽故,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了腐碱。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片誊垢。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖症见,靈堂內(nèi)的尸體忽然破棺而出喂走,到底是詐尸還是另有隱情,我是刑警寧澤谋作,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布芋肠,位于F島的核電站,受9級特大地震影響遵蚜,放射性物質發(fā)生泄漏帖池。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一谬晕、第九天 我趴在偏房一處隱蔽的房頂上張望碘裕。 院中可真熱鬧,春花似錦攒钳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至晤斩,卻和暖如春焕檬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背澳泵。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工实愚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓腊敲,卻偏偏與公主長得像击喂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子碰辅,可洞房花燭夜當晚...
    茶點故事閱讀 44,573評論 2 353