基于Springboot+vue开发实现自行车租赁管理系统

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 基于Springboot+vue开发实现自行车租赁管理系统

项目编号:BS-XX-156

一,项目简介


近年来随着科技技术的进步与发展,“共享”、“租车”等相关的APP陆续出现在我们的生活中。随着城市机动车数量的增加,环境污染、交通拥堵等问题日渐严重,因此,发展新的绿色出行模式,引导人们减少机动车出行成为解决这一问题的新思路。在这种背景下,“公共自行车+公共交通”的出行模式逐渐在我国发展起来,它鼓励人们更多的采用公共自行车这一出行工具。相较于机动车出行,这种方式在节能减排的同时,也能提高居民的出行效率,已经在我国许多城市流行起来。


基于这种背景,设计和开发一个功能全面,界面友好、稳定高效的自行车租赁管理系统。本文主要论述了一个基于JAVAWEB技术的自行车租赁管理系统,概述了课题研究背景、国内外发展现状,以及系统的设计原理、设计思想和具体实现过程。对在设计过程中涉及到的关键设计思想及重要作业流程做了具体分析和介绍,并对系统各个模块的设计思想及设计过程做了详细阐述。


本系统设计采用了JAVAWEB技术,使用SpringBoot框架,以Mysql5.0作为数据库支撑平台,应用到的技术包括JAVA、MyBatis、Vue、软件工程思想等


本系统使用B/S结构,配合MySql数据库开发,以IDEA开发平台为主导的系统。可实现在线管理自行车、在线选择自行车、数据分析对比等功能,让用户选择自己喜欢的自行车。系统涉及到的技术主要由Vue制作前端页面和Java作为后端主要技术,并采用SpringBoot、Mybatis后端架构。


本自行车租赁管理系统,系统主要分为用户权限和管理员权限,权限不一样对应的功能也不一样,大致分为:自行车模块、信息模块、租赁地址模块、订单模块等,各模块预计功能概述如下:


自行车管理:此模块对于系统管理员,主要可以添加自行车删除自行车等功能。对于用户,可以浏览自己喜欢的自行车查看具体自行车信息。


信息管理:此模块对于系统管理员,既可以查看修改自己的个人信息,也可以查看用户的信息,还可以对用户的权限进行修改,可以将普通用户的权限提高至系统管理员。对于用户,只能查看或者修改自己的个人信息。


订单管理:此模块对于系统管理员和用户,都可以查看订单明细,申请退单,对订单进行评价等操作。


问题反馈管理:此模块包括用户在租赁过程中出现的问题进行提交、管理员针对相关问题进行用户反馈的操作。


卡券包管理:此模块对于系统管理员,可以发放一些优惠券,对于用户可以查询自己的所有卡券,可以使用这些卡券。


地址管理:对于系统管理员,可以新添加地址和废除不使用的地址,对于用户,可以查询所有地址信息,根据自己的位置选定最适合的地址进行取车和还车。


信息统计管理:此模块对于系统管理员,对用户信息、自行车信息、地址信息等进行可视化数据分析。对于用户,对订单,历史记录、钱包等进行可视化的数据分析。

二,环境介绍


语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

后台开发技术:Springboot+mybatis+springmvc+swagger

前台开发技术:Vue+ElementUI+Axios

其它:支付宝沙箱支付

三,系统展示


管理员登陆系统进行管理

image.png

用户管理

image.png

image.png

自行车管理

image.png

自行车回收

image.png

故障车维护

image.png

地址管理

image.png

优惠卷管理

image.png

image.png

用户投诉

image.png

订单管理

image.png

退款处理

image.png

用户注册登陆后进行租车

用户注册登陆后进行租车

image.png

image.png

租车


image.png

image.png

image.png

image.png

还车

image.png

支付:注册支付宝沙箱账户进行支付

image.png

购买优惠卷


image.png

image.png

上报故障

image.png

投诉建议

image.png

四,核心代码展示


package com.wxh.bicyclerental.controller;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.wxh.bicyclerental.entity.Advise;
import com.wxh.bicyclerental.entity.User;
import com.wxh.bicyclerental.service.IAdviseService;
import com.wxh.bicyclerental.service.IUserService;
import com.wxh.bicyclerental.utils.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
/**
 * 投诉意见管理
 */
@Api
@RestController
@RequestMapping("/advise")
@CrossOrigin
public class AdviseController {
    @Autowired
    private IAdviseService adviseService;
    @Autowired
    private IUserService userService;
    /**
     * 添加新投诉
     */
    @PostMapping("/addAdvise")
    @ApiOperation("添加新投诉")
    public Result addAdvise(@RequestBody Advise advise,@RequestParam String username) {
        //根据用户名查询用户id
        User user = userService.selectByUserName(username);
        Integer id = user.getId();
        advise.setUserId(id);
        //设置状态为0
        advise.setState(0);
        if(adviseService.insert(advise) > 0) {
            return Result.ok().data("添加成功");
        }else {
            return Result.error().data("添加失败");
        }
    }
    /**
     * 根据状态分页查询投诉建议
     */
    @GetMapping("/findByState")
    @ApiOperation("根据状态分页查询投诉建议")
    public Result findByState(@RequestParam Integer state, @RequestParam int pageNo, @RequestParam int pageSize) {
        Map map = new HashMap<>();
        //使用PageHelper分页插件
        PageHelper.offsetPage(pageNo, pageSize);
        PageInfo<Advise> adviseList = PageInfo.of(adviseService.select(state));
        map.put("total", adviseList.getTotal());
        map.put("data", adviseList.getList());
        return Result.ok().data(map);
    }
    /**
     * 修改投诉状态
     */
    @PostMapping("/updateState")
    @ApiOperation("修改投诉状态")
    public Result updateState(@RequestBody Advise advise) {
        Integer id = advise.getId();
        if(adviseService.delete(id) > 0) {
            return Result.ok().data("修改成功");
        }else {
            return Result.error().data("修改失败");
        }
    }
}
package com.wxh.bicyclerental.controller;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.wxh.bicyclerental.entity.Bicycle;
import com.wxh.bicyclerental.service.IBicycleService;
import com.wxh.bicyclerental.utils.CodeUtil;
import com.wxh.bicyclerental.utils.Result;
import com.wxh.bicyclerental.utils.StringUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
/**
 * 自行车管理
 */
@Api
@RestController
@RequestMapping("/bicycle")
@CrossOrigin
public class BicycleController {
    @Autowired
    private IBicycleService bicycleService;
    /**
     * 新车录入
     */
    @PostMapping("/addBicycle")
    @ApiOperation("新车录入")
    public Result addBicycle(@RequestBody Bicycle bicycle) {
        //设置状态为1
        bicycle.setState(1);
        //生成16位id
        Long id = CodeUtil.RundCode();
        bicycle.setBicycleCode(id);
        if(bicycleService.insert(bicycle) > 0) {
            return Result.ok().data("添加成功");
        }else {
            return Result.error().data("添加失败");
        }
    }
    /**
     * 查询所有自行车信息
     */
    @GetMapping("/findAll")
    @ApiOperation("查询所有自行车信息")
    public Result findAll() {
        return Result.ok().data(bicycleService.select());
    }
    /**
     * 分页查询自行车信息
     */
    @GetMapping("/pageQueryBicycle")
    @ApiOperation("分页查询自行车信息")
    public Result pageQueryBicycle(@RequestParam int pageNo, @RequestParam int pageSize) {
        Map map = new HashMap<>();
        //使用PageHelper分页插件
        PageHelper.offsetPage(pageNo, pageSize);
        PageInfo<Bicycle> bicycleList = PageInfo.of(bicycleService.select());
        map.put("total", bicycleList.getTotal());
        map.put("data", bicycleList.getList());
        return Result.ok().data(map);
    }
    /**
     * 根据自行车编码查询自行车信息
     */
    @PostMapping("/findByCode")
    @ApiOperation("根据自行车编码查询自行车信息")
    public Result findByCode(@RequestBody Bicycle bicycle) {
        if(StringUtils.isNull(bicycle)) {
            return Result.error().data("失败");
        }else {
            Long bicycleCode = bicycle.getBicycleCode();
            return Result.ok().data(bicycleService.selectOne(bicycleCode));
        }
    }
    /**
     * 将自行车状态设为2(报废)删除操作
     */
    @GetMapping("/removeBicycle")
    @ApiOperation("删除自行车")
    public Result removeBicycle(@RequestParam Long bicycleCode) {
        if(bicycleService.removeBicycle(bicycleCode) > 0) {
            return Result.ok().data("删除成功");
        }else {
            return Result.error().data("删除失败");
        }
    }
}
package com.wxh.bicyclerental.controller;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.wxh.bicyclerental.entity.Coupon;
import com.wxh.bicyclerental.entity.Order;
import com.wxh.bicyclerental.entity.User;
import com.wxh.bicyclerental.entity.UserCoupon;
import com.wxh.bicyclerental.service.ICouponService;
import com.wxh.bicyclerental.service.IUserCouponService;
import com.wxh.bicyclerental.service.IUserService;
import com.wxh.bicyclerental.utils.CodeUtil;
import com.wxh.bicyclerental.utils.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
/**
 * 优惠券管理
 */
@Api
@RestController
@RequestMapping("/coupon")
@CrossOrigin
public class CouponController {
    @Autowired
    private ICouponService couponService;
    @Autowired
    private IUserService userService;
    @Autowired
    private IUserCouponService userCouponService;
    /**
     * 发布新优惠券
     */
    @PostMapping("/addCoupon")
    @ApiOperation("发布新优惠券")
    public Result addCoupon(@RequestBody Coupon coupon) {
        //设置状态为1
        coupon.setState(1);
        //生成16位id
        Long id = CodeUtil.RundCode();
        coupon.setCouponId(id);
        if (couponService.insert(coupon) > 0) {
            return Result.ok().data("添加成功");
        } else {
            return Result.error().data("添加失败");
        }
    }
    /**
     * 分页查询所有优惠券
     */
    @GetMapping("/findAllCoupon")
    @ApiOperation("分页查询所有优惠券")
    public Result findAllCoupon(@RequestParam Integer state, @RequestParam int pageNo, @RequestParam int pageSize) {
        Map map = new HashMap<>();
        //使用PageHelper分页插件
        PageHelper.offsetPage(pageNo, pageSize);
        PageInfo<Coupon> couponList = PageInfo.of(couponService.selectByState(state));
        map.put("total", couponList.getTotal());
        map.put("data", couponList.getList());
        return Result.ok().data(map);
    }
    /**
     * 查询所有优惠券
     */
    @GetMapping("/findAll")
    @ApiOperation("查询所有优惠券")
    public Result findAll() {
        return Result.ok().data(couponService.select());
    }
    /**
     * 根据id查询优惠券
     */
    @PostMapping("/findByCouponId")
    @ApiOperation("根据id查询优惠券")
    public Result findByCouponId(@RequestBody Coupon coupon) {
        Long couponId = coupon.getCouponId();
        return Result.ok().data(couponService.selectOne(couponId));
    }
    /**
     * 更改优惠券状态
     */
    @PostMapping("/updateCouponState")
    @ApiOperation("更改优惠券状态")
    public Result updateCouponState(@RequestBody Coupon coupon) {
        if (couponService.update(coupon) > 0) {
            return Result.ok().data("修改成功");
        } else {
            return Result.error().data("修改失败");
        }
    }
    /**
     * 购买优惠券
     */
    @PostMapping("/buyCoupon")
    @ApiOperation("购买优惠券")
    public Result buyCoupon(@RequestBody Coupon coupon,@RequestParam String username) {
        //向中间表中插入数据
        UserCoupon userCoupon = new UserCoupon();
        //根据用户名查询用户id
        User user = userService.selectByUserName(username);
        Integer userId = user.getId();
        Long couponId = coupon.getCouponId();
        userCoupon.setCouponId(couponId);
        userCoupon.setUserId(userId);
        //将状态设置成未支付
        userCoupon.setState(2);
        int result = userCouponService.insert(userCoupon);
        if(result>0){
            return Result.ok().data("成功");
        }else {
            return Result.error().data("失败");
        }
    }
}
package com.wxh.bicyclerental.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.wxh.bicyclerental.entity.User;
import com.wxh.bicyclerental.service.IUserService;
import com.wxh.bicyclerental.utils.JwtUtils;
import com.wxh.bicyclerental.utils.Result;
import com.wxh.bicyclerental.utils.StringUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
/**
 * 用户管理
 */
@Api
@RestController
@RequestMapping("/user")
@CrossOrigin
public class UserController {
    @Autowired
    private IUserService userService;
    /**
     * 新用户注册
     */
    @PostMapping("/register")
    @ApiOperation("注册")
    public Result registerUser(@RequestBody User user) {
        if (StringUtils.isNull(userService.selectByUserName(user.getUsername()))) {
            //默认是用户注册
            user.setIdentity("user");
            userService.insert(user);
            return Result.ok().data("注册成功");
        }
        return Result.error().data("该用户已存在");
    }
    /**
     * 用户登录
     */
    @PostMapping("/login")
    @ApiOperation("登录")
    public Result login(@RequestBody User requestUser) {
        String username = requestUser.getUsername();
        String password = requestUser.getPassword();
        User user = userService.selectByUserName(username);
        if (StringUtils.isNotNull(user)) {
            String id = user.getId().toString();
            String psw = user.getPassword();
            if (password.equals(psw)) {
                String token = JwtUtils.getJwtToken(id, username);
                Map map = new HashMap(16);
                map.put("token", token);
                return Result.ok().data(map);
            } else {
                return Result.error().data("密码错误");
            }
        }
        return Result.error().data("用户名输入错误");
    }
    /**
     * 获取用户信息
     *
     * @return
     */
    @GetMapping("info")
    @ApiOperation("获取用户信息")
    public Result getInfo(HttpServletRequest request) {
        // 获取jwt解析的信息(用户的id)
        Integer memberIdByJwtToken = Integer.parseInt(JwtUtils.getMemberIdByJwtToken(request));
        // 根据id,查询用户的信息,并将他放入data数据中
        User user = userService.selectOne(memberIdByJwtToken);
        Map map = new HashMap<>();
        ArrayList<String> rolesList = new ArrayList<String>();
        if (StringUtils.isNotNull(user)) {
            rolesList.add(user.getIdentity());
            map.put("roles", JSONArray.parseArray(JSONObject.toJSONString(rolesList)));
            map.put("password", user.getPassword());
            map.put("name", user.getUsername());
            map.put("avatar", "https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif");
            return Result.ok().data(map);
        }
        return Result.error();
    }
    /**
     * 授权为系统管理员或取消管理员权限
     */
    @PostMapping("/updateIdentity")
    @ApiOperation("授权或取消权限")
    public Result updateIdentity(@RequestBody User params) {
        Integer id = params.getId();
        String identity = params.getIdentity();
        User user = new User();
        user.setId(id);
        user.setIdentity(identity);
        if (userService.updateIdentity(user) != 0) {
            return Result.ok().data("更新成功");
        }
        return Result.error();
    }
    /**
     * 分页查询指定权限用户信息
     */
    @GetMapping("/pageQueryUser")
    @ApiOperation("分页查询指定权限用户信息")
    public Result pageQueryUser(@RequestParam int pageNo, @RequestParam int pageSize, @RequestParam String identity) {
        Map map = new HashMap<>();
        //使用PageHelper分页插件
        PageHelper.offsetPage(pageNo, pageSize);
        PageInfo<User> userList = PageInfo.of(userService.selectUserByIdentity(identity));
        map.put("total", userList.getTotal());
        map.put("data", userList.getList());
        return Result.ok().data(map);
    }
    /**
     * 查询所有用户信息
     */
    @GetMapping("/queryUser")
    @ApiOperation("查询所有用户信息")
    public Result queryUser() {
        List<User> userList = userService.select();
        if (null == userList || userList.size() == 0) {
            return Result.error().data("查询失败");
        } else {
            return Result.ok().data(userList);
        }
    }
    /**
     * 根据用户名查询用户信息
     */
    @GetMapping("/queryUserByUserName")
    @ApiOperation("根据用户名查询用户信息")
    public Result queryUserByUserName(@RequestParam String username) {
        User user = userService.selectByUserName(username);
        if(StringUtils.isNotNull(user)) {
            return Result.ok().data(user);
        }else {
            return Result.error().data("查询失败");
        }
    }
    /**
     * 更新用户信息
     */
    @PostMapping("/updateUser")
    @ApiOperation("更新用户信息")
    public Result updateUser(@RequestBody User params) {
       if(userService.update(params)>0) {
           return Result.ok().data("更新成功");
       }else {
           return Result.error().data("更新失败");
       }
    }
}

五,项目总结


首先,原有单个区域自行车租赁管理系统在跨区域网点的管理能力上相对薄弱。由于不同自行车租赁区域的计费方式往往是不同的,原有系统经常会发生计费规则混用,导致扣款(或扣诚信分)错误,因此,用户投诉也比较多。除此之外,对于一些完全独立的小型自行车租赁区域,采用原有系统过于庞大和显得累赘。因此,迫切需要一套在运营规模上具有较大伸缩性,既可用于完全独立的小型自行车租赁区域的运营管理,又可以用于将相对独立的各运营区域租赁子系统组合起来集中管理的应用平台。


目前市面上虽然出现了很多共享单车的app,骑车租赁的系统,但是关于自行车租赁的系统还很少。其次,现有存在的系统技术相对落后,在当前大数据的时代,分布式,微服务的开发架构中,这些系统技术落后,对于一些复杂的、高并发的场景并不能很好的处理。本文主要研究的内容是,开发一个技术较新、扩展性更好、综合性更强、业务较为完善的自行车租赁管理系统,一方面方便人们的出行,为城市节能减排做更多的贡献,另一方面,提高自行车租赁管理系统的管理效率和服务水平。


本文主要完成自行车租赁管理系统的设计与开发工作,站在用户和管理员的角度,根据真实的用户使用体验,采用模块化和层次化的设计思想,结合计算机软件、计算机网络、信息安全、数据库等先进技术,开发一个功能全面、界面友好、稳定高效的综合业务租赁管理系统,为自行车租赁系统运营提供强健的业务管理支撑。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
1月前
|
前端开发 安全 Java
基于springboot+vue开发的会议预约管理系统
一个完整的会议预约管理系统,包含前端用户界面、管理后台和后端API服务。 ### 后端 - **框架**: Spring Boot 2.7.18 - **数据库**: MySQL 5.6+ - **ORM**: MyBatis Plus 3.5.3.1 - **安全**: Spring Security + JWT - **Java版本**: Java 11 ### 前端 - **框架**: Vue 3.3.4 - **UI组件**: Element Plus 2.3.8 - **构建工具**: Vite 4.4.5 - **状态管理**: Pinia 2.1.6 - **HTTP客户端
244 4
基于springboot+vue开发的会议预约管理系统
|
5月前
|
JavaScript 前端开发 Java
制造业ERP源码,工厂ERP管理系统,前端框架:Vue,后端框架:SpringBoot
这是一套基于SpringBoot+Vue技术栈开发的ERP企业管理系统,采用Java语言与vscode工具。系统涵盖采购/销售、出入库、生产、品质管理等功能,整合客户与供应商数据,支持在线协同和业务全流程管控。同时提供主数据管理、权限控制、工作流审批、报表自定义及打印、在线报表开发和自定义表单功能,助力企业实现高效自动化管理,并通过UniAPP实现移动端支持,满足多场景应用需求。
540 1
|
2月前
|
前端开发 JavaScript Java
基于springboot+vue开发的校园食堂评价系统【源码+sql+可运行】【50809】
本系统基于SpringBoot与Vue3开发,实现校园食堂评价功能。前台支持用户注册登录、食堂浏览、菜品查看及评价发布;后台提供食堂、菜品与评价管理模块,支持权限控制与数据维护。技术栈涵盖SpringBoot、MyBatisPlus、Vue3、ElementUI等,适配响应式布局,提供完整源码与数据库脚本,可直接运行部署。
165 0
基于springboot+vue开发的校园食堂评价系统【源码+sql+可运行】【50809】
|
10天前
|
XML 前端开发 Java
一文搞懂 Spring Boot 自动配置原理
Spring Boot 自动配置原理揭秘:通过 `@EnableAutoConfiguration` 加载 `META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports` 中的配置类,结合 `@Conditional` 按条件注入 Bean,实现“开箱即用”。核心在于约定大于配置,简化开发。
214 0
|
3月前
|
Java Spring 容器
SpringBoot自动配置的原理是什么?
Spring Boot自动配置核心在于@EnableAutoConfiguration注解,它通过@Import导入配置选择器,加载META-INF/spring.factories中定义的自动配置类。这些类根据@Conditional系列注解判断是否生效。但Spring Boot 3.0后已弃用spring.factories,改用新格式的.imports文件进行配置。
795 0
|
22天前
|
JavaScript Java Maven
【SpringBoot(二)】带你认识Yaml配置文件类型、SpringMVC的资源访问路径 和 静态资源配置的原理!
SpringBoot专栏第二章,从本章开始正式进入SpringBoot的WEB阶段开发,本章先带你认识yaml配置文件和资源的路径配置原理,以方便在后面的文章中打下基础
161 3
|
22天前
|
Java 测试技术 数据库连接
【SpringBoot(四)】还不懂文件上传?JUnit使用?本文带你了解SpringBoot的文件上传、异常处理、组件注入等知识!并且带你领悟JUnit单元测试的使用!
Spring专栏第四章,本文带你上手 SpringBoot 的文件上传、异常处理、组件注入等功能 并且为你演示Junit5的基础上手体验
539 2
|
4月前
|
人工智能 Java 测试技术
Spring Boot 集成 JUnit 单元测试
本文介绍了在Spring Boot中使用JUnit 5进行单元测试的常用方法与技巧,包括添加依赖、编写测试类、使用@SpringBootTest参数、自动装配测试模块(如JSON、MVC、WebFlux、JDBC等),以及@MockBean和@SpyBean的应用。内容实用,适合Java开发者参考学习。
508 0
|
7月前
|
前端开发 Java 数据库
微服务——SpringBoot使用归纳——Spring Boot集成Thymeleaf模板引擎——Thymeleaf 介绍
本课介绍Spring Boot集成Thymeleaf模板引擎。Thymeleaf是一款现代服务器端Java模板引擎,支持Web和独立环境,可实现自然模板开发,便于团队协作。与传统JSP不同,Thymeleaf模板可以直接在浏览器中打开,方便前端人员查看静态原型。通过在HTML标签中添加扩展属性(如`th:text`),Thymeleaf能够在服务运行时动态替换内容,展示数据库中的数据,同时兼容静态页面展示,为开发带来灵活性和便利性。
373 0
|
7月前
|
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`
374 0
下一篇
开通oss服务