前言:
各位同學大家好,最近在學習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 驅動 這些都配置好以后我們啟動一下
我們看到項目正常的啟動了我們打開postman工具訪問一下 測試的接口
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
UserService userservice;
@RequestMapping("/index")
public Object index(){
return "部署成功";
}
我們看到有一個部署成功的字符串返回 項目整個算是正常啟動成功我們需要加入一些業(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ù)操作(增刪改查)
通常大家在使用的時候
@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測試一下
接口給我們返回添加數(shù)據(jù)成功,我們打開數(shù)據(jù)庫可視化工具查詢下
我們看到數(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測試請求一下
我們看到獲取到數(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;
}
我們來測試一下
我們可以看到通過接口我們把數(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ù):
我們用postman測試一下更新數(shù)據(jù)的接口
我們再次查詢數(shù)據(jù)庫
更新后數(shù)據(jù)庫數(shù)據(jù):
我們看到數(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ù)
然后我們調用刪除數(shù)據(jù)的接口,我們打開postman測試請求一下
我們看到返回刪除數(shù)據(jù)成功答恶,我們再打開數(shù)據(jù)查詢一下改條數(shù)據(jù)是否存在 (id=2的數(shù)據(jù)庫)
刪除后的數(shù)據(jù):
我們可以看到數(shù)據(jù)庫中id=2的數(shù)據(jù)已經(jīng)不存在饺蚊,已經(jīng)我們用接口請求刪除了 萍诱。
到此整個springboot整合mybatis 的教程就講完了
最后總結:
這篇文章純屬記錄個人的學習經(jīng)歷 ,順帶分享給各位 希望能幫助到各位同學污呼,如果覺得文章還不錯麻煩動動你的小手指給我一個star 和轉發(fā)謝謝