SpringBoot+MyBatis实现基础的增删改查功能

创建你的SpringBoot项目

引入mybatis依赖

在pom.xml中添加需要的依赖
<!-- JDBC -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>

    <!-- MySQL驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

    <!--引入mybatis依赖-->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.0.1</version>
    </dependency>

注意!!
mybatis和mybatis-spring-boot-starter是不同的两个包,版本也不一样,后者是mybatis专为springboot发布的,所以导入依赖时要注意版本问题!笔者出现过将mybatis版本号加在mybatis-spring-boot-starter版本号中导致无法找到依赖的情况!

application.properties
在application.properties中设置

server.port=8080
spring.datasource.url=jdbc:mysql://localhost:端口号/数据库名称?&useSSL=false&serverTimezone=UTC&characterEncoding=utf-8
spring.datasource.username=mysql账号名
spring.datasource.password=密码
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
mybatis.configuration.map-underscore-to-camel-case=true

笔者使用的是mysql数据库,配置文件为application.properties,当然也有使用application.yml的,推荐使用后者,更方便。
不要直接复制,注意其中的中文部分,将它根据你的数据库设置进行修改。最后一行为开启驼峰映射,会消除相当一部分数据库名无法对应出现的错误,数据库中字段名和数据库名不建议使用大写,识别时容易出错。

在这里插入图片描述
在IDEA的数据库选项中连接自己的数据库,找到选定的表:
在这里插入图片描述
使用该脚本可以快速构建实体类,会直接在你选定的包下生成如下文件:
在这里插入图片描述

定义Mapper

package com.example.springdemo.mapper;


import com.example.springdemo.entity.User;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Component;

import java.util.List;



@Mapper
@Component
public interface UserMapper {

    //查询所有记录
//    @Select("select * from user")
    List<User> getUsers();

    //根据id删除某条记录
    int deleteUsers(@Param("userId") long userId);

    // 新增用户
    boolean addUsers(User user);

    //更新用户
    boolean updateUsers(User user);

    int addUsersByJson(User user);

}

在mapper中编辑好相应的函数后,需要在mapper.xml中写mysql数据,以前的写法中有把sql语句直接卸载mapper.java中,不建议这样写。
在resources文件夹下创建我们的mapper/UserMapper.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="com.example.springdemo.mapper.UserMapper">


    <select id="getUsers" resultType="com.example.springdemo.entity.User">
        select user_id,user_name,user_address,user_tel,case u.user_sex when '1' then '男' when '0' then
        '女' else '未知'
        end as user_sex from user u;
<!--userId,user_name,user_address,user_tel-->
    </select>

    <delete id="deleteUsers" >
        delete from user where user_id =#{userId};
    </delete>

    <insert id="addUsers">
        insert into user(user_name,user_address,user_tel,user_sex)value (#{userName},#{userAddress},#{userTel},#{userSex});
    </insert>

    <insert id="addUsersByJson" parameterType="com.example.springdemo.entity.User">
        insert into user(user_name,user_address,user_tel,user_sex)value (#{userName},#{userAddress},#{userTel},#{userSex});
    </insert>

    <update id="updateUsers" parameterType="com.example.springdemo.entity.User">
        update user set user_name=#{userName},user_address=#{userAddress},user_tel=#{userTel},user_sex=#{userSex} where user_id=#{userId};
    </update>

</mapper>

namespace是我们的UserMapper.java所在的位置,需要有返回User对象的方法中parameterType是我们脚本生成的实体类所在位置,sql语句不再赘述,其中查询所有的语句增加了性别设置0/1显示女/男的语法。
在这里插入图片描述
实体类中类别修改成了String,数据库中为tinyint,因为想要显示男女,需要字符串类型,原来的tinyint映射的类型会报错。实体类中类型和数据库类型不完全一致没有关系,字段能对应就可以。
addUsersByJson新增方法是使用json类型数据传参。
mapper写完了之后需要写Service。

定义Service

package com.example.springdemo.service;

import com.example.springdemo.entity.User;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
@Component
public interface UserService {
    
    List<User> getUsers();
    int deleteUsers(long userId);
    boolean addUsers(User user);
    boolean updateUsers(User user);
    String addUsersByJson(User user);
    
}

UserService并不直接声明方法,需要另一个文件来声明

package com.example.springdemo.service.impl;

import com.example.springdemo.entity.User;
import com.example.springdemo.mapper.UserMapper;
import com.example.springdemo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;


@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

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

    @Override
    public int deleteUsers(long userId) {
        int i=userMapper.deleteUsers(userId);
        if(i>0){
            return 200;
            //删除成功
        }else{
            return 500;
            //删除失败
        }
    }

    @Override
    public boolean addUsers(User user){
        return userMapper.addUsers(user);
    }

    @Override
    public boolean updateUsers(User user) {
        return userMapper.updateUsers(user);
    }

    @Override
    public String addUsersByJson(User user) {
        int i=userMapper.addUsersByJson(user);
        if(i>0){
            String s="新增成功,增加了"+i+"条数据";
            return s;
        }else{
            return "新增失败";
        }

    }

}

这里声明的是UserService的方法,本文加了一些判断和返回语句,这些判断语句可以加在mapper或service中,再往后一个模块不适合加了。

定义Controller

package com.example.springdemo.controller;

import com.example.springdemo.entity.User;
import com.example.springdemo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/users")
    public List<User> getUsers() {
        return userService.getUsers();
    }

    @PostMapping("/deleteUser")
    public int deleteUsers(long userId) {
        int msg=userService.deleteUsers(userId);
        return msg;
    }

    @PostMapping("/addUser")
    public boolean addUsers(User user){
        return userService.addUsers(user);
    }

    @PostMapping("/updateUser")
    public boolean updateUsers(User user){
        return userService.updateUsers(user);
    }
    @RequestMapping("/addUserByJson")
    public String addUsersByJson(@RequestBody User user){
        System.out.println(user.toString());
        return userService.addUsersByJson(user);
    }
}

如果对注解的含义不太懂,可以去搜一下SpringBoot常用注解。这里这只说明一件事,不需要传参的方法一般用@GetMapping,需要传参的比较常用的是@PostMapping。用错注解可能会导致报错。

使用方式
localhost:端口号/users
就可以调用getUsers()方法,以此类推。

总结

我们可以看到一条有序的线,mapper—service—controller。
mapper定义的方法和语句,被service引用。同样的,controller也引用了service的方法。
写本文的主要目的是记录自己学习的过程,以及为和我一样的萌新小白提供一些小小的帮助,所以有些地方讲的比较口语化,还望海涵。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值