mybatis整合springboot

一、创建springboot项目

springboot项目搭建

到如下也ian时勾选四个依赖 

二、导入pom依赖

<?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.7.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>cn.hp.bootmybatis</groupId>
    <artifactId>boot-mybatis</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>boot-mybatis</name>
    <description>boot-mybatis</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.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--Spring Boot 和MyBatis的整合包-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.3</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.46</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.17</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

三、application.yml配置文件

server:
  port: 8081
spring:
  datasource:
    druid:
      # 数据库访问配置, 使用druid数据源
      type: com.alibaba.druid.pool.DruidDataSource
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://127.0.0.1:3306/test1?useUnicode=true&amp;characterEncoding=utf-8
      username: root
      password: 数据库密码
      # 连接池配置
      initial-size: 5
      min-idle: 5
      max-active: 20
      # 连接等待超时时间
      max-wait: 30000
      # 配置检测可以关闭的空闲连接间隔时间
      time-between-eviction-runs-millis: 60000
      # 配置连接在池中的最小生存时间
      min-evictable-idle-time-millis: 300000
      validation-query: select '1' from dual
      test-while-idle: true
      test-on-borrow: false
      test-on-return: false
      # 打开PSCache,并且指定每个连接上PSCache的大小
      pool-prepared-statements: true
      max-open-prepared-statements: 20
      max-pool-prepared-statement-per-connection-size: 20
      # 配置监控统计拦截的filters, 去掉后监控界面sql无法统计, 'wall'用于防火墙
      filters: stat,wall
      # Spring监控AOP切入点,如x.y.z.service.*,配置多个英文逗号分隔
      aop-patterns: cn.hp.bootmybatis.service.*
      # WebStatFilter配置
      web-stat-filter:
        enabled: true
        # 添加过滤规则
        url-pattern: /*
        # 忽略过滤的格式
        exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'
      # StatViewServlet配置
      stat-view-servlet:
        enabled: true
        # 访问路径为/druid时,跳转到StatViewServlet
        url-pattern: /druid/*
        # 是否能够重置数据
        reset-enable: false
        # 需要账号密码才能访问控制台
        login-username: druid
        login-password: druid123
      # 配置StatFilter
      filter:
        stat:
          log-slow-sql: true
mybatis:
  # 指定sql映射文件的位置
  mapper-locations: classpath:dao/*.xml
  # 配置实体类别名
  type-aliases-package: cn.hp.thy.pojo

四、三层架构的搭建

pojo:写实体类

mapper接口:数据访问层,写接口

mapper.xml:编写sql语句

service接口(业务逻辑层):内容和mapper接口中的一样

service实现类:调用mapper层的接口实现功能

controller:显示层,调用service层的方法向前台页面显示数据

 

1.实体类

package cn.hp.bootmybatis.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @title: Student
 * @Author 尤词
 * @Date: 2022/10/10 10:06
 * @Description: 实体类
 * @Version 1.0
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
    private Integer id;
    private String name;
    private String email;
    private Integer age;
}

2.mapper接口

package cn.hp.bootmybatis.dao;

import cn.hp.bootmybatis.entity.Student;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * @title: UserMapper
 * @Author 尤词
 * @Date: 2022/10/10 9:44
 * @Description: 数据访问层
 * @Version 1.0
 */

public interface UserMapper {
    //统计
    int count();
    //全查
    List<Student> findAll(Student student);
    //删除
    int delete(Integer id);
    //添加
    int add(Student student);
    //修改
    int update(Student student);
}

3.mapper.xml

<?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="cn.hp.bootmybatis.dao.UserMapper">
    <sql id="Base_Column_List">
        id
        ,name,email,age
    </sql>

    <insert id="add">
        insert into student(name, email, age)
        values (#{name}, #{email}, #{age})
    </insert>

    <update id="update">
        <trim prefix="update student" suffixOverrides="," suffix="where id = #{id}">
            <set>
                <if test="name != null and name != ''">
                    name=#{name},
                </if>
                <if test="email != null and email != ''">
                    email=#{email},
                </if>
                <if test="age > 0">
                    age=#{age}
                </if>
            </set>
        </trim>
    </update>

    <delete id="delete">
        delete
        from student
        where id = #{id}
    </delete>

    <select id="count" resultType="java.lang.Integer">
        select count(*)
        from student
    </select>

    <select id="findAll" resultType="student">
        select
        <include refid="Base_Column_List"/>
        from student
        <where>
            <if test="id != null and id != ''">
                id = #{id}
            </if>
        </where>
    </select>
</mapper>

4.service接口

package cn.hp.bootmybatis.service;

import cn.hp.bootmybatis.entity.Student;

import java.util.List;

/**
 * @title: UserService
 * @Author 尤词
 * @Date: 2022/10/10 9:53
 * @Description: 业务逻辑层
 * @Version 1.0
 */
public interface UserService {
    //统计
    int count();
    //全查
    List<Student> findAll(Student student);
    //删除
    int delete(Integer id);
    //添加
    int add(Student student);
    //修改
    int update(Student student);
}

5.service实现类

package cn.hp.bootmybatis.service.impl;

import cn.hp.bootmybatis.dao.UserMapper;
import cn.hp.bootmybatis.entity.Student;
import cn.hp.bootmybatis.service.UserService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * @title: UserServiceImpl
 * @Author 尤词
 * @Date: 2022/10/10 9:53
 * @Description: 业务逻辑层实现类
 * @Version 1.0
 */

@Service
public class UserServiceImpl implements UserService {
    //注入dao
    @Resource
    private UserMapper userMapper;
    @Override
    public int count() {
        return userMapper.count();
    }

    @Override
    public List<Student> findAll(Student student) {
        return userMapper.findAll(student);
    }

    @Override
    public int delete(Integer id) {
        return userMapper.delete(id);
    }

    @Override
    public int add(Student student) {
        return userMapper.add(student);
    }

    @Override
    public int update(Student student) {
        return userMapper.update(student);
    }
}

6.controller

package cn.hp.bootmybatis.controller;

import cn.hp.bootmybatis.entity.Student;
import cn.hp.bootmybatis.service.UserService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;

/**
 * @title: UserController
 * @Author 尤词
 * @Date: 2022/10/10 9:57
 * @Description: 表示层
 * @Version 1.0
 */
@Controller
public class UserController {
    @Resource
    private UserService userService;

    @GetMapping("/count")
    @ResponseBody
    public Object count() {
        return userService.count();
    }

    @GetMapping("/findAll")
    @ResponseBody
    public Object findAll(Student student){
        return userService.findAll(student);
    }

    @GetMapping("/add")
    @ResponseBody
    public Object add(Student student){
        return userService.add(student);
    }

    @GetMapping("/update")
    @ResponseBody
    public Object update(Student student){
        return userService.update(student);
    }

    @GetMapping("/del")
    @ResponseBody
    public Object del(Integer id){
        return userService.delete(id);
    }

}

注意: 主方法运行加mapper扫描注解:

        @MapperScan(basePackages = "cn.hp.bootmybatis.dao")

主方法

五、测试/运行项目

 


版权声明:本文为qq_53828362原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。