保姆级Spring+Mybatis整合的简单增删改查功能实现

0.文章中pageHelper相关的操作是分页查询的东西与本文无关

1.首先创建一个Springboot的项目

这个很简单的啦,博客上都有的啦,或许你在担忧用Maven还是直接创建,不用纠结,两种方式都是一样的,我用的是直接创建的方法。
补充:有的人没有这个选项,这个普通的免费版本也就是社区版是没有这个功能的,之前刷到别人说的可以下,其实压根不行,只有企业版有(这里我用的是破解版,也就是盗版)
如图
在这里插入图片描述

1.1Java一般选择的是8,看你的jdk版本而定

在这里插入图片描述

1.2依赖选择

一般来说这几个对于是新手的我来说就够用了,后面可能会用到其他打包好的工具来节省代码(但是原理要好好看)
在这里插入图片描述
在这里插入图片描述

1.3创建之后的结构分析

这是创建之后的文件目录,首先别看这么多东西。大多压根就是你用不到的。
在这里插入图片描述
下面箭头的地方是常用的地方,.idea是IDEA这个编辑器自带的,.mvn也是自带的,不需要管
在这里插入图片描述

2.代码

2.1 上面各种文件可能会疑惑的地方

首先不说代码,可能有的人跟我一样才用这个spring一小段时间,所以我用自己的理解先把上面那张有箭头的地方进行一下解释

java:里面写的是pojo类、contraller类、mapper类、service类等。
resources:这里写的是一些html文件或者一些.xml这种文件,.xml文件就是配 置文件,就是通过配置的方式,对一个变量或者常量进行赋值,就不需要你自己在程序中num = 1这种操作了。
test:用于测试你的功能
pom.xml:这里面是前面说选择web,sql之类的选项,里面是依赖,也就是引入这些包,然后可以用它们的功能。

2.2创建相关的文件夹

在这里插入图片描述

这里我数据库里面创建了一张Student表(MySQL)
在这里插入图片描述
在这里插入图片描述
pojo:里面写的是实体类,也就是数据库里面的一个数据的类型

Student.java:属性对应数据库的字段,给出set和get方法,用快捷键alt+insert然后选择setter and getter就可以了

package com.example.demo.pojo;



public class Student {
    private String stuId;
    private String name;
    private String age;
    private String address;
    private String classId;

    public String getStuId() {
        return stuId;
    }

    public void setStuId(String stuId) {
        this.stuId = stuId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getClassId() {
        return classId;
    }

    public void setClassId(String classId) {
        this.classId = classId;
    }

    @Override
    public String toString() {
        return "Student{" +
                "stuId='" + stuId + '\'' +
                ", name='" + name + '\'' +
                ", age='" + age + '\'' +
                ", address='" + address + '\'' +
                ", classId='" + classId + '\'' +
                '}'+ '\n';
    }
}

mapper:放的是接口,一般存放实现功能的接口
Mapper.java:这是一个接口

package com.example.demo.mapper;

import com.example.demo.pojo.Student;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;
@Repository
public interface Mapper {
//    增加一个数据到数据库
    void insertStu(Student stu);
//		删除数据库中的一条数据
    void deleteStu(String id);
// 		改变数据库中的一条数据
    void upDateStu(Student stu);
//		查询操作
    Student selectStu(String id);
// 		使用PageHelper插件进行分页查询
    List<Student> selectPageHelper();
//		手动实现分页查询
    List<Student> gPI(Map<String,Integer> map);
//总计数据库中的数据个数
    int count();

}

Mapper.xml:配置文件
标签:
1.resuluMap:指的是数据库中的字段对应实体类中的属性,一一对应保证值可以传成功。
2.剩下的标签都是SQL语句,id指的是Mapper.java中的方法名,要一一对应,扫描要求对应一致。

<?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.demo.mapper.Mapper">
    <resultMap id="Student" type="com.example.demo.pojo.Student">
        <id column="stu_id" property="stuId"/>
        <id column="name" property="name"/>
        <id column="age" property="age"/>
        <id column="address" property="address"/>
        <id column="class_id" property="classId"/>
    </resultMap>

    <!--添加操作-->
    <insert id="insertStu">
        insert into student (stu_id, name, age, address, class_id)
        values (#{stuId},#{name},#{age},#{address},#{classId});
    </insert>

    <!--删除操作-->
    <delete id="deleteStu" >
        delete from student where stu_id = #{stuId}
    </delete>

    <!--修改数据操作-->
    <update id="upDateStu">
        update student set name = #{name}, age = #{age}, address = #{address},class_id = #{classId}
        where stu_id = #{stuId}
    </update>

    <!--查询操作-->
    <select id="selectStu" resultType="com.example.demo.pojo.Student">
        select * from student where stu_id = #{stuId}
    </select>


    <!--使用插件pageHelper进行分页查询-->
    <select id="selectPageHelper" resultType="com.example.demo.pojo.Student">
        select * from student
    </select>

    <select id="count" resultType="int">
        select count(*)  from student
    </select>

    <select id="gPI" parameterType="map" resultType="com.example.demo.pojo.Student">
        select * from student LIMIT #{startIndex},#{pageSize}
    </select>


</mapper>

service:对Mapper层的包装
ServiceMapper.java:业务层接口,对Mapper层进行一个包装

package com.example.demo.service;

import com.example.demo.pojo.Page;
import com.example.demo.pojo.Student;
import org.apache.catalina.valves.StuckThreadDetectionValve;

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

public interface ServiceMapper {
//    List<Student> getByLimit()
    void insert(Student stu);

    void delete(String id);

    void update(Student stu);

    Student select(String id);
    
    //pageHelper插件的使用
    Page selectByPageHelper(int pageStart, int pageSize);

    Page getPageInformation(Integer startIndex, Integer pageSize);

}

ServiceMapperImpl:ServiceMapper的实现类,重写其中的业务方法,实现功能

package com.example.demo.service.serviceImpl;

import com.example.demo.mapper.Mapper;
import com.example.demo.pojo.Page;
import com.example.demo.pojo.Student;
import com.example.demo.service.ServiceMapper;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

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

@Service
public class StuServiceMapperImpl implements ServiceMapper {

    @Autowired
    Mapper mapper;

    @Override
    public void insert(Student stu) {
        mapper.insertStu(stu);
    }

    @Override
    public void delete(String id) {
        mapper.deleteStu(id);
    }

    @Override
    public void update(Student stu) {
        mapper.upDateStu(stu);
    }

    @Override
    public Student select(String id) {
        return mapper.selectStu(id);
    }



    @Override
    public Page selectByPageHelper(int pageStart,int pageSize) {
        PageHelper.startPage(pageStart,pageSize);
        List<Student> students = mapper.selectPageHelper();
        PageInfo<Student> pageInfo = new PageInfo<>(students);

        Page page = new Page();
        page.setPageIndex(pageStart);
        page.setPageSize(pageSize);
        page.setCount(mapper.count());
        page.setStudents(pageInfo.getList());
        return page;
    }

    @Override
    public Page getPageInformation(Integer startIndex, Integer pageSize) {
        Map<String, Integer> pageMap = new HashMap<String, Integer>();
        pageMap.put("startIndex",(startIndex - 1) * pageSize);
        pageMap.put("pageSize", pageSize);
        //第一个参数表示从第几行数据开始查,第二个参数表示查几条数据,“limit 3,2”表示从第四行数据开始,取两条数据。
        List<Student> students = mapper.gPI(pageMap);

        Page page = new Page();
        page.setPageIndex(startIndex);
        page.setPageSize(pageSize);
        page.setCount(mapper.count());
        page.setStudents(students);
        return page;
    }
}

Contraller:用业务层完成相关操作
StuContraller:

package com.example.demo.contraller;

import com.example.demo.pojo.Page;
import com.example.demo.pojo.Student;
import com.example.demo.service.serviceImpl.StuServiceMapperImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.*;

@RestController
public class StuContraller {
    @Autowired
    StuServiceMapperImpl service;

    @RequestMapping("/insert")
    public String insertStudent(@RequestParam("stu") String id) {
        Scanner scan = new Scanner(System.in);
        Student stu = new Student();
        stu.setStuId(id);
        System.out.print("请输入姓名:");
        stu.setName(scan.next());
        System.out.print("请输入年龄:");
        stu.setAge(scan.next());
        System.out.print("请输入地址:");
        stu.setAddress(scan.next());
        System.out.print("请输入班级:");
        stu.setClassId(scan.next());
        System.out.println(stu);
        service.insert(stu);
        return stu.toString() + "创建成功";
    }

    @RequestMapping("/delete/{id}")
    public String deleteStudent(@PathVariable("id") String id) {
        service.delete(id);
        return "id为" + id + "的信息已删除";
    }

    @RequestMapping("/update")
    public String updateStudent(@RequestParam("id") String id,@RequestParam("name") String name,@RequestParam("age") String age
    , @RequestParam("address") String address,@RequestParam("classId") String classID) {
        Student stu = new Student();
        stu.setStuId(id);
        stu.setName(name);
        stu.setAge(age);
        stu.setAddress(address);
        stu.setClassId(classID);
        service.update(stu);
        return "id为" + id + "学生的信息已更新";
    }

    @RequestMapping("/select")
    public String select(@RequestParam("id") String id) {
        return service.select(id).toString();
    }


    @RequestMapping("/selectByPageHelper/{startPage}/{pageSize}")
    public Page selectAll(@PathVariable("startPage") int startPage, @PathVariable("pageSize") int pageSize) {
        Page page = service.selectByPageHelper(startPage,pageSize);
        return page;
    }


    @RequestMapping("/selectLimit/{startIndex}/{pageSize}")
    public Page getPage(@PathVariable("startIndex") Integer startIndex,@PathVariable("pageSize") Integer pageSize) {
        Page pageInformation = service.getPageInformation(startIndex, pageSize);
        return pageInformation;
    }
}

application.properties:用于数据库连接信息等


spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/dbtest1
spring.datasource.username=#数据库用户名
spring.datasource.password=#数据库密码

mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.configuration.default-enum-type-handler=org.apache.ibatis.type.EnumTypeHandler
mybatis.configuration.call-setters-on-nulls=true
mybatis.configuration.jdbc-type-for-null=null

#pagehelper
pagehelper.helper-dialect=mysql
pagehelper.reasonable=true
pagehelper.support-methods-arguments=true
pagehelper.params=count=countSql

因为内容比较多,整理的有点杂,而且也是小白才上路,有错误的地方请大佬多多指点

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值