纯后端SSM框架(spring+springboot+mybatis)下实现CRUD 小白练手

本文介绍如何在SpringBoot项目中使用MyBatis进行增删改查操作,并提供了详细的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

更新:

Mybatis允许增删改查直接定义以下类型的返回值:Integer、Long、Boolean、void。(这些类型的包装类或基本类型都可以)

比如:用boolean,如果影响行数超过0行以上,就可以返回true;0行就返回false。

只要在接口返回方法上定义就行,无需在sql映射文件中写返回值类型,而且也写不了。


在springboot中实现,先介绍一下实现该项目的需要的几个文件:

1、Java文件夹:

bean层:entity包下的  Student.java  文件(存放具体的java对象,用来映射数据库的字段的,是简单的pojo)

service层:service包下的 StudentService.java 接口文件(业务逻辑接口,写业务逻辑用的)

                    service.imp包下的 StudentServiceImpl.java 接口实现类文件(实现业务接口,一般事务控制写在这里)

dao层:dao包下的 StudentDao.java 接口文件(数据访问层接口,与数据打交道,可以是数据库操作,也可以是文件读写操作,甚至是redis缓存操作,也有人称数据持久层)

controller层:controller包下的 StudentController.java 文件(控制层,也叫web控制器,springmvc在这里发挥作用)

2、resources文件夹:

dao层:mapper包下的 StudentMapper.xml 文件(存放每个dao中方法对应的sql,在这个文件中配置,不需要写daoImpl文件)

3、注意:此处不标注spring、springmvc等配置文件了,一般网上搜会都有的。新手小白使用springboot,不需要对框架细则有过多关注。


各个文件的代码:

至于文件目录怎么安排,有需要的可以参考package路径

(1)  Student.java  

package com.entity;

public class Student {
    private int id;

    private String name;
    private int age;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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



}

(2)StudentService.java

package com.service;

//会用到Student对象,所以需要导入相应import
import com.entity.Student;

public interface StudentService {

    /**
     *插入学生信息
     * @param student
     * @return
     */
    int insertStu(Student student);

     void deleteStu(int id);

    void updateStu(Student student);

     Student selectStu(int id);

     int selectNum(int age);

}

至于方法上的注释信息,最好养成习惯,对自己写的代码负责。

(3)StudentServiceImpl.java

package com.service.impl;

import com.dao.StudentDao;
import com.entity.Student;
import com.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;


//这个注释一定要加上,不然在Controller层中对私有变量studentService的@Autowired注释会报错
@Service("StudentService")
public class StudentServiceImpl implements StudentService {
    @Autowired
    private StudentDao studentDao;

    public int insertStu(Student student){
        return studentDao.insertInfo(student);
    }

    @Override
    public Student selectStu(int id) {
        return studentDao.selectInfo(id);
    }


   public  void deleteStu(int id){
        studentDao.deleteInfo(id);
    }

    public void updateStu(Student student){
        studentDao.updateInfo(student);
    }



    @Override
    public int selectNum(int age) {
        return studentDao.selectInfoTest(age);
    }
}

(4)StudentDao.java

package com.dao;


import com.entity.Student;
import org.apache.ibatis.annotations.Param;



public interface StudentDao {
    /**
     *插入学生信息
     * @param 
     * @return int
     */
    int insertInfo(@Param("student") Student student);

    /**
     * 根据学生id删除信息
     * @param id
     * @return
     */
    int deleteInfo(int id);

    /**
     * 更新学生信息
     * @param student
     * @return
     */
// Student对象是要输入三个参数值的,所以添加上@Param来进行绑定
    int updateInfo(@Param("student") Student student);

    /**
     * 根据学生id查询学生信息
     * @param id
     * @return
     */
    Student selectInfo (int id);


    int selectInfoTest(int age);

}

@Param用来绑定参数,如果传入的参数值多于1个,需要添加上这个注解。

StudentDao.java 文件中定义的各种方法,必需和StudentMapper.xml文件中各种sql语句中的id对应 。

(5)StudentController.java

package com.controller;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import com.entity.Student;
import com.service.StudentService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;



@Controller
@RequestMapping("/test")
public class StudentController {

    @Autowired
    private StudentService studentService;

    @RequestMapping("getInfo")
    @ResponseBody
    public int  getInfo(Student student){
        return studentService.insertStu(student);

    }

    @RequestMapping("findInfo")
    @ResponseBody
    public Student findInfo(int id){
        return  studentService.selectStu(id);
    }


    @RequestMapping("deleteInfo")
    public void deleteInfo(int id){
         studentService.deleteStu(id);
    }


    @RequestMapping("updateInfo")
    public void updateInfo(Student Student){
        studentService.updateStu(Student);
    }


    @RequestMapping("test")
    @ResponseBody
    public int  selectNum(int age){
        return studentService.selectNum(age);
    }

}

@RequestMapping(“url”)是用来写请求路径的

@ResponseBody 则是用来将Controller中方法返回的对象,通过适当的HttpMessageConverter转换为指定格式的数据,如:json、xml等,然后通过Response响应给客户端的。

(6)StudentMapper.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.dao.StudentDao">

    <resultMap id="ResultMap" type="com.entity.Student">
        <id column="id" jdbcType="INTEGER" property="id" />
        <result column="name" jdbcType="VARCHAR" property="name"/>
        <result column="age" jdbcType="INTEGER" property="age"/>
    </resultMap>

    <insert id="insertInfo" >
        INSERT INTO test_student (id,name,age) VALUES (#{student.id},#{student.name},#{student.age})
    </insert>

    <delete id="deleteInfo">
        DELETE FROM test_student WHERE id=#{id}
    </delete>

    <update id="updateInfo">
        UPDATE test_student SET name=#{student.name},age=#{student.age} WHERE id=#{student.id}
    </update>

    <select id="selectInfo" resultMap="ResultMap">
        SELECT * FROM test_student WHERE id=#{id}
    </select>

    <select id="selectInfoTest" resultType="INTEGER">
        SELECT count(*) FROM test_student WHERE age=#{age}
    </select>
</mapper>

resultMap是返回集,当返回参数是一个以上的时候,则需要加上返回集合;反之,仅对单个返回变量的类型控制由resultType设置就可以了。

StudentDao.java 中添加@Param注解的,在StudentMapper.xml 文件中设置参数名的时候,需要添加 student. 前缀来具体的标识到是Student对象中的哪个参数值。

(7)数据库的创建信息

CREATE TABLE `test_student` (
  `id` int(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) DEFAULT NULL,
  `age` int(25) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

测试各个方法效果

(1)插入信息

(2)删除信息

(3)修改信息

(4)根据id查询信息

(5)根据age查询影响的行数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值