SpringBoot(五)Mybatis如何在SpringBoot中灵活使用

阅读本文大概需要 10 分钟。

1. Mybatis简介

  • Mybatis框架是一个开源的持久层框架,它对传统的JDBC操作数据库的方法做了进一步的封装,使用时不需要我们程序猿自己来创建连接、释放连接等操作。只需配置好mybatis的配置文件就可以灵活使用了。

2. Mybatis的优缺点

  • 优点
    • (1)与传统JDBC方法相比的话,减少代码编写
    • (2)mybatis是一个轻量级的持久层框架
    • (3)上手简单,学习成本低
    • (4)将sql语句的权利交给程序员本身

3. 使用案例

3.1 创建数据库表

可参考之前发过的一篇文章 tk-mybatis-generator逆向生成代码 。生成对应的实体对象、mapper文件和mapper接口。

3.2 新增依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.3.3.RELEASE</version>
</dependency>
<!-- 通用mapper逆向工具 -->
<dependency>
    <groupId>tk.mybatis</groupId>
    <artifactId>mapper-spring-boot-starter</artifactId>
    <version>2.1.5</version>
</dependency>
<!-- mybatis -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.0</version>
</dependency>
<!-- mysql驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.41</version>
</dependency>

这里我就解释一下依赖的作用。

  • mysql-connector-java:相当于mysql-connector-java-5.7.22.jar
  • mybatis-spring-boot-starter:springboot整合mybatis所需依赖
  • spring-boot-starter-web:web模块
3.3 配置文件
server:
  port: 8081
spring:
  datasource:   # 数据源相关配置
    url: jdbc:mysql://localhost:3306/ifknow?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver          # mysql驱动
    type: com.zaxxer.hikari.HikariDataSource          # 数据源类型:HikariCP
    hikari:
      connection-timeout: 30000                       # 等待连接池分配连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQLException, 默认:30秒
      minimum-idle: 5                                 # 最小连接数
      maximum-pool-size: 15                           # 最大连接数
      auto-commit: true                               # 自动提交
      idle-timeout: 600000                            # 连接超时的最大时长(毫秒),超时则被释放(retired),默认:10分钟
      pool-name: DateSourceHikariCP                   # 连接池名字
      max-lifetime: 1800000                           # 连接的生命时长(毫秒),超时而且没被使用则被释放(retired),默认:30分钟 1800000ms
      connection-test-query: SELECT 1

  profiles:

############################################################
#
# mybatis 配置
#
############################################################
mybatis:
  type-aliases-package: com.ifknow.pojo          # 所有POJO类所在包路径
  mapper-locations: classpath:mapper/*.xml,mapper/*/*.xml      # mapper映射文件

############################################################
#
# mybatis mapper 配置
#
############################################################
# 通用 Mapper 配置
mapper:
  mappers: com.ifknow.my.MyMapper
  not-empty: false       #在进行数据库操作的时候,判断表达式 username !=null,是否追加 username!=''
  identity: MYSQL
3.4 启动类新增MapperScan注解
package com.ifknow;

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

/**
 * @author ifknow
 */
@SpringBootApplication
@MapperScan(basePackages = "com.ifknow.mapper")
public class SpringBootMybatisApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootMybatisApplication.class, args);
    }
}
3.5 编写controller、service
package com.ifknow.controller;

import com.ifknow.pojo.bo.UserInsertBO;
import com.ifknow.pojo.bo.UserUpdateBO;
import com.ifknow.pojo.model.User;
import com.ifknow.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @Author: ifknow <br>
 * @Date: 2020/8/19  15:58 <br>
 * @Description: NO Description
 */
@RestController
@RequestMapping("/user")
public class UseController {

    @Autowired
    private UserService userService;

    @PostMapping("/insert")
    public String insert(@RequestBody UserInsertBO bo) {
        int i = userService.insert(bo);
        if (i == 0) {
            return "error";
        }
        return "success";
    }

    @DeleteMapping("/delete")
    public String delete(@RequestParam String id) {
        int i = userService.delete(id);
        if (i == 0) {
            return "error";
        }
        return "success";
    }

    @PutMapping("/update")
    public String update(@RequestBody UserUpdateBO bo) {
        int i = userService.update(bo);
        if (i == 0) {
            return "error";
        }
        return "success";
    }

    @GetMapping("/pageInfo")
    public List<User> pageInfo(){
        return userService.pageInfo();
    }
}
package com.ifknow.service;

import com.ifknow.pojo.bo.UserInsertBO;
import com.ifknow.pojo.bo.UserUpdateBO;
import com.ifknow.pojo.model.User;

import java.util.List;

/**
 * @Author: ifknow <br>
 * @Date: 2020/8/19  16:00 <br>
 * @Description: NO Description
 */
public interface UserService {
    /**
     * 新增用户
     *
     * @param bo 用户信息
     * @return
     */
    int insert(UserInsertBO bo);

    /**
     * 删除用户
     *
     * @param id 用户id
     * @return
     */
    int delete(String id);

    /**
     * 更新用户信息
     *
     * @param bo 用户信息
     * @return
     */
    int update(UserUpdateBO bo);

    /**
     * 查询用户列表
     *
     * @return
     */
    List<User> pageInfo();
}
package com.ifknow.service.impl;

import com.ifknow.mapper.UserMapper;
import com.ifknow.pojo.bo.UserInsertBO;
import com.ifknow.pojo.bo.UserUpdateBO;
import com.ifknow.pojo.model.User;
import com.ifknow.service.UserService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.security.SecurityProperties;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.UUID;

/**
 * @Author: ifknow <br>
 * @Date: 2020/8/19  16:01 <br>
 * @Description: NO Description
 */
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public int insert(UserInsertBO bo) {
        User user = new User();
        BeanUtils.copyProperties(bo, user);
        user.setId(UUID.randomUUID().toString().replace("-", ""));
        return userMapper.insertSelective(user);
    }

    @Override
    public int delete(String id) {
        User user = new User();
        user.setId(id);
        return userMapper.deleteByPrimaryKey(user);
    }

    @Override
    public int update(UserUpdateBO bo) {
        User user = new User();
        BeanUtils.copyProperties(bo, user);
        return userMapper.updateByPrimaryKeySelective(user);
    }

    @Override
    public List<User> pageInfo() {
        return userMapper.selectAll();
    }
}

以上就是使用tk-mybatis在SpringBoot中简单使用。tk-mybatis 其他方法可以自己去慢慢的了解,谢谢你的观看!!


示例代码-GitHub

示例代码-Gitee

个人博客-ifknow

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值