智慧旅游微信小程序平台

作者介绍:✌️大厂全栈码农|毕设实战开发,专注于大学生项目实战开发、讲解和毕业答疑辅导。

🍅获取源码联系方式请查看文末🍅

推荐订阅精彩专栏 👇🏻 避免错过下次更新

Springboot项目精选实战案例

更多项目: CSDN主页YAML墨韵

学如逆水行舟,不进则退。学习如赶路,不能慢一步。

目录

一、项目简介

二、开发技术与环境配置

[2.1 微信小程序](#2.1 微信小程序)

[2.2 Java语言简介](#2.2 Java语言简介)

[2.3 uni-app](#2.3 uni-app)

[2.4 mysql数据库介绍](#2.4 mysql数据库介绍)

[2.5 B/S架构](#2.5 B/S架构)

三、系统功能实现

1、登录流程图

2、系统结构

3、数据库设计表

四、系统项目截图

[4.1 小程序会员模块的实现](#4.1 小程序会员模块的实现)

[4.1.1 系统首页](#4.1.1 系统首页)

[4.1.2 我的菜单](#4.1.2 我的菜单)

[4.1.3 景点购票](#4.1.3 景点购票)

4.2、后台模块的实现

[4.2.1 用户信息管理](#4.2.1 用户信息管理)

[4.2.2 旅游景点管理](#4.2.2 旅游景点管理)

[4.2.3 景区活动管理](#4.2.3 景区活动管理)

五、论文参考

六、核心代码

6.1、文件上传

6.2、数据库配置

6.3、登录功能实现

6.4、业务层(Service)

6.5、数据访问层(Dao)


一、项目简介

《微信小程序智慧旅游平台》是一款依托微信小程序打造的便捷旅游服务平台。

该平台充分利用微信小程序的便捷性和高普及度,为用户提供全方位的智慧旅游体验。用户无需下载安装繁琐的 App,只需在微信中轻松打开小程序,即可随时随地开启旅游之旅。

在功能方面,平台提供丰富的旅游信息,包括热门景点介绍、特色美食推荐、旅游攻略分享等。用户可以根据自己的兴趣和需求,快速找到适合自己的旅游目的地和游玩方案。同时,平台还具备实时导航功能,帮助用户准确找到景点位置,避免迷路。

对于旅游商家来说,该平台也是一个高效的推广渠道。商家可以在平台上展示自己的产品和服务,吸引更多游客。平台还支持在线预订功能,方便用户提前预订门票、酒店等旅游产品,提高旅游的便利性和计划性。

总之,微信小程序智慧旅游平台以其便捷、实用、智能的特点,为用户和旅游商家带来全新的旅游体验,推动旅游行业的智能化发展。

二、开发技术与环境配置

语言:Java

使用框架:UNIAPP||Spring Boot/SSM

前端技术:JS、Vue 、css3

开发工具:IDEA||微信开发者工具

数据库:MySQL 5.7/8.0

数据库管理工具:phpstudy/Navicat

JDK版本:jdk1.8

Maven: apache-maven 3.8.1-bin

前端环境:Node.Js 12\14\16

2.1 微信小程序

小程序是一种新的开放能力,开发者可以快速地开发一个小程序。小程序可以在微信内被便捷地获取和传播,同时具有出色的使用体验。尤其拥抱微信生态圈,让微信小程序更加的如虎添翼,发展迅猛。

2.2 Java语言简介

Java是由SUN公司推出,该公司于2010年被oracle公司收购。Java本是印度尼西亚的一个叫做爪洼岛的英文名称,也因此得来java是一杯正冒着热气咖啡的标识。Java语言在移动互联网的大背景下具备了显著的优势和广阔的前景,它是面向对象的,分布式的,动态的,具有平台无关性、安全性、健壮性。Java语言的基本语句语法和C++一样,但是它面向对象的技术更加彻底,因为Java要求将所有的内容都必须封装成类,把类作为程序的基本单位。由于不允许类外有变量、方法。 Java语言的分布式体现在数据分布和操作分布,它是面向网络的语言,可以处理TCP/IP协议,它也支持客户机/服务器的计算模式。Java语言的动态性是指类在运行时是动态安装的,使得Java可以动态的维护程序。Java不支持指针,对内存访问的所有操作都是通过对象实例化实现的,这样就避免了指针操作中易产生的错误,同时也预防了病毒对系统的破坏和威胁。

Java语言的编程风格与C语言非常接近,它继承了C++面向对象技术的核心,它面世之后发展迅速,非常流行,对高级C语言形成了很大的冲击。业内人士称之为"一次编译、到处执行"。当然java也有缺点,在每次执行编译后,字节码都需要消耗一定的时间,在某些程度上降低了性能。但是这并不影响java成为此次设计语言的选择。Java语言简单易学,使用它的编程时间短,功能性强,开发者学习起来更简便、更快。Java的主要特性有以下几个:

面向对象

面向对象有四个特点:封装、继承、多态、抽象。抽象是指忽略一个问题中的次要部分,关注主要部分。多态是指对同一种消息做出的不同反应。继承是指在原有的父类方法基础上增加自己独有的方法,而不改变原来父类。

平台无关性、

Java编译出来的是字节码,直接由虚拟机执行。在任何平台上,只要有Java虚拟机,Java代码都能运行。

可靠性和安全性

Java对内存的访问都必须通过对象的实例变量来实现,避免了指针中出现的错误。

多线程

Java提供了多线程功能,利用编程实现同一时间同时工作的功能。

2.3 uni-app

uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉/淘宝)、快应用等多个平台。

DCloud公司拥有800万开发者、数百万应用、12亿手机端月活用户、数千款uni-app插件。

uni-app在手,做啥都不愁。即使不跨端,uni-app也是更好的小程序开发框架更好的App跨平台框架、更方便的H5开发框架。不管领导安排什么样的项目,你都可以快速交付,不需要转换开发思维、不需要更改开发习惯。

2.4 mysql数据库介绍

利用MYSQL的数据独立性、安全性等特点,在软件项目中对数据进行操作,可以保证数据准确无误,并降低了程序员的应用开发时间。

MYSQL的特点是支持多线程,能方便的对系统资源充分利用,有效提高速度,还提供多种方式途径来对数据库进行连接;MYSQL的功能相对弱小、规模也小,但本系统要求不高,MYSQL完全可以满足本系统使用。

利用MYSQL建立系统数据库,不仅有利于数据处理业务的早期整合,还能利于发展后两种数据扩展的操作。

2.5 B/S架构

B/S结构是目前使用最多的结构模式,它可以使得系统的开发更加的简单,好操作,而且还可以对其进行维护。使用该结构时只需要在计算机中安装数据库,和一些很常用的浏览器就可以了。浏览器就会与数据库进行信息的连接,可以实现很多的功能,B/S结构是可以直接进行使用的,而且B/S结构在使用中极大的减少了工作的维护。基于B/S的软件,所有的数据库之间都是相互独立的,因此是非常安全的。因为基于B/S结构可以清楚的看到系统正在处理的业务,并且能够及时的让管理人员做出决策,这样就可以避免企业的损失。B/S结构的基本特点是集中式的管理模式,用户使用系统生成数据后,这些数据就可以存储到系统的数据库中,方便日后能够用到,这样就可以满足人们的所有的需求。

三、系统功能实现

1、登录流程图

2、系统结构

3、数据库设计表

用户表

|--------------|--------------|------|-------------------|------|
| 字段 | 类型 | 是否为空 | 默认 | 注释 |
| id (主键) | bigint(20) | 否 | | 主键 |
| addtime | timestamp | 否 | CURRENT_TIMESTAMP | 创建时间 |
| yonghuming | varchar(200) | 否 | | 用户名 |
| mima | varchar(200) | 否 | | 密码 |
| xingming | varchar(200) | 是 | NULL | 姓名 |
| touxiang | varchar(200) | 是 | NULL | 头像 |
| xingbie | varchar(200) | 是 | NULL | 性别 |
| shouji | varchar(200) | 是 | NULL | 手机 |
| shenfenzheng | varchar(200) | 是 | NULL | 身份证 |

管理员用户表

|----------|--------------|------|-------------------|------|
| 字段 | 类型 | 是否为空 | 默认 | 注释 |
| id (主键) | bigint(20) | 否 | | 主键 |
| username | varchar(100) | 否 | | 用户名 |
| password | varchar(100) | 否 | | 密码 |
| role | varchar(100) | 是 | 管理员 | 角色 |
| addtime | timestamp | 否 | CURRENT_TIMESTAMP | 新增时间 |

收藏表

|-----------|--------------|------|-------------------|------|
| 字段 | 类型 | 是否为空 | 默认 | 注释 |
| id (主键) | bigint(20) | 否 | | 主键 |
| addtime | timestamp | 否 | CURRENT_TIMESTAMP | 创建时间 |
| userid | bigint(20) | 否 | | 用户id |
| refid | bigint(20) | 是 | NULL | 收藏id |
| tablename | varchar(200) | 是 | NULL | 表名 |
| name | varchar(200) | 否 | | 收藏名称 |
| picture | varchar(200) | 否 | | 收藏图片 |

旅游资讯

|--------------|--------------|------|-------------------|------|
| 字段 | 类型 | 是否为空 | 默认 | 注释 |
| id (主键) | bigint(20) | 否 | | 主键 |
| title | varchar(200) | 否 | | 标题 |
| introduction | longtext | 是 | NULL | 简介 |
| picture | varchar(200) | 否 | | 图片 |
| content | longtext | 否 | | 内容 |
| addtime | timestamp | 否 | CURRENT_TIMESTAMP | 创建时间 |

留言板

|----------|--------------|------|-------------------|-------|
| 字段 | 类型 | 是否为空 | 默认 | 注释 |
| id (主键) | bigint(20) | 否 | | 主键 |
| userid | bigint(20) | 否 | | 留言人id |
| username | varchar(200) | 是 | NULL | 用户名 |
| content | longtext | 否 | | 留言内容 |
| reply | longtext | 是 | NULL | 回复内容 |
| addtime | timestamp | 否 | CURRENT_TIMESTAMP | 创建时间 |

旅游景点

|-------------------|--------------|------|-------------------|--------|
| 字段 | 类型 | 是否为空 | 默认 | 注释 |
| id (主键) | bigint(20) | 否 | | 主键 |
| jingdianmingcheng | varchar(200) | 否 | | 景点名称 |
| fenlei | varchar(200) | 否 | | 分类 |
| jingdiandizhi | varchar(200) | 是 | NULL | 景点地址 |
| menpiaojiage | int(11) | 是 | NULL | 门票价格 |
| jingdiantupian | varchar(200) | 是 | NULL | 景点图片 |
| jingdiandengji | varchar(200) | 是 | NULL | 景点等级 |
| kaifangshijian | varchar(200) | 是 | NULL | 开放时间 |
| jingdianjieshao | longtext | 是 | NULL | 景点介绍 |
| clicktime | datetime | 是 | NULL | 最近点击时间 |
| clicknum | int(11) | 是 | 0 | 点击次数 |
| addtime | timestamp | 否 | CURRENT_TIMESTAMP | 创建时间 |

景区活动

|-------------------|--------------|------|-------------------|------|
| 字段 | 类型 | 是否为空 | 默认 | 注释 |
| id (主键) | bigint(20) | 否 | | 主键 |
| fenlei | varchar(200) | 是 | NULL | 分类 |
| jingdiandizhi | varchar(200) | 是 | NULL | 景点地址 |
| huodongbiaoti | varchar(200) | 是 | NULL | 活动标题 |
| jingdianmingcheng | varchar(200) | 是 | NULL | 景点名称 |
| fengmiantu | varchar(200) | 是 | NULL | 封面图 |
| huodongjieshao | longtext | 是 | NULL | 活动介绍 |
| huodongneirong | longtext | 是 | NULL | 活动内容 |
| huodongshijian | varchar(200) | 是 | NULL | 活动时间 |
| faburiqi | date | 是 | NULL | 发布日期 |
| addtime | timestamp | 否 | CURRENT_TIMESTAMP | 创建时间 |

景点购票

|-------------------|--------------|------|-------------------|------|
| 字段 | 类型 | 是否为空 | 默认 | 注释 |
| id (主键) | bigint(20) | 否 | | 主键 |
| fenlei | varchar(200) | 是 | NULL | 分类 |
| jingdiantupian | varchar(200) | 是 | NULL | 景点图片 |
| jingdiandizhi | varchar(200) | 是 | NULL | 景点地址 |
| jingdianmingcheng | varchar(200) | 是 | NULL | 景点名称 |
| menpiaojiage | int(11) | 是 | NULL | 门票价格 |
| dingdanbianhao | varchar(200) | 是 | NULL | 订单编号 |
| shuliang | int(11) | 是 | NULL | 数量 |
| zongjine | varchar(200) | 是 | NULL | 总金额 |
| goupiaoriqi | date | 是 | NULL | 购票日期 |
| yonghuming | varchar(200) | 是 | NULL | 用户名 |
| shouji | varchar(200) | 是 | NULL | 手机 |
| shenfenzheng | varchar(200) | 是 | NULL | 身份证 |
| sfsh | varchar(200) | 是 | 否 | 是否审核 |
| shhf | longtext | 是 | NULL | 审核回复 |
| ispay | varchar(200) | 是 | 未支付 | 是否支付 |
| userid | bigint(20) | 是 | NULL | 用户id |
| addtime | timestamp | 否 | CURRENT_TIMESTAMP | 创建时间 |

景点分类

|---------|--------------|------|-------------------|------|
| 字段 | 类型 | 是否为空 | 默认 | 注释 |
| id (主键) | bigint(20) | 否 | | 主键 |
| fenlei | varchar(200) | 否 | | 分类 |
| addtime | timestamp | 否 | CURRENT_TIMESTAMP | 创建时间 |

旅游景点评论表

|----------|--------------|------|-------------------|-------|
| 字段 | 类型 | 是否为空 | 默认 | 注释 |
| id (主键) | bigint(20) | 否 | | 主键 |
| refid | bigint(20) | 否 | | 关联表id |
| userid | bigint(20) | 否 | | 用户id |
| nickname | varchar(200) | 是 | NULL | 用户名 |
| content | longtext | 否 | | 评论内容 |
| reply | longtext | 是 | NULL | 回复内容 |
| addtime | timestamp | 否 | CURRENT_TIMESTAMP | 创建时间 |

景区活动评论表

|----------|--------------|------|-------------------|-------|
| 字段 | 类型 | 是否为空 | 默认 | 注释 |
| id (主键) | bigint(20) | 否 | | 主键 |
| refid | bigint(20) | 否 | | 关联表id |
| userid | bigint(20) | 否 | | 用户id |
| nickname | varchar(200) | 是 | NULL | 用户名 |
| content | longtext | 否 | | 评论内容 |
| reply | longtext | 是 | NULL | 回复内容 |
| addtime | timestamp | 否 | CURRENT_TIMESTAMP | 创建时间 |

四、系统项目截图

4.1 小程序会员模块的实现

4.1.1 系统首页

小程序用户是需要注册才可以进行登录的,登录后在首页可以查看相关信息,并且下面导航可以点击到其他功能模块

4.1.2 我的菜单

在小程序里点击我的,会出现关于我的界面,在这里可以修改个人信息,以及可以点击其他功能模块

4.1.3 景点购票

用户可以对景点进行购票操作

4.2、后台模块的实现

4.2.1 用户信息管理
4.2.2 旅游景点管理

管理员可以对旅游景点信息进行添加修改删除操作

4.2.3 景区活动管理

管理员可以对景区活动信息进行添加,修改,删除操作

五、论文参考

六、核心代码

6.1、文件上传

java 复制代码
/**
 * 上传文件映射表
 */
@RestController
@RequestMapping("file")
@SuppressWarnings({"unchecked","rawtypes"})
public class FileController{
	@Autowired
    private ConfigService configService;
	/**
	 * 上传文件
	 */
	@RequestMapping("/upload")
	public R upload(@RequestParam("file") MultipartFile file,String type) throws Exception {
		if (file.isEmpty()) {
			throw new EIException("上传文件不能为空");
		}
		String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);
		File path = new File(ResourceUtils.getURL("classpath:static").getPath());
		if(!path.exists()) {
		    path = new File("");
		}
		File upload = new File(path.getAbsolutePath(),"/upload/");
		if(!upload.exists()) {
		    upload.mkdirs();
		}
		String fileName = new Date().getTime()+"."+fileExt;
		File dest = new File(upload.getAbsolutePath()+"/"+fileName);
		file.transferTo(dest);
		/**
  		 * 如果使用idea或者eclipse重启项目,发现之前上传的图片或者文件丢失,将下面一行代码注释打开
   		 * 请将以下的"D:\\springbootq33sd\\src\\main\\resources\\static\\upload"替换成你本地项目的upload路径,
 		 * 并且项目路径不能存在中文、空格等特殊字符
 		 */
//		FileUtils.copyFile(dest, new File("D:\\springbootq33sd\\src\\main\\resources\\static\\upload"+"/"+fileName)); /**修改了路径以后请将该行最前面的//注释去掉**/
		if(StringUtils.isNotBlank(type) && type.equals("1")) {
			ConfigEntity configEntity = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));
			if(configEntity==null) {
				configEntity = new ConfigEntity();
				configEntity.setName("faceFile");
				configEntity.setValue(fileName);
			} else {
				configEntity.setValue(fileName);
			}
			configService.insertOrUpdate(configEntity);
		}
		return R.ok().put("file", fileName);
	}
	
	/**
	 * 下载文件
	 */
	@IgnoreAuth
	@RequestMapping("/download")
	public ResponseEntity<byte[]> download(@RequestParam String fileName) {
		try {
			File path = new File(ResourceUtils.getURL("classpath:static").getPath());
			if(!path.exists()) {
			    path = new File("");
			}
			File upload = new File(path.getAbsolutePath(),"/upload/");
			if(!upload.exists()) {
			    upload.mkdirs();
			}
			File file = new File(upload.getAbsolutePath()+"/"+fileName);
			if(file.exists()){
				HttpHeaders headers = new HttpHeaders();
			    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);    
			    headers.setContentDispositionFormData("attachment", fileName);    
			    return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return new ResponseEntity<byte[]>(HttpStatus.INTERNAL_SERVER_ERROR);
	}
	
}

6.2、数据库配置

java 复制代码
server:
    tomcat:
        uri-encoding: UTF-8
    port: 8080
    servlet:
        context-path: /springbootr1tjf

spring:
    datasource:
        driverClassName: com.mysql.jdbc.Driver
        url: jdbc:mysql://127.0.0.1:3306/springbootr1tjf?useUnicode=true&characterEncoding=utf-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8
        username: root
        password: 123456

#        driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
#        url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=springbootr1tjf
#        username: sa
#        password: 123456

    servlet:
      multipart:
        max-file-size: 10MB
        max-request-size: 10MB
    resources:
      static-locations: classpath:static/,file:static/

#mybatis
mybatis-plus:
  mapper-locations: classpath*:mapper/*.xml
  #实体扫描,多个package用逗号或者分号分隔
  typeAliasesPackage: com.entity
  global-config:
    #主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
    id-type: 1
    #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
    field-strategy: 2
    #驼峰下划线转换
    db-column-underline: true
    #刷新mapper 调试神器
    refresh-mapper: true
    #逻辑删除配置
    logic-delete-value: -1
    logic-not-delete-value: 0
    #自定义SQL注入器
    sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector
  configuration:
    map-underscore-to-camel-case: true
    cache-enabled: false
    call-setters-on-nulls: true
    #springboot 项目mybatis plus 设置 jdbcTypeForNull (oracle数据库需配置JdbcType.NULL, 默认是Other)
    jdbc-type-for-null: 'null' 

6.3、登录功能实现

java 复制代码
 
package com.controller;
 
 
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;
 
import javax.servlet.http.HttpServletRequest;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
 
import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.TokenEntity;
import com.entity.UserEntity;
import com.service.TokenService;
import com.service.UserService;
import com.utils.CommonUtil;
import com.utils.MPUtil;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;
 
/**
 * 登录相关
 */
@RequestMapping("users")
@RestController
public class UserController{
	
	@Autowired
	private UserService userService;
	
	@Autowired
	private TokenService tokenService;
 
	/**
	 * 登录
	 */
	@IgnoreAuth
	@PostMapping(value = "/login")
	public R login(String username, String password, String captcha, HttpServletRequest request) {
		UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
		if(user==null || !user.getPassword().equals(password)) {
			return R.error("账号或密码不正确");
		}
		String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
		return R.ok().put("token", token);
	}
	
	/**
	 * 注册
	 */
	@IgnoreAuth
	@PostMapping(value = "/register")
	public R register(@RequestBody UserEntity user){
    	if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", 
            user.getUsername())) !=null) {
    		return R.error("用户已存在");
    	}
        userService.insert(user);
        return R.ok();
    }
 
	/**
	 * 退出
	 */
	@GetMapping(value = "logout")
	public R logout(HttpServletRequest request) {
		request.getSession().invalidate();
		return R.ok("退出成功");
	}
	
	/**
     * 密码重置
     */
    @IgnoreAuth
	@RequestMapping(value = "/resetPass")
    public R resetPass(String username, HttpServletRequest request){
    	UserEntity user = userService.selectOne(new EntityWrapper<UserEntity> 
                          ().eq("username", username));
    	if(user==null) {
    		return R.error("账号不存在");
    	}
    	user.setPassword("123456");
        userService.update(user,null);
        return R.ok("密码已重置为:123456");
    }
	
	/**
     * 列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,UserEntity user){
        EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
    	PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
        return R.ok().put("data", page);
    }
 
	/**
     * 列表
     */
    @RequestMapping("/list")
    public R list( UserEntity user){
       	EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
      	ew.allEq(MPUtil.allEQMapPre( user, "user")); 
        return R.ok().put("data", userService.selectListView(ew));
    }
 
    /**
     * 信息
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") String id){
        UserEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }
    
    /**
     * 获取用户的session用户信息
     */
    @RequestMapping("/session")
    public R getCurrUser(HttpServletRequest request){
    	Long id = (Long)request.getSession().getAttribute("userId");
        UserEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }
 
    /**
     * 保存
     */
    @PostMapping("/save")
    public R save(@RequestBody UserEntity user){
    	if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username",                 
            user.getUsername())) !=null) {
    		return R.error("用户已存在");
    	}
        userService.insert(user);
        return R.ok();
    }
 
    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody UserEntity user){
        userService.updateById(user);//全部更新
        return R.ok();
    }
 
    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        userService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
}
 

6.4、业务层(Service)

java 复制代码
package com.service;

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

import org.apache.ibatis.annotations.Param;

import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.service.IService;
import com.entity.UserEntity;
import com.utils.PageUtils;


/**
 * 系统用户
 */
public interface UserService extends IService<UserEntity> {
 	PageUtils queryPage(Map<String, Object> params);
    
   	List<UserEntity> selectListView(Wrapper<UserEntity> wrapper);
   	
   	PageUtils queryPage(Map<String, Object> params,Wrapper<UserEntity> wrapper);
	   	
}

6.5、数据访问层(Dao)

java 复制代码
package com.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.pagination.Pagination;
import com.entity.UserEntity;

/**
 * 用户
 */
public interface UserDao extends BaseMapper<UserEntity> {
	
	List<UserEntity> selectListView(@Param("ew") Wrapper<UserEntity> wrapper);

	List<UserEntity> selectListView(Pagination page,@Param("ew") Wrapper<UserEntity> wrapper);
	
}
相关推荐
麻辣_水煮鱼1 小时前
vue数据变化但页面不变
前端·javascript·vue.js
潜洋1 小时前
Spring Boot教程之五:在 IntelliJ IDEA 中运行第一个 Spring Boot 应用程序
java·spring boot·后端
灯雾️2 小时前
Spring Boot、Spring MVC和Spring间的区别
spring boot
小小黑0072 小时前
uniapp+vue3+ts H5端使用Quill富文本插件以及解决上传图片反显的问题
uni-app·vue
supercool72 小时前
SpringBoot(9)-Dubbo+Zookeeper
spring boot·dubbo·java-zookeeper
草字2 小时前
uniapp input限制输入负数,以及保留小数点两位.
java·前端·uni-app
没有黑科技3 小时前
基于web的音乐网站(Java+SpringBoot+Mysql)
java·前端·spring boot
计算机毕设孵化场3 小时前
计算机毕设-基于springboot的多彩吉安红色旅游网站的设计与实现(附源码+lw+ppt+开题报告)
vue.js·spring boot·后端·计算机外设·课程设计·计算机毕设论文·多彩吉安红色旅游网站
前端小胡兔3 小时前
uniapp rpx兼容平板
uni-app
荔枝吖3 小时前
uniapp实现开发遇到过的问题(持续更新中....)
uni-app