Java springboot基于微信小程序的智慧旅游导游系统景点门票酒店预订(源码+文档+运行视频+讲解视频)
文章目录系列文章目录目的前言一、详细视频演示二、项目部分实现截图三、技术栈后端框架springboot前端框架vue持久层框架MyBaitsPlus微信小程序介绍系统测试四、代码参考源码获取目的智慧旅游导游系统作为旅游行业数字化转型的重要方向通过整合旅游资源提供便捷的旅游服务。本系统基于Java SpringBoot框架与微信小程序技术实现了景点信息查询、门票预订、酒店预订等功能的集成。用户通过微信小程序即可轻松规划旅游行程享受一站式旅游服务。系统利用SpringBoot框架的快速开发能力结合MySQL数据库的数据存储优势确保了系统的高效运行与数据安全。此外系统还集成了地图导航、语音讲解等功能提升了用户的旅游体验。本系统的实施不仅促进了旅游资源的优化配置还推动了旅游行业的智能化发展为游客提供了更加便捷、个性化的旅游服务。前言博主介绍✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌精彩专栏 推荐订阅全网最全的Java python 小程序 php uniapp项目列表-CSDN博客文末获取源码数据库感兴趣的可以先收藏起来还有大家在毕设选题项目以及论文编写等相关问题都可以给我留言咨询希望帮助更多的人一、详细视频演示文章底部获取博主联系方式二、项目部分实现截图​​​​​三、技术栈后端框架SpringBootSpring Boot内置了Tomcat、Jetty和Undertow等服务器这意味着你可以直接使用它们而不需要额外的安装和配置。Spring Boot的一个主要优点是它的自动配置功能。它可以根据你的项目中的依赖关系自动配置应用程序。这使得配置应用程序变得非常容易因为你不需要手动配置每个依赖项。Spring Boot也提供了大量的开箱即用的功能和插件如Spring Data、Spring Security和Spring Cloud等。这些功能使得开发者可以更快速地构建应用程序并且可以更容易地扩展和集成其他技术。它是一个非常流行的框架它的自动配置、内置服务器和插件等功能使得开发者可以更快、更轻松地构建高质量的应用程序。前端框架VueVue.js的核心是虚拟DOM技术。虚拟DOM是一个内存中的数据结构它可以帮助Vue.js实现高效的DOM操作它采用了响应式数据绑定、虚拟DOM、组件化等现代化技术为开发者提供了一种灵活、高效、易于维护的开发模式当数据发生变化时UI也会自动更新这样就使得开发者可以更加专注于数据处理而不是手动更新UI这就是Vue体现出来的简洁灵活高效。持久层框架MyBaitsPlusMyBatis-Plus是一款基于MyBatis框架的增强工具旨在简化MyBatis的开发。它是一款开源的Java框架支持多种数据库包括MySQL、Oracle、SQL Server、PostgreSQL等。MyBatis-Plus提供了丰富的API和注解可以通过简单的配置和使用来实现ORM操作大大减少了手写SQL的工作量。此外MyBatis-Plus还提供了一套代码生成器可以自动生成实体类、Mapper接口以及XML映射文件极大地简化了开发流程。MyBatis-Plus还支持分页查询、动态查询、乐观锁、性能分析等实用功能方便开发者进行高效的数据操作。通过MyBatis-Plus开发者可以快速开发高质量的数据访问层代码提高开发效率系统测试从多个角度进行测试找到系统中存在的问题是本系统首要的测试目的通过功能测试寻找出系统缺陷并改正确保系统没有缺陷。在测试过程中证明系统满足客户需求发现问题和不足及时改正。测试完成之后得出测试结论。系统测试目的在管理系统的开发周期中系统测试是必不可少且考验耐心的过程。其重要性在于它是保证系统质量和牢靠性的最后一道关也是整个系统开发过程的最后一次检查。系统测试主要是为了避免用户在使用时发生问题增强用户体验感为了不影响用户的使用我们需要从多角度、多思路去考虑系统可能遇到的问题通过不同的模拟场景来发现缺陷并解决问题。在测试的过程中也可以了解到该系统的质量情况系统功能是否健全系统逻辑是否顺畅。一个合格的系统测试过程完成后将大大提升系统质量和使用感。测试的目标是验证系统是否符合需求规格说明书的定义并找出与需求规格说明书不符合或与之冲突的内容。测试过程中一定站在用户的角度考虑问题避免一些不切实际的场景浪费测试时间从而可能会引起问题导致预期结果与实际结果不符。系统功能测试对系统功能模块进行测试通过点击、输入边界值和必填项非必填项的验证等方法进行一系列的黑盒测试。通过编写测试用例根据测试用例中的内容进行测试最后得出测试结论。登录功能测试方案当需要登入该系统时通过账户密码等功能点进行验证用户在输入时需要输入与数据库内存储的数据匹配的内容当其中某项输入错误时系统将提示输入错误。此界面对角色权限也有相应的校验当用户角色的帐号选择管理员角色登录时也会报错。登录功能测试用例如下表所示。输入数据预期结果实际结果结果分析用户名guanliyuan 密码123456 验证码正确输入登入系统成功登入系统和估算结果一样用户名guanliyuan 密码111111 验证码正确输入密码错误密码错误请重新输入密码和估算结果一样用户名guanliyuan 密码123456 验证码错误输入验证码错误验证码信息错误和估算结果一样用户名空 密码123456 验证码正确输入用户名必填请输入用户名和估算结果一样用户名guanliyuan 密码空 验证码正确输入密码错误密码错误请重新输入密码和估算结果一样用户管理功能测试方案用户管理主要有添加、编辑、删除、查找用户功能。添加用户时必填项不填检验系统是否有非空检验添加已有的用户信息检验是否提示用户名已被使用删除用户信息系统将检验是否进行此操作更改用户信息更改用户信息后页面是否可以展示出来。用户管理测试用例如下表所示。输入数据预期结果实际结果结果分析填入用户基本信息添加成功在用户列表中显示该用户出现在在列表中和估算结果一样修改用户信息编辑成功修改信息成功被修改用户信息被修改和估算结果一样选中删除用户系统询问是否删除用户确认后用户被删除验证码信息错误系统询问是否删除用户确认后查找不到用户信息和估算结果一样添加用户时不填用户名提示用户名不能为空提示用户名不能为空和估算结果一样填入已有用户名添加失败提示用户名重复添加失败提示用户名重复和估算结果一样系统测试结论本系统主要使用黑盒测试通过模拟用户使用系统实现各个功能编写测试用例并进行测试。以确保系统流程的正确性。系统测试必不可少可以使系统更加完善该系统的可使用性也会更高。测试该系统主要为了验证系统的功能模块是否满足我们最初的设计理念验证各个功能模块逻辑是否正确此系统不需要过于复杂的逻辑处理以便于使用者操作。测试的最终目的也是围绕着用户使用展开。测试过程中所有场景都应符合用户需求不可偏离需求目标遇到问题时要站在用户的角度进行思考。经过一系列的测试过程后得到最终的测试结果从测试结果可以看出实现的系统在功能和性能方面满足设计要求。微信小程序介绍小程序简介小程序是一种连接用户与服务的方式它能在微信内被便捷地获取和传播具有出色的使用体验。不需要下载安装用户通过搜一搜或扫一扫就可以打开使用使用完后退出即可。小程序是基于微信的开发平台属于微信内部。发展史微信中的 WebView 逐渐成为移动 Web 的一个入口时微信就有相关的 JS API 出现了也就是说微信小程序开发中会用到javascript。2015年初微信发布了一整套网页开发工具包称之为 JS-SDK开放了拍摄、录音、语音识别、二维码、地图、支付、分享、卡券等几十个API供web开发者开发使用但是它也有很多不足例如白屏等问题为解决这类问题于是诞生了小程序。小程序的优点1.快速的加载2.更强大的能力3.原生的体验4.易用且安全的微信数据开放5.高效和简单的开发小程序与普通网页开发的区别小程序的主要开发语言是 JavaScript 小程序的开发同普通网页开发有很大的相似性。对于前端开发者而言从网页开发迁移到小程序的开发成本并不高但是二者还是有区别的其主要区别如下1.网页开发中渲染线程和脚本线程是互斥的这使得长时间的脚本运行可能会导致页面失去响应而在小程序中二者是分开的分别运行在不同的线程中不会失去响应。2.网页开发中可以使用各种浏览器暴露DOM并对其进行操作而在小程序中逻辑层和渲染层是分开的逻辑层运行在 JSCore 中并没有浏览器对象因此小程序中没有DOM和BOM的操作。3.JSCore 的环境同 NodeJS 环境也不相同所以一些 NPM 的包在小程序中也是无法运行的。4.网页开发需要面临各种各样的浏览器环境而小程序只需面临两大系统iOS和Android及辅助开发者工具。5.网页开发中只需要使用到浏览器并搭配一些辅助工具或者编辑器即可小程序的开发则有所不同需要经过申请小程序帐号、安装小程序开发者工具、配置项目等才可以。申请账号想要开发一款小程序首先需要申请一个小程序账号通过这个账号就可以管理自己的小程序其步骤如下1.打开官网https://mp.weixin.qq.com/进入微信公众平台点立即注册选择小程序2.在小程序注册页面根据指引填写相关资料并注册。3.到注册邮箱查阅邮件点击邮件中的链接地址进行信息登记并继续后确认4.重新进入网址https://mp.weixin.qq.com扫码登录进入小程序页面开发---开发管理---开发设置获取AppID(小程序ID相当于一个身份证后面会用到这里需要知道自己的AppID即可)安装开发工具微信小程序有自己的开发工具当然你可以使用自己的编辑器编写代码获取完AppID后在当前页面进行下载开发者工具具体步骤如下1.单击开发----开发工具---开发者工具---下载---选择对应自己电脑系统版本下载应用2.将下载好的应用双击接受用户协议安装目录可自愿修改之后进行安装。3.通过以上两步就已经安装完微信开发工具了想要了解更多微信工具的使用可阅读官方文档https://developers.weixin.qq.com/miniprogram/dev/devtools/devtools.html第一个微信小程序安装完开发工具后可以使用它开发一个小demo先简单测试一下,其步骤如下1.在桌面找到新安装的微信开发者工具并双击。2.使用微信扫描弹出的二维码进入开发者工具界面首次打开需要扫码登陆。3.在小程序项目---小程序中点击加号填写项目配置AppID可使用自己注册小程序时的AppID也可选择测试号4.选择着默认模板其他配置默认即可最后勾选用户协议点击新建。5.此时在开发工具模拟器中会看到自己微信的头像和hello world,此时表明第一个微信小程序已经创建成功。小程序代码构成上面生成的demo项目文件目录机构如下一个基础的小程序由四种文件构成分别是1.json 后缀的 JSON 配置文件2.wxml 后缀的 WXML 模板文件3.wxss 后缀的 WXSS 样式文件4.js后缀的 JS 脚本逻辑文件下面是对上面文件的详细介绍.json文件此文件用于静态配置项目根目录下app.json文件是当前小程序的全局配置包括小程序的所有页面路径、界面表现、网络超时时间、底部 tab 等app.json基础配置如下json文件中不能添加注释这里为了方便说明以//开始的表示注释使用此配置信息时将注释删除即可{ pages:[//1.pages用于配置所有页面路径默认会进入第一个路径指定的页面。 pages/index/index,//当在这里配置完新页面保存后pages下会自动生成对应的页面文件只需修改自动生成的文件即可。 pages/logs/logs ], entryPagePath: pages/logs/logs,//2.entryPagePath配置小程序默认启动首页不配置此项默认会选择pages配置中的第一项。 window:{//3.window:配置小程序所有页面的顶部背景颜色文字颜色等。 navigationBarBackgroundColor: #ff0,//3-1设置顶部导航背景颜色支持十六进制颜色值。 navigationBarTitleText: 微信小程序测试,//3-2设置顶部导航标题文本。 navigationBarTextStyle:black,//3-3设置顶部导航标题字体颜色其值只能是black和white默认值。 navigationStyle:default,//3-4配置导航栏样式默认值defalult,还有一值custom导航栏标题及背景都会消失仅右上角胶囊按钮存在。 backgroundColor:#ffffff,//3-5配置窗口的背景色默认值#ffffff支持十六进制颜色值。 backgroundTextStyle:dark,//3-6配置下拉loading的样式仅支持 dark默认值和light。 backgroundColorTop:#666,//3-7设置顶部窗口的背景色仅iOS支持默认值#ffffff。 backgroundColorBottom:#555,//3-8设置底部窗口的背景色仅iOS支持默认值#ffffff。 enablePullDownRefresh:true,//3-9设置是否开启全局下拉刷新默认值为false。 onReachBottomDistance:50,//3-10设置当页面上拉距底部某个距离后触发事件单位为px,默认值50例如下拉加载更多数据。 pageOrientation:auto//3-11设置屏幕旋转时小程序是否跟随设备旋转横竖屏显示其值portrait默认值设备旋转时小程序不旋转、landscape设备旋转小程序旋转保持与视线不变、auto自动。 }, tabBar:{//4.tabBar:配置tab栏切换按钮。 color:#fff,//4-1设置tab按钮字体颜色其值为十六进制颜色值且为必须项。 selectedColor:#000,//4-2设置tab按钮被选中时字体颜色其值为十六进制颜色值且为必须项。 backgroundColor:#999,//4-3设置tab栏背景颜色其值为十六进制颜色值且为必须项。 borderStyle:black,//4-4设置tab栏边框颜色其值为black默认和white。 list:[//4-5设置tab按钮选项其值为一个每项都是对象的数组且为必须项数组元素的个数必须是[2,5]个不在范围内不显示。 { pagePath:pages/logs/logs,//4-5-1设置当前要跳转的页面路径。 text:登录,//4-5-2设置当前按钮文本。 iconPath:images/tabs/home.png,//4-5-3设置当前按钮点击前icon图标大小限制为40kb建议尺寸81px*81px不支持网络图片。 selectedIconPath:images/tabs/home-active.png//4-5-4设置当前按钮点击后icon图标大小限制为40kb建议尺寸81px*81px不支持网络图片。 }, { pagePath:pages/index/index, text:登录, iconPath:images/tabs/home.png, selectedIconPath:images/tabs/home-active.png } ], position:top,//4-6设置tab栏的位置其值bottom底部默认、top顶部。 custom:false//4-7自定义设置tabBar一般忽略此项配置其默认值为false,当值为true时需要自定义设计tabBar否则tabBar将失效其设计可阅读https://developers.weixin.qq.com/miniprogram/dev/framework/ability/custom-tabbar.html。 }, networkTimeout:{//5.networkTimeout:设置请求超时时间。 request:60000,//5-1设置wx.request的超时时间默认值为60000单位值毫秒。 connectSocke:60000,//5-2设置wx.connectSocket的超时时间默认值为60000单位值毫秒。 uploadFile:60000,//5-3设置wx.uploadFile的超时时间默认值为60000单位值毫秒。 downloadFile:60000//5-4设置wx.downloadFile的超时时间默认值为60000单位值毫秒。 }, //debug:true,//6.debug:是否开启在开发工具控制台面板显示调试信息Page 的注册页面路由数据更新事件触发等便于开发者快速定位问题所在调试完建议关闭其默认值为false。 //functionalPages:true,//7.functionalPages是否启用插件功能默认false如要启用可阅读https://developers.weixin.qq.com/miniprogram/dev/framework/plugin/functional-pages.html。 //subpackages:{},//8.subpackages:分包结构配置用于构建时打包成不同的分包按需加载如需配置请阅读https://developers.weixin.qq.com/miniprogram/dev/framework/subpackages.html。 //workers:string,//9.workers:设置处理多线程任务时worker代码放置目录如需配置请阅读https://developers.weixin.qq.com/miniprogram/dev/framework/workers.html。 //requiredBackgroundModes:string,//10.requiredBackgroundModes设置需要在后台使用的能力如需配置请阅读https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html#requiredBackgroundModes //plugins:Object,//11.plugins:设置使用到的插件如需配置可阅读https://developers.weixin.qq.com/miniprogram/dev/framework/plugin/using.html。 //preloadRule:Object,//12.preloadRule:设置分包预下载规则如需配置可阅读https://developers.weixin.qq.com/miniprogram/dev/framework/subpackages/preload.html。 resizable:true,//13.resizable:设置是否允许在PC上对窗口进行缩放及iPad是否支持屏幕旋转默认值为false。 //usingComponents:Object,//14.usingComponents:配置自定义组件。 //permission:Object,//15.permission:配置小程序接口权限相关设置如需配置可阅读https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html#permission。 //sitemapLocation:String,//16.sitemapLocation:配置sitemap.json文件路径默认在app.json同级目录下。 style:v2,//17.style:当值为v2时表示启用新版的组件样式。 //useExtendedLib:Object,//18.useExtendedLib:配置引用的扩展库如需配置可阅读https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html#useExtendedLib。 //entranceDeclare:Object,//19.entranceDeclare:配置微信消息用小程序打开如需配置可阅读https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/location-message.html。 //darkmode:String,//20.darkmode:配置小程序支持 DarkMode如需配置可阅读https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html#darkmode。 //themeLocation:String,//21.themeLocation:配置theme.json 的路径如需配置可阅读https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html#themeLocation。 //lazyCodeLoading:String,//22.lazyCodeLoading:配置自定义组件代码按需注入如需配置可阅读https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html#lazyCodeLoading。 //singlePage:Object,//23.singlePage:配置单页模式相关配置如需配置可阅读https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html#singlePage。 }app.json文件更详细配置文档推荐https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.htmlproject.config.json 对开发工具的配置使用这个配置后即使在更换电脑重新安装工具后将此项目在工具中打开依旧是自己熟悉的工具配置项。pages文件夹中json文件 pages文件夹中每个页面下的json文件是对当前页面的配置当前页面使用此json文件配置页面后当前页面可以忽略app.json文件的配置。.wxml文件此文件用于小程序骨架类似网页中的html文件此文件存在pages文件夹下的页面文件夹中也是由标签、属性等构成但是这里的标签和html中的标签有很大的不同如view classcontainertexthello/text/viewwxml文件和html文件不同之处1.标签名有所不同具体可阅读组件相关文档https://developers.weixin.qq.com/miniprogram/dev/component/2.小程序中可以实现数据绑定、列表渲染、条件渲染、模板等具体文档推荐https://developers.weixin.qq.com/miniprogram/dev/framework/view/wxml/wxss样式wxss支持css大部分特性其文件为后缀.wxss的文件其不同之处1.新增rpx尺寸单位一个响应式的尺寸单位把所有设备屏幕尺寸都划分为750rpx,使用rpx可以适配不同屏幕尺寸。2.仅支持css基础选择器。js逻辑微信小程序中js逻辑代码和网页中js代码基本相似后面会详细介绍。四、代码参考IgnoreAuth PostMapping(value /login) public R login(String username, String password, String captcha, HttpServletRequest request) { UsersEntity user userService.selectOne(new EntityWrapperUsersEntity().eq(username, username)); if(usernull || !user.getPassword().equals(password)) { return R.error(账号或密码不正确); } String token tokenService.generateToken(user.getId(),username, users, user.getRole()); return R.ok().put(token, token); } Override public String generateToken(Long userid,String username, String tableName, String role) { TokenEntity tokenEntity this.selectOne(new EntityWrapperTokenEntity().eq(userid, userid).eq(role, role)); String token CommonUtil.getRandomString(32); Calendar cal Calendar.getInstance(); cal.setTime(new Date()); cal.add(Calendar.HOUR_OF_DAY, 1); if(tokenEntity!null) { tokenEntity.setToken(token); tokenEntity.setExpiratedtime(cal.getTime()); this.updateById(tokenEntity); } else { this.insert(new TokenEntity(userid,username, tableName, role, token, cal.getTime())); } return token; } /** * 权限(Token)验证 */ Component public class AuthorizationInterceptor implements HandlerInterceptor { public static final String LOGIN_TOKEN_KEY Token; Autowired private TokenService tokenService; Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //支持跨域请求 response.setHeader(Access-Control-Allow-Methods, POST, GET, OPTIONS, DELETE); response.setHeader(Access-Control-Max-Age, 3600); response.setHeader(Access-Control-Allow-Credentials, true); response.setHeader(Access-Control-Allow-Headers, x-requested-with,request-source,Token, Origin,imgType, Content-Type, cache-control,postman-token,Cookie, Accept,authorization); response.setHeader(Access-Control-Allow-Origin, request.getHeader(Origin)); // 跨域时会首先发送一个OPTIONS请求这里我们给OPTIONS请求直接返回正常状态 if (request.getMethod().equals(RequestMethod.OPTIONS.name())) { response.setStatus(HttpStatus.OK.value()); return false; } IgnoreAuth annotation; if (handler instanceof HandlerMethod) { annotation ((HandlerMethod) handler).getMethodAnnotation(IgnoreAuth.class); } else { return true; } //从header中获取token String token request.getHeader(LOGIN_TOKEN_KEY); /** * 不需要验证权限的方法直接放过 */ if(annotation!null) { return true; } TokenEntity tokenEntity null; if(StringUtils.isNotBlank(token)) { tokenEntity tokenService.getTokenEntity(token); } if(tokenEntity ! null) { request.getSession().setAttribute(userId, tokenEntity.getUserid()); request.getSession().setAttribute(role, tokenEntity.getRole()); request.getSession().setAttribute(tableName, tokenEntity.getTablename()); request.getSession().setAttribute(username, tokenEntity.getUsername()); return true; } PrintWriter writer null; response.setCharacterEncoding(UTF-8); response.setContentType(application/json; charsetutf-8); try { writer response.getWriter(); writer.print(JSONObject.toJSONString(R.error(401, 请先登录))); } finally { if(writer ! null){ writer.close(); } } // throw new EIException(请先登录, 401); return false; } }数据库参考-- ---------------------------- -- Table structure for token -- ---------------------------- DROP TABLE IF EXISTS token; CREATE TABLE token ( id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 主键, userid bigint(20) NOT NULL COMMENT 用户id, username varchar(100) NOT NULL COMMENT 用户名, tablename varchar(100) DEFAULT NULL COMMENT 表名, role varchar(100) DEFAULT NULL COMMENT 角色, token varchar(200) NOT NULL COMMENT 密码, addtime timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 新增时间, expiratedtime timestamp NOT NULL DEFAULT 0000-00-00 00:00:00 COMMENT 过期时间, PRIMARY KEY (id) USING BTREE ) ENGINEInnoDB AUTO_INCREMENT27 DEFAULT CHARSETutf8 ROW_FORMATCOMPACT COMMENTtoken表; -- ---------------------------- -- Records of token -- ---------------------------- INSERT INTO token VALUES (9, 23, cd01, xuesheng, 学生, al6svx5qkei1wljry5o1npswhdpqcpcg, 2023-02-23 21:46:45, 2023-03-15 14:01:36); INSERT INTO token VALUES (10, 11, xh01, xuesheng, 学生, fahmrd9bkhqy04sq0fzrl4h9m86cu6kx, 2023-02-27 18:33:52, 2023-03-17 18:27:42); INSERT INTO token VALUES (11, 17, ch01, xuesheng, 学生, u5km44scxvzuv5yumdah2lhva0gp4393, 2023-02-27 18:46:19, 2023-02-27 19:48:58); INSERT INTO token VALUES (12, 1, admin, users, 管理员, h1pqzsb9bldh93m92j9m2sljy9bt1wdh, 2023-02-27 19:37:01, 2023-03-17 18:23:02); INSERT INTO token VALUES (13, 21, xiaohao, shezhang, 社长, zdm7j8h1wnfe27pkxyiuzvxxy27ykl2a, 2023-02-27 19:38:07, 2023-03-17 18:25:20); INSERT INTO token VALUES (14, 27, djy01, xuesheng, 学生, g3teq4335pe21nwuwj2sqkrpqoabqomm, 2023-03-15 12:56:17, 2023-03-15 14:00:16); INSERT INTO token VALUES (15, 29, dajiyue, shezhang, 社长, 0vb1x9xn7riewlp5ddma5ro7lp4u8m9j, 2023-03-15 12:58:08, 2023-03-15 14:03:48);源码获取文章下方名片联系我即可~大家点赞、收藏、关注、评论啦 、查看获取联系方式精彩专栏推荐订阅全网最全的Java python 小程序 php uniapp项目列表

相关新闻

【含文档+PPT+源码】Python爬虫人口老龄化大数据分析平台的设计与实现

【含文档+PPT+源码】Python爬虫人口老龄化大数据分析平台的设计与实现

项目介绍 本课程演示的是一款Python爬虫人口老龄化大数据分析平台的设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Python学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本…

2026/7/3 15:38:42 阅读更多 →
AI生成网络小说脑洞:从技术落地到创意升级,手把手教你打造爆款设定

AI生成网络小说脑洞:从技术落地到创意升级,手把手教你打造爆款设定

在网络小说创作领域,“脑洞”是吸引读者的核心竞争力——无论是反套路的世界观设定、冲突拉满的人物关系,还是出人意料的剧情转折,好的脑洞能让作品在海量内容中快速突围。随着AI大模型技术的成熟,越来越多创作者开始借助AI辅助生…

2026/7/3 15:38:44 阅读更多 →
效率直接起飞!研究生必备的AI论文写作软件 —— 千笔·专业论文写作工具

效率直接起飞!研究生必备的AI论文写作软件 —— 千笔·专业论文写作工具

你是否曾为论文选题而烦恼?是否在深夜面对空白文档无从下笔?是否反复修改却仍对结果不满意?研究生阶段的论文写作,不仅是学术能力的考验,更是时间与精力的较量。面对繁杂的文献检索、严谨的格式要求和不断攀升的查重率…

2026/7/3 15:38:47 阅读更多 →

最新新闻

构建企业级Vue3后台管理框架:Element-Plus-Admin架构设计与工程实践

构建企业级Vue3后台管理框架:Element-Plus-Admin架构设计与工程实践

构建企业级Vue3后台管理框架:Element-Plus-Admin架构设计与工程实践 【免费下载链接】element-plus-admin 基于vitetselementPlus 项目地址: https://gitcode.com/gh_mirrors/el/element-plus-admin 在当今快速发展的前端技术生态中,企业级后台管…

2026/7/6 14:23:20 阅读更多 →
Midscene.js:视觉驱动UI自动化,告别脆弱选择器

Midscene.js:视觉驱动UI自动化,告别脆弱选择器

1. 项目概述:当UI自动化不再依赖选择器作为一名在测试自动化和前端工程领域摸爬滚打了十多年的老手,我经历过UI自动化测试从Selenium的“石器时代”到Playwright/Cypress这类现代框架的演进。但一个核心痛点始终如影随形:选择器(S…

2026/7/6 14:21:19 阅读更多 →
Prompt 调试日志体系:凌晨三点也要能复现当时的思路

Prompt 调试日志体系:凌晨三点也要能复现当时的思路

Prompt 调试日志体系:凌晨三点也要能复现当时的思路 一、三个月前的 Prompt 为什么能跑出那个结果——你已经找不到证据了 你翻出了三个月前的对话记录,找到了当时那条跑出 92% 召回率的 Prompt。你把相同的 Prompt 发给了同一模型的同一版本号——结果只…

2026/7/6 14:19:17 阅读更多 →
Java程序员转型AI开发:收藏这份实战指南,小白也能快速上手大模型

Java程序员转型AI开发:收藏这份实战指南,小白也能快速上手大模型

本文为Java程序员提供了一份转型AI开发的实战指南,强调了Java技能在AI项目中的重要性,并介绍了Python、机器学习、深度学习以及大模型API调用的学习路径。文章建议先从实际项目入手,逐步深入,并分享了避坑建议和学习资源&#xff…

2026/7/6 14:19:17 阅读更多 →
LangChain--04--消息与提示词模板

LangChain--04--消息与提示词模板

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录1.认识消息1.1 消息的内部结构1.6.3 多轮对话聊天机器人2.提示词模板(Prompt Templates)2.1 为什么推荐提示词模板?2.2 提示词机制演进2.3 ChatPromptTem…

2026/7/6 14:17:16 阅读更多 →
独立站搭建工具测评:BBWEYY/比文云/Supabase/Notion AI(2026年7月更新)含零代码SAAS、AI编程、源码定制交付

独立站搭建工具测评:BBWEYY/比文云/Supabase/Notion AI(2026年7月更新)含零代码SAAS、AI编程、源码定制交付

一、六个建站工具总表品牌建站方式适合谁价格BBWEYY全域全端全行业的AISAAS工具覆盖5000行业包括零售、工厂、外贸、教培行业本地生活,特别适合中小企业、工厂、商贸公司、外贸企业、教培机构和多行业经营项目。700元-3000元一年,买3送3年,年…

2026/7/6 14:17:16 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻