1. 程式人生 > 其它 >SpringBoot整合Mybatis的步驟--Baizhiedu

SpringBoot整合Mybatis的步驟--Baizhiedu

1、配置檔案pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.0</version> <relativePath/> <!-- lookup parent from repository --> </parent> <
groupId>com.baizhiedu</groupId> <artifactId>element_users01</artifactId> <version>0.0.1-SNAPSHOT</version> <name>element_users01</name> <description>Demo project for Spring Boot</description> <properties> <java.version
>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.39</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.6</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build> </project>

2、編寫實體類entity User.java

package com.baizhiedu.entity;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.Accessors;

import java.util.Date;

@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Accessors(chain = true)
public class User {
    private Integer id;
    private String name;
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date birthday;
    private String gender;
    private String address;
}

3、編寫DAO層介面 UserDao.java

package com.baizhiedu.dao;

import com.baizhiedu.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;


/*
@Mapper註解:
作用:在介面類上添加了@Mapper,在編譯之後會生成相應的介面實現類
新增位置:介面類上面

@Mapper
public interface UserDAO {
//程式碼
}
*/


//@Mapper
public interface UserDao {

    // 查詢所有使用者資訊
    List<User> findAll();

    // 儲存使用者資訊
    void save(User user);

    // 根據id刪除一個使用者
    void deleteUserById(Integer id);

    // 更新使用者資訊
    void updateUser(User user);

    // 分頁查詢
    List<User> findByPage(@Param("start") Integer start, @Param("rows") Integer rows);

    // 查詢總條數
    Long findTotals();

}

4、傳值定義值物件VO(Value Object)Result.java

package com.baizhiedu.vo;

import lombok.Data;

@Data
public class Result {
    private Boolean status = true;
    private String msg;
}

5、編寫Service層

UserService.java

package com.baizhiedu.service;

import com.baizhiedu.entity.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface UserService {

    // 查詢所有使用者資訊
    List<User> findAll();

    // 儲存使用者資訊
    void addUser(User user);

    // 根據id刪除一個使用者
    void deleteUserById(Integer id);

    // 更新使用者資訊
    void updateUser(User user);

    // 分頁查詢
    List<User> findByPage(Integer pageNow, Integer rows);

    // 查詢總條數
    Long findTotals();

}

UserServiceImpl.java

package com.baizhiedu.service;

import com.baizhiedu.dao.UserDao;
import com.baizhiedu.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
@Transactional
public class UserServiceImpl implements UserService{

    @Autowired
    private UserDao userDao;


    @Override
    public void updateUser(User user) {
        userDao.updateUser(user);
    }

    @Override
    public List<User> findByPage(Integer pageNow, Integer rows) {
        int start = (pageNow-1)*rows;
        return userDao.findByPage(start, rows);
    }

    @Override
    public Long findTotals() {
        return userDao.findTotals();
    }

    @Override
    public void deleteUserById(Integer id) {
        userDao.deleteUserById(id);
    }

    @Override
    public void addUser(User user) {
        userDao.save(user);
    }

    @Override
    @Transactional(propagation = Propagation.SUPPORTS)
    public List<User> findAll() {
        return userDao.findAll();
    }

}

6、編寫Controller層 UserController.java

package com.baizhiedu.controller;

import com.baizhiedu.entity.User;
import com.baizhiedu.service.UserService;
import com.baizhiedu.vo.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
@CrossOrigin
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    // 分頁查詢方法
    @GetMapping("/findByPage")
    public Map<String, Object> findByPage(Integer pageNow, Integer pageSize) {
        Map<String, Object> result = new HashMap<>();
        pageNow = pageNow==null? 1:pageNow;
        pageSize = pageSize==null? 4:pageSize;
        List<User> users = userService.findByPage(pageNow, pageSize);
        Long totals = userService.findTotals();

        result.put("users", users);
        result.put("totals", totals);

        return result;
    }

    // 根據id刪除一個使用者
    @GetMapping("/delete")
    public Result deleteUserById(Integer id) {
        Result result = new Result();
        try {
            userService.deleteUserById(id);
            result.setMsg("刪除使用者資訊成功!");
        } catch (Exception e) {
            e.printStackTrace();
            result.setStatus(false);
            result.setMsg("刪除使用者資訊失敗, 請稍後再試!");
        }
        return result;
    }

    // 儲存使用者資訊
    @PostMapping("/savaOrUpdate")
    public Result savaOrUpdate(@RequestBody User user) {
        Result result = new Result();
        try {
            if (StringUtils.isEmpty(user.getId())) {
                userService.addUser(user);
                result.setMsg("使用者資訊儲存成功!");
            } else {
                userService.updateUser(user);
                result.setMsg("使用者資訊修改成功!");
            }

        } catch (Exception e) {
            e.printStackTrace();
            result.setStatus(false);
            result.setMsg("系統錯誤:儲存使用者資訊失敗, 請稍後再試...");
        }
        return result;
    }

    // 查詢所有
    @GetMapping("/findAll")
    public List<User> findAll() {
        return userService.findAll();
    }

}

7、編寫Mapper檔案 UserDaoMapper.xml

該檔案放在:src\main\resources\com\baizhiedu\mapper

<?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.baizhiedu.dao.UserDao">

   <!--分頁查詢-->
   <select id="findByPage" resultType="User">
      select id, name, birthday, gender, address
      from t_users limit #{start}, #{rows}
   </select>

   <!---->
   <select id="findTotals" resultType="Long">
      select count(id) from t_users
   </select>

   <!--更新使用者資訊-->
   <update id="updateUser" parameterType="User">
      update t_users set name=#{name}, birthday=#{birthday}, gender=#{gender}, address=#{address}  where id = #{id}
   </update>

   <!--查詢所有使用者資訊-->
   <select id="findAll" resultType="User">
      select id, name, birthday, gender, address from t_users
   </select>

   <!--儲存使用者資訊-->
   <insert id="save" parameterType="User" useGeneratedKeys="true" keyProperty="id">
      insert into t_users values(#{id}, #{name}, #{birthday}, #{gender}, #{address})
   </insert>

   <!--根據id刪除一個使用者-->
   <delete id="deleteUserById" parameterType="Integer">
      delete from t_users where id = #{id}
   </delete>

</mapper>

8、SQL檔案t_users.sql

/*
 Navicat Premium Data Transfer

 Source Server         : A本地win10-MySQL 5.6-3306
 Source Server Type    : MySQL
 Source Server Version : 50646
 Source Host           : localhost:3306
 Source Schema         : element_users01

 Target Server Type    : MySQL
 Target Server Version : 50646
 File Encoding         : 65001

 Date: 30/08/2021 21:38:20
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for t_users
-- ----------------------------
DROP TABLE IF EXISTS `t_users`;
CREATE TABLE `t_users`  (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `birthday` timestamp(0) NULL DEFAULT NULL,
  `gender` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact;

SET FOREIGN_KEY_CHECKS = 1;

9、編寫配置檔案application.properties

server.port=8001
spring.application.name=element-users

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:58536/element_users01?characterEncoding=UTF-8
spring.datasource.username=element_users01
spring.datasource.password=SFY5ExMkYB4NX4NA

mybatis.mapper-locations=classpath:com/baizhiedu/mapper/*.xml
mybatis.type-aliases-package=com.baizhiedu.entity

10、SpringBoot的啟動入口 ElementUsers01Application.java

package com.baizhiedu;

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

/*
@MapperScan
作用:指定要變成實現類的介面所在的包,然後包下面的所有介面在編譯之後都會生成相應的實現類
新增位置:是在Springboot啟動類上面新增,
*/
@SpringBootApplication @MapperScan("com.baizhiedu.dao") 
public class ElementUsers01Application { public static void main(String[] args) { SpringApplication.run(ElementUsers01Application.class, args); } }