SpringBoot整合Mybatis的步骤-【编程不良人】笔记

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启动类上面添加,

注意:注解
@MapperScan 和 @Mapper 不要同时使用,二选一即可。
*/
@SpringBootApplication 
@MapperScan(
"com.baizhiedu.dao")
public class ElementUsers01Application { public static void main(String[] args) { SpringApplication.run(ElementUsers01Application.class, args); } }

 

posted @ 2021-10-17 10:45  氢氧soc  阅读(289)  评论(0)    收藏  举报