源码地址:https://gitee.com/baohaipeng/gulimall
本文目标
- 搭建项目框架
- 数据库初始化
- 代码生成器改造
- 构建所有模块代码
项目框架搭建
- 在码云上创建Git仓库,顺序及注意点参照下图标注
- 本地克隆码云的远程仓库。先复制仓库地址,到本地打开git命令行,执行拉取
- 创建商品服务模块。用idea打开拉取的项目,创建谷粒商城商品服务模块,选择基本依赖后Finish
- 根据上一步的操作,再依次创建仓储微服务(ware)、订单微服务(order)、优惠券微服务(coupon)、用户微服务(member),完整结构如下
- 用pom文件聚合各个微服务
在gulimall根目录下新建pom文件,打包方式为pom,并将各个微服务聚合起来,结构如下
如果你的idea右侧没有出现Maven窗口,右键点击gulimall工程,点击Add Framework Support,选择Maven,确认即可展示。
完整pom文件如下
<?xml version="1.0" encoding="UTF-8"?>4.0.0com.bhp.gulimall gulimall 0.0.1-SNAPSHOTgulimall聚合服务pomgulimall-coupongulimall-productgulimall-ordergulimall-membergulimall-ware
- 编辑聚合服务的忽略配置.gitignore,删除子模块的.gitignore
聚合服务完整.gitignore
target/pom.xml.tagpom.xml.releaseBackuppom.xml.versionsBackuppom.xml.nextrelease.propertiesdependency-reduced-pom.xmlbuildNumber.properties.mvn/timing.properties.mvn/wrapper/maven-wrapper.jar**/mvnw**/mvnw.cmd**/.mvn**/*.iml**/target/.idea
子模块的忽略配置直接删掉即可
子模块微服务的HELP.md文件根据自己的需要选择删除还是保存,我直接删了。
- 向码云提交代码
点击右上角提交按钮,可以从左侧看到现在所有的不需要的东西已经排除掉了,选中所有代码,填写提交备注,点击下方的提交并推送按钮
确认无误后点击push进行推送
如图,推送基本代码结构成功
初始化数据库
在mysql分别新建下边的数据库,字符集和排序规则如下图设置
- gulimall_oms(订单管理数据库)
- gulimall_pms(商品管理数据库)
- gulimall_sms(优惠/营销管理数据库)
- gulimall_ums(会员管理数据库)
- gulimall_wms(库存管理数据库)
sql文件已经放到项目根目录下的sql文件夹内
引入人人开源后台管理系统
- 将renren-fast克隆到本地:https://gitee.com/renrenio/renren-fast.git
将renren-fast-vue克隆到本地:https://gitee.com/renrenio/renren-fast-vue.git
- 删除renren-fast原有git链接文件夹,将其整个拷进gulimall,并在聚合工程内引入
聚合服务pom文件内右键、Maven、Reload Project重新导入依赖
- 新建gulimall_admin(后台管理数据库),并执行renren-fast的db目录下的mysql.sql文件,初始化后台管理数据库
- 修改数据库连接地址、账号、密码
启动RenrenAplication,成功后如下界面
- 将前端项目renren-fast-vue拷进gulimall项目中,依次执行以下命令,然后即可看到下图的登录页面
npm install
npm run dev
账号:admin,密码admin,输入验证码,登录正常
将renren-fast和renren-fast-vue的代码同步提交到自己的码云仓库,完善项目目录
引入人人开源代码生成器
- 将renren-generator克隆到本地:https://gitee.com/renrenio/renren-generator.git
- 删除renren-generator原有git链接文件夹,将其整个拷进gulimall,并在聚合工程内引入
- 修改数据库配置,让数据库连接上gulimall_pms(商品管理数据库)
- 修改代码生成器设置,使其符合商品管理微服务的实际结构要求
- 启动代码生成器,可以看到所有的商品管理数据内的表
- 选中所有表,生成代码
- 将生成的代码中的controller、dao、entity、 service、mapper文件夹都拷进项目中
随便打开一个文件,发现一堆报错,很多错误是由于缺少部分依赖造成的,下边会进行统一处理
增加公共模块gulimall-common
- 右键点击项目根目录gulimall,new,module,maven,next,填写必要信息,finish
- 添加mybatis-plus依赖
com.baomidou mybatis-plus-boot-starter 3.3.2
- 添加lombok依赖
org.projectlombok lombok 1.18.16
- 添加httpcore依赖
org.apache.httpcomponents httpcore 4.4.13
- 添加commons-lang依赖
commons-lang commons-lang 2.6
- 添加mysql驱动依赖
mysql mysql-connector-java 8.0.22
- 在gulimall-common的main/java目录下新建文件夹com.bhp.common.utils,将renren-fast里的PageUtils.java、Query.java、R.java、Constant.java和RRException.java复制进去
- 在gulimall-common的main/java目录下新建文件夹com.bhp.common.xss,将renren-fast里的SQLFilter.java复制进去,并修改SQLFilter.java内导入的RRException包路径
- 完整pom文件
<?xml version="1.0" encoding="UTF-8"?> gulimall com.bhp.gulimall0.0.1-SNAPSHOT4.0.0 gulimall-common 谷粒商城公共模块org.apache.maven.plugins maven-compiler-plugin 77mysql mysql-connector-java 8.0.22com.baomidou mybatis-plus-boot-starter 3.3.2org.projectlombok lombok 1.18.16org.apache.httpcomponents httpcore 4.4.13commons-lang commons-lang 2.6io.renren renren-fast 3.0.0compile
- 商品微服务引入gulimall-common依赖
此时,商品服务模块生成的代码依然会报错,由于需要修改的地方比较多,下面调整代码生成器模板,对代码进行重新生成并替换。
调整代码生成器模板
- 打开renren-generator内的Controller.java.vm文件,删除下边这个引入
- 注释所有@RequiresPermissions的注解
- 最终的Controller.java.vm文件
package ${package}.${moduleName}.controller;import java.util.Arrays;import java.util.Map;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.PathVariable;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.RestController;import ${package}.${moduleName}.entity.${className}Entity;import ${package}.${moduleName}.service.${className}Service;import ${mainPath}.common.utils.PageUtils;import ${mainPath}.common.utils.R;/** * ${comments} * * @author ${author} * @email ${email} * @date ${datetime} */@RestController@RequestMapping("${moduleName}/${pathName}")public class ${className}Controller { @Autowired private ${className}Service ${classname}Service; /** * 列表 */ @RequestMapping("/list")## @RequiresPermissions("${moduleName}:${pathName}:list") public R list(@RequestParam Map params){ PageUtils page = ${classname}Service.queryPage(params); return R.ok().put("page", page); } /** * 信息 */ @RequestMapping("/info/{${pk.attrname}}")## @RequiresPermissions("${moduleName}:${pathName}:info") public R info(@PathVariable("${pk.attrname}") ${pk.attrType} ${pk.attrname}){${className}Entity ${classname} = ${classname}Service.getById(${pk.attrname}); return R.ok().put("${classname}", ${classname}); } /** * 保存 */ @RequestMapping("/save")## @RequiresPermissions("${moduleName}:${pathName}:save") public R save(@RequestBody ${className}Entity ${classname}){${classname}Service.save(${classname}); return R.ok(); } /** * 修改 */ @RequestMapping("/update")## @RequiresPermissions("${moduleName}:${pathName}:update") public R update(@RequestBody ${className}Entity ${classname}){${classname}Service.updateById(${classname}); return R.ok(); } /** * 删除 */ @RequestMapping("/delete")## @RequiresPermissions("${moduleName}:${pathName}:delete") public R delete(@RequestBody ${pk.attrType}[] ${pk.attrname}s){${classname}Service.removeByIds(Arrays.asList(${pk.attrname}s)); return R.ok(); }}
- 重启代码生成器,重新生成gulimall_product数据库代码,使用新生成的controller文件夹覆盖原来有问题的文件夹,现在商品微服务模块的代码就都不会报错了
- 将修改后的代码都提交码云进行更新
完善商品微服务模块gulimall_product的功能
目前,商品微服务模块的业务代码都自动生成并且没有异常了,下面需要完善配置,让该模块正常联通数据库。
- 配置商品微服务模块的数据库连接信息
spring: datasource: driver-class-name: com.mysql.jdbc.Driver username: root password: root url: jdbc:mysql://127.0.0.1:3306/gulimall_pms?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
- 配置dao层扫描路径
@MapperScan("com.bhp.gulimall.product.dao")
- 配置Mybatis-Plus
mybatis-plus: mapper-locations: classpath:/mapper/**/*.xml global-config: db-config: id-type: auto
- 测试一下商品微服务模块能不能正常工作
package com.bhp.gulimall.product;import com.bhp.gulimall.product.entity.BrandEntity;import com.bhp.gulimall.product.service.BrandService;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;@SpringBootTestclass GulimallProductApplicationTests {@AutowiredBrandService brandService;@Testvoid contextLoads() {BrandEntity brandEntity = new BrandEntity();brandEntity.setName("汉阳造");brandEntity.setDescript("耗子尾汁");brandService.save(brandEntity);System.out.println(brandEntity.toString());}}
控制台打印成功,数据也入库成功,商品微服务模块搭建完成
优惠券服务代码生成与配置
- 修改代码生成器连接的数据库为gulimall_sms(优惠/营销管理数据库)
- 修改代码生成器的业务配置
- 重启代码生成器,生成代码并下载
- 将生成的controller、dao、entity、service、mapper文件夹整个复制到gulimall-coupon项目中
- 依赖gulimall-common模块
- 配置数据库连接信息、设置Mybatis-Plus
- 启动类配置dao层扫描
- 测试优惠券服务是否正常,控制台正常打印,数据正常入库
至此,优惠券服务模块代码生成完毕
参照优惠券服务代码生成、配置及测试步骤,完成会员服务、订单服务、仓储服务模块的代码
过程略,代码已上传至我的远程仓库:https://gitee.com/baohaipeng/gulimall