springboot+springm vc+mybatis实现增删改查案例!

本文涉及的产品
RDS AI 助手,专业版
RDSClaw,2核4GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: springboot+springm vc+mybatis实现增删改查案例!


最近这几天都在看关于springboot的内容,每天新会获得点新收获,并且都总结发在公众号中;最后经过不懈努力,不断查找相关网页,解决各种各样的问题,终于搭建出来了个新版的“S(springboot)S(springmvc)M(mybatis)框架”,下面是搭建步骤。

01

在idea中创建springboot项目

在idea编辑器中,点击File->New->Project->Spring Initializr->选择jdk版本为1.8,然后点击Next

然后按照下图修改各个输入框的值,然后点击Next

选择web,勾上spring web

接下来选择sql,勾上对应的jdbc,mybaits和mysql driver,然后点击Next

然后点击Finish,新建完的项目结构如下:

到现在为止,一个崭新的springboot+Maven项目就搭建好了,接下来我们来配置一下pom.xml文件。

02

配置pom.xml文件

由于我们前端需要使用jsp来展示数据,所以pom.xml文件里面需要配置一个编译解析jsp页面的依赖,代码如下:

<!--用于解析jsp页面-->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-jsp-api</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>

在首页我这边需要用到jstl来展示数据,所以还需要导入jstl的相关依赖,如下所示:

<!--jstl相关依赖-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>

03

编写application.properties文件

虽然springboot对配置文件简化了很多,但是必要的配置还是要有的, 那么这些配置就都放在了application.properties文件中,也有的项目中是application.yml文件,在这里我们以application.properties文件为例:

首先需要配置一下服务器的端口号,默认为8080,也可以改,代码如下:

#服务器端口号
server.port=8080

配置数据池:

#配置数据池
spring.datasource.url=jdbc:mysql://localhost:3306/schooldb
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root

配置mybatis的别名:

#起别名
mybatis.type-aliases-package=com.xiongxiong.entity

配置日志信息:

#配置日志
logging.level.com.xiongxiong.dao = debug
logging.file.path=log/
logging.file.name=book.log

配置springmvc的内容

#配置springmvc的内容
#页面默认前缀配置
spring.mvc.view.prefix=/
#页面默认后缀配置
spring.mvc.view.suffix=.jsp

这是些基础的配置,如果还有其他扩展,可以自行添加配置信息。

04

搭建底层的三层架构(数据库脚本和结构在文末)

BookManage

在com.xiongxiong下面新建包entity,存放实体类BookManage,按照数据库表中的字段,对应写实体类的属性,最后getter和setter,代码如下:

package com.xiongxiong.entity;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
public class BookManage {
    private int bid;
    private String bname;
    private String bauthor;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date btime;
    private int btype;
    public int getBid() {
        return bid;
    }
    public void setBid(int bid) {
        this.bid = bid;
    }
    public String getBname() {
        return bname;
    }
    public void setBname(String bname) {
        this.bname = bname;
    }
    public String getBauthor() {
        return bauthor;
    }
    public void setBauthor(String bauthor) {
        this.bauthor = bauthor;
    }
    public Date getBtime() {
        return btime;
    }
    public void setBtime(Date btime) {
        this.btime = btime;
    }
    public int getBtype() {
        return btype;
    }
    public void setBtype(int btype) {
        this.btype = btype;
    }
}

BookManageMapper

在com.xiongxiong中新建包dao,在该包中创建接口BookManageMapper,分别编写增删改以及查询全部和根据编号查询的接口。

package com.xiongxiong.dao;
import com.xiongxiong.entity.BookManage;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
@Mapper //证明是mybatis的mapper文件
@Repository     //证明这是dao层
public interface BookManageMapper {
    @Select("select * from BookManage;")
    //查询全部
    List<BookManage> findBookAll();
    @Insert("insert into bookmanage (bname,bauthor,btime,btype) value(#{bname},#{bauthor},#{btime},#{btype});")
    //添加
    int addBook(BookManage bookManage);
    @Delete("delete from BookManage where bid = #{bid};")
    //删除
    int delBook(int bid);
    @Update("update bookmanage set bname=#{bname},bauthor=#{bauthor},btime=#{btime},btype=#{btype} where bid = #{bid}")
    //修改
    int updateBook(BookManage bookManage);
    @Select("select * from bookmanage where bid = #{bid}")
    //根据编号查询编号
    BookManage findBookById(int bid);
}

需要注意的是,由于我们统一都使用注解的方式,所以不用在编写SQL映射文件(mapper),所有的sql语句通过注解方式实现,详情请看代码,各个功能都有相应的注释。

IBookManageService和BookManageServiceImpl

同样,在com.xiongxiong包下面创建service包存放业务的接口,在service包下面新建impl包,存放的是业务接口的实现类,代码如下:

IBookManageService

package com.xiongxiong.service;
import com.xiongxiong.entity.BookManage;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import java.util.List;
public interface IBookManageService {
    //查询全部
    List<BookManage> findBookAll();
    //添加
    int addBook(BookManage bookManage);
    //删除
    int delBook(int bid);
    //修改
    int updateBook(BookManage bookManage);
    //根据编号查询编号
    BookManage findBookById(int bid);
}

BookManageServiceImpl

package com.xiongxiong.service.impl;
import com.xiongxiong.dao.BookManageMapper;
import com.xiongxiong.entity.BookManage;
import com.xiongxiong.service.IBookManageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@EnableTransactionManagement    //开启事务管理器
@Transactional                  //配置事务
@Service                        //证明这是一个service层
public class BookManageServiceImpl implements IBookManageService {
    //Dao层的接口
    @Autowired
    BookManageMapper bookManageMapper;
    @Override
    public List<BookManage> findBookAll() {
        return bookManageMapper.findBookAll();
    }
    @Override
    public int addBook(BookManage bookManage) {
        return bookManageMapper.addBook(bookManage);
    }
    @Override
    public int delBook(int bid) {
        return bookManageMapper.delBook(bid);
    }
    @Override
    public int updateBook(BookManage bookManage) {
        return bookManageMapper.updateBook(bookManage);
    }
    @Override
    public BookManage findBookById(int bid) {
        return bookManageMapper.findBookById(bid);
    }
}

需要注意的是,在实现类中,需要添加开启事务@EnableTransactionManagement和配置事务@Transactional的注解。

在com.xiongxiong下面创建包web,该包中放控制器,在控制器中实现增删改查的功能以及页面之间的跳转,代码如下:

package com.xiongxiong.web;
import com.xiongxiong.entity.BookManage;
import com.xiongxiong.service.IBookManageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.List;
@Controller
public class IndexController {
    //创建Service的对象
    @Autowired
    private IBookManageService bookManageService;
    //默认进入首页
    @RequestMapping("default")
    public String index(Model model) {
        List<BookManage> bookManageList =
                bookManageService.findBookAll();
        model.addAttribute("bookManageList",bookManageList);
        return "index";
    }
    //删除
    @RequestMapping("delBook")
    public String delBook(Model model, int bid) {
        bookManageService.delBook(bid);
        index(model);
        return "index";
    }
    //添加
    @RequestMapping("addBook")
    public String addBook(BookManage bookManage, Model model) {
        bookManageService.addBook(bookManage);
        index(model);
        return "index";
    }
    //跳转到添加的页面
    @RequestMapping("add")
    public String add() {
        return "addBook";
    }
}

05

创建jsp页面

在main下面新建文件夹webapp,在该文件夹中新建jsp页面就可以,其中我还用到了jquery(下面有下载链接)的环境,放在js目录下面,目录结构如下所示:

jquery-1.12.4.js:点此下载

bootstrap.js:点此下载

创建index.jsp,用来展示查询展示所有数据,查询的功能在控制器IndexController中实现的,下面是代码:

<%--
  Created by IntelliJ IDEA.
  User: 24519
  Date: 2021/1/20
  Time: 10:38
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="f" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
    <title>首页</title>
</head>
<body>
<h1>图书信息</h1>
<table border="1">
    <tr>
        <td>图书名称</td>
        <td>图书作者</td>
        <td>购买时间</td>
        <td>图书分类</td>
        <td>操作</td>
    </tr>
    <c:forEach items="${bookManageList}" var="book">
        <tr>
            <td>${book.bname}</td>
            <td>${book.bauthor}</td>
            <td>
                <f:formatDate value="${book.btime}" pattern="yyyy-MM-dd"></f:formatDate>
            </td>
            <td>
                <c:if test="${book.btype==1}">
                    计算机/软件
                </c:if>
                <c:if test="${book.btype==2}">
                    小说/文摘
                </c:if>
                <c:if test="${book.btype==3}">
                    杂项
                </c:if>
            </td>
            <td><a href="delBook?bid=${book.bid}">删除</a></td>
        </tr>
    </c:forEach>
</table>
<a href="addBook.jsp" style="color:red">新增图书信息</a>
<script src="js/jquery-1.12.4.js" type="text/javascript"></script>
<script type="text/javascript">
    $(function () {
        $("tr:even").css("background", "green");
        $("tr:first").css("background", "blue");
    });
</script>
</body>
</html>

创建添加信息的jsp页面addBook.jsp,主要用来添加信息,添加的功能在控制器IndexController中实现,还实现了必要的表单验证,下面是代码:

<%--
  Created by IntelliJ IDEA.
  User: 24519
  Date: 2021/1/20
  Time: 11:35
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>新增图书信息</h1>
<form action="addBook" method="post">
    图书名称:<input type="text" name="bname"/><br/>
    图书作者:<input type="text" name="bauthor"/><br/>
    购买日期:<input type="text" name="btime"/><br/>
    图书类别:
    <select name="btype">
        <option value="0">选择所属分类</option>
        <option value="1">计算机/软件</option>
        <option value="2">小说/文摘</option>
        <option value="3">杂项</option>
    </select><br/>
    <input type="submit" value="增加图书"/>
</form>
<script src="js/jquery-1.12.4.js" type="text/javascript"></script>
<script type="text/javascript">
    $(function () {
        $("input[type='submit']").click(function () {
            var bname = $("input[name='bname']").val();
            var bauthor = $("input[name='bauthor']").val();
            var btime = $("input[name='btime']").val();
            var btype = $("input[name='btype']").val();
            if (bname == "") {
                alert("图书名称不能为空");
                return false;
            }
            if (bauthor == "") {
                alert("图书作者不能为空");
                return false;
            }
            var dateinfo = /^[0-9]{4}-[0-1]{1}[0-9]{1}-[0-3]{1}[0-9]{1}/;
            if (!dateinfo.test(btime)) {
                alert("日期格式不正确");
                return false;
            }
            if (btype == 0) {
                alert("图书分类需要选择");
                return false;
            }
        });
    });
</script>
</body>
</html>

然后启动,运行,运行结果如下:

控制台日志如下:

日志文件book.log:

数据库脚本:

/*
SQLyog Professional v12.08 (32 bit)
MySQL - 5.5.27 : Database - schooldb
*********************************************************************
*/
/*!40101 SET NAMES utf8 */;
/*!40101 SET SQL_MODE=''*/;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`schooldb` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `schooldb`;
/*Table structure for table `bookmanage` */
DROP TABLE IF EXISTS `bookmanage`;
CREATE TABLE `bookmanage` (
  `bid` int(11) NOT NULL AUTO_INCREMENT,
  `bname` varchar(40) NOT NULL,
  `bauthor` varchar(40) NOT NULL,
  `btime` datetime NOT NULL,
  `btype` int(11) NOT NULL,
  PRIMARY KEY (`bid`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
/*Data for the table `bookmanage` */
insert  into `bookmanage`(`bid`,`bname`,`bauthor`,`btime`,`btype`) values (1,'三国演义','罗贯中','2021-09-08 00:00:00',2),(2,'水浒传','施耐庵','2021-09-08 00:00:00',2),(3,'狂人日记','魯迅','2021-09-08 00:00:00',3),(5,'永乐大典','鲁迅','2020-09-08 00:00:00',2);
/*Table structure for table `dept` */
DROP TABLE IF EXISTS `dept`;
CREATE TABLE `dept` (
  `did` int(11) NOT NULL AUTO_INCREMENT,
  `dname` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`did`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
/*Data for the table `dept` */
insert  into `dept`(`did`,`dname`) values (1,'测试部'),(2,'销售部'),(3,'服务部'),(4,'开发部'),(5,'运营部');
/*Table structure for table `dog` */
DROP TABLE IF EXISTS `dog`;
CREATE TABLE `dog` (
  `did` int(11) NOT NULL AUTO_INCREMENT,
  `dname` varchar(50) DEFAULT NULL,
  `dpass` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`did`)
) ENGINE=InnoDB AUTO_INCREMENT=1785770044 DEFAULT CHARSET=utf8;
/*Data for the table `dog` */
insert  into `dog`(`did`,`dname`,`dpass`) values (1,'111','111'),(2,'旺财','123'),(3,'幸福','111'),(4,'财旺','123'),(5,'进钱','111'),(6,'富贵','123'),(1785770043,'黑虎','123');
/*Table structure for table `emp` */
DROP TABLE IF EXISTS `emp`;
CREATE TABLE `emp` (
  `eid` int(11) NOT NULL AUTO_INCREMENT COMMENT '编号',
  `ename` varchar(50) DEFAULT NULL COMMENT '姓名',
  `epass` varchar(50) DEFAULT NULL COMMENT '密码',
  `edid` int(11) DEFAULT NULL COMMENT '所在部门编号',
  PRIMARY KEY (`eid`),
  KEY `fk_deptid` (`edid`),
  CONSTRAINT `fk_deptid` FOREIGN KEY (`edid`) REFERENCES `dept` (`did`)
) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=utf8;
/*Data for the table `emp` */
insert  into `emp`(`eid`,`ename`,`epass`,`edid`) values (1,'王伟','111',1),(2,'张王','111',1),(4,'张三','111',4),(6,'张方仪','111',1),(7,'张坤鹏','111',1),(9,'翟选浩','123',1),(10,'季淑琦','111',1),(11,'袁康凯','111',1),(12,'丁长琨','111',1),(33,'老赵','123',1),(34,'老王','123',1),(35,'老李','123',1),(36,'小贼','123',1),(37,'老8','123',1);
/*Table structure for table `financingproduct` */
DROP TABLE IF EXISTS `financingproduct`;
CREATE TABLE `financingproduct` (
  `id` varchar(10) NOT NULL,
  `Risk` int(11) NOT NULL,
  `Income` varchar(10) NOT NULL,
  `SaleStarting` datetime NOT NULL,
  `SaleEnd` datetime DEFAULT NULL,
  `End` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*Data for the table `financingproduct` */
insert  into `financingproduct`(`id`,`Risk`,`Income`,`SaleStarting`,`SaleEnd`,`End`) values ('1',1,'5.68%','2020-04-09 00:00:00','2021-05-09 00:00:00','2029-09-08 00:00:00'),('2',3,'5.68%','2020-04-09 00:00:00','2021-05-09 00:00:00','2029-09-08 00:00:00'),('3',2,'5.3%','2020-04-09 00:00:00','2021-05-09 00:00:00','2029-09-08 00:00:00'),('4',2,'6.8%','2020-04-09 00:00:00','2021-05-09 00:00:00','2029-09-08 00:00:00'),('5',1,'4.98%','2020-04-09 00:00:00','2021-05-09 00:00:00','2029-09-08 00:00:00');
/*Table structure for table `student` */
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `sid` int(11) NOT NULL AUTO_INCREMENT,
  `sname` varchar(50) DEFAULT NULL,
  `sphone` varchar(50) DEFAULT NULL,
  `spass` varchar(50) DEFAULT NULL,
  `saddress` varchar(50) DEFAULT NULL,
  `sage` int(11) DEFAULT NULL,
  PRIMARY KEY (`sid`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8;
/*Data for the table `student` */
insert  into `student`(`sid`,`sname`,`sphone`,`spass`,`saddress`,`sage`) values (1,'张三','15066675713','111','普通',11),(2,'李四','15066675713','222','普通',20),(3,'admin','15066675713','333','管理员',66),(4,'test','15066675713','111','普通',20),(5,'张先生','150','111','普通',12),(6,'张先生','150','111','普通',12),(7,'张先生','150','111','普通',12),(8,'张先生','150','111','普通',12),(9,'张先生','150','111','普通',12),(10,'张先生','150','111','普通',12),(11,'张先生','150','111','普通',12),(12,'张先生','150','111','普通',12),(13,'张先生','150','111','济南',12),(14,'张先生','150','111','普通',12),(15,'张先生','150','111','普通',12),(16,'张先生','150','111','普通',12),(17,'张先生','150','111','普通',12),(18,'张先生','150','111','普通',12),(19,'张先生','150','111','普通',12),(20,'李先生','160','111','普通',13);
/*Table structure for table `teacher` */
DROP TABLE IF EXISTS `teacher`;
CREATE TABLE `teacher` (
  `tid` int(11) NOT NULL AUTO_INCREMENT,
  `tname` varchar(50) DEFAULT NULL,
  `tpass` varchar(50) DEFAULT NULL,
  `tage` int(11) DEFAULT NULL,
  `tjob` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`tid`)
) ENGINE=InnoDB AUTO_INCREMENT=805760409 DEFAULT CHARSET=utf8;
/*Data for the table `teacher` */
insert  into `teacher`(`tid`,`tname`,`tpass`,`tage`,`tjob`) values (1,'张老师','123',25,'数学'),(2,'王老师','123',36,'语文'),(3,'马老师','123',90,'武术'),(4,'高老师','123',32,'外语'),(5,'赵老师','123',24,'体育'),(6,'钱老师','123',36,'未安排'),(7,'钱老师','123',36,'未安排'),(8,'钱老师','123',36,'未安排'),(9,'钱老师','123',36,'未安排'),(10,'钱老师','123',36,'未安排'),(11,'钱老师','123',36,'未安排'),(12,'钱老师','123',36,'未安排'),(13,'钱老师','123',36,'未安排'),(14,'钱老师','123',36,'未安排'),(15,'钱老师','123',36,'未安排'),(16,'钱老师','123',36,'未安排'),(17,'钱老师','123',36,'未安排'),(805760404,'路老师','123',56,'忽悠学'),(805760405,'路老师','123',56,'忽悠学'),(805760406,'翟老师','123456',56,'化学'),(805760407,'贾老师','123456',56,'物理'),(805760408,'潘老师','123456',56,'金融学');
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;




相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
6月前
|
前端开发 Java 微服务
《深入理解Spring》:Spring、Spring MVC与Spring Boot的深度解析
Spring Framework是Java生态的基石,提供IoC、AOP等核心功能;Spring MVC基于其构建,实现Web层MVC架构;Spring Boot则通过自动配置和内嵌服务器,极大简化了开发与部署。三者层层演进,Spring Boot并非替代,而是对前者的高效封装与增强,适用于微服务与快速开发,而深入理解Spring Framework有助于更好驾驭整体技术栈。
|
6月前
|
JavaScript Java Maven
【SpringBoot(二)】带你认识Yaml配置文件类型、SpringMVC的资源访问路径 和 静态资源配置的原理!
SpringBoot专栏第二章,从本章开始正式进入SpringBoot的WEB阶段开发,本章先带你认识yaml配置文件和资源的路径配置原理,以方便在后面的文章中打下基础
556 4
|
前端开发 Java 测试技术
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@RequestParam
本文介绍了 `@RequestParam` 注解的使用方法及其与 `@PathVariable` 的区别。`@RequestParam` 用于从请求中获取参数值(如 GET 请求的 URL 参数或 POST 请求的表单数据),而 `@PathVariable` 用于从 URL 模板中提取参数。文章通过示例代码详细说明了 `@RequestParam` 的常用属性,如 `required` 和 `defaultValue`,并展示了如何用实体类封装大量表单参数以简化处理流程。最后,结合 Postman 测试工具验证了接口的功能。
768 0
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@RequestParam
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于 xml 的整合
本教程介绍了基于XML的MyBatis整合方式。首先在`application.yml`中配置XML路径,如`classpath:mapper/*.xml`,然后创建`UserMapper.xml`文件定义SQL映射,包括`resultMap`和查询语句。通过设置`namespace`关联Mapper接口,实现如`getUserByName`的方法。Controller层调用Service完成测试,访问`/getUserByName/{name}`即可返回用户信息。为简化Mapper扫描,推荐在Spring Boot启动类用`@MapperScan`注解指定包路径避免逐个添加`@Mapper`
868 0
|
JSON 前端开发 Java
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@RequestBody
`@RequestBody` 是 Spring 框架中的注解,用于将 HTTP 请求体中的 JSON 数据自动映射为 Java 对象。例如,前端通过 POST 请求发送包含 `username` 和 `password` 的 JSON 数据,后端可通过带有 `@RequestBody` 注解的方法参数接收并处理。此注解适用于传递复杂对象的场景,简化了数据解析过程。与表单提交不同,它主要用于接收 JSON 格式的实体数据。
1424 0
|
前端开发 Java 微服务
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@PathVariable
`@PathVariable` 是 Spring Boot 中用于从 URL 中提取参数的注解,支持 RESTful 风格接口开发。例如,通过 `@GetMapping(&quot;/user/{id}&quot;)` 可以将 URL 中的 `{id}` 参数自动映射到方法参数中。若参数名不一致,可通过 `@PathVariable(&quot;自定义名&quot;)` 指定绑定关系。此外,还支持多参数占位符,如 `/user/{id}/{name}`,分别映射到方法中的多个参数。运行项目后,访问指定 URL 即可验证参数是否正确接收。
843 0
|
JSON 前端开发 Java
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@RequestMapping
@RequestMapping 是 Spring MVC 中用于请求地址映射的注解,可作用于类或方法上。类级别定义控制器父路径,方法级别进一步指定处理逻辑。常用属性包括 value(请求地址)、method(请求类型,如 GET/POST 等,默认 GET)和 produces(返回内容类型)。例如:`@RequestMapping(value = &quot;/test&quot;, produces = &quot;application/json; charset=UTF-8&quot;)`。此外,针对不同请求方式还有简化注解,如 @GetMapping、@PostMapping 等。
760 0
|
JSON 前端开发 Java
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@RestController
本文主要介绍 Spring Boot 中 MVC 开发常用的几个注解及其使用方式,包括 `@RestController`、`@RequestMapping`、`@PathVariable`、`@RequestParam` 和 `@RequestBody`。其中重点讲解了 `@RestController` 注解的构成与特点:它是 `@Controller` 和 `@ResponseBody` 的结合体,适用于返回 JSON 数据的场景。文章还指出,在需要模板渲染(如 Thymeleaf)而非前后端分离的情况下,应使用 `@Controller` 而非 `@RestController`
546 0
|
10月前
|
Java 数据库连接 数据库
Spring boot 使用mybatis generator 自动生成代码插件
本文介绍了在Spring Boot项目中使用MyBatis Generator插件自动生成代码的详细步骤。首先创建一个新的Spring Boot项目,接着引入MyBatis Generator插件并配置`pom.xml`文件。然后删除默认的`application.properties`文件,创建`application.yml`进行相关配置,如设置Mapper路径和实体类包名。重点在于配置`generatorConfig.xml`文件,包括数据库驱动、连接信息、生成模型、映射文件及DAO的包名和位置。最后通过IDE配置运行插件生成代码,并在主类添加`@MapperScan`注解完成整合
1566 1
Spring boot 使用mybatis generator 自动生成代码插件
|
10月前
|
Java 数据库连接 API
Java 对象模型现代化实践 基于 Spring Boot 与 MyBatis Plus 的实现方案深度解析
本文介绍了基于Spring Boot与MyBatis-Plus的Java对象模型现代化实践方案。采用Spring Boot 3.1.2作为基础框架,结合MyBatis-Plus 3.5.3.1进行数据访问层实现,使用Lombok简化PO对象,MapStruct处理对象转换。文章详细讲解了数据库设计、PO对象实现、DAO层构建、业务逻辑封装以及DTO/VO转换等核心环节,提供了一个完整的现代化Java对象模型实现案例。通过分层设计和对象转换,实现了业务逻辑与数据访问的解耦,提高了代码的可维护性和扩展性。
383 1