html5搭建手机网站,用地方名字做网站,php网站开发实训报告,手机平台Java阶段五Day15 文章目录 Java阶段五Day15分层其他依赖dao-apidao-implinfrustructuredomainadaptermain 测试整合项目main前台师傅功能luban-front配置师傅相关表格ER图ER练习案例鲁班表格ER关系#xff08;非常重要#xff09; 前台师傅接口——师傅入驻adapterdomaininfr…Java阶段五Day15 文章目录 Java阶段五Day15分层其他依赖dao-apidao-implinfrustructuredomainadaptermain 测试整合项目main前台师傅功能luban-front配置师傅相关表格ER图ER练习案例鲁班表格ER关系非常重要 前台师傅接口——师傅入驻adapterdomaininfrustructuredao-impl映射文件main模块启动 分层其他依赖
保证最后 main 启动的时候可以支持SSM框架内容 简单的启动测试案例能否从 main 启动时获取controller service repository dao接口代理
dao-api
定义持久层接口定义使用的数据库表格对应po
dependencygroupIdorg.example/groupIdartifactIdworker-po/artifactIdversion1.0-SNAPSHOT/version
/dependency
dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactId
/dependencydao-impl
定义持久层实现看到实现的依赖jpa hibernate mybatis
dependencygroupIdorg.mybatis/groupIdartifactIdmybatis-spring/artifactIdversion2.1.0/version
/dependencyinfrustructure
domain
添加一个公用common
dependencygroupIdorg.example/groupIdartifactIdworker-common/artifactIdversion1.0-SNAPSHOT/version
/dependencyadapter
需要spring mvc等支持
!--私服提供的 adapter支持依赖--
dependencygroupIdcom.tedu.inn/groupIdartifactIdinn-spring-adapter-support/artifactIdversion1.0.0-SNAPSHOT/version
/dependencymain
负责整合跑通应用
!--持久层整合--
dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIddependencygroupIdorg.mybatis.spring.boot/groupIdartifactIdmybatis-spring-boot-starter/artifactIdversion2.1.4/version/dependency
/dependency
!--TODO dubbo配置--
!--TODO nacos--测试整合项目main
main 提供了所需的启动 web 应用依赖内容
配置持久层 依赖 编写持久层实现(xml映射文件) namespace对应接口全路径
select标签的id值对应接口的方法名称 编写持久层接口 main扫描接口包 SpringBootApplication
MapperScan(cn.tedu.luban.test.dao)
public class WorkerServerApplication {//检测以下是否能够创建myabtis的实现对象DaoTestpublic static void main(String[] args) {//从启动方法获取返回值,spring上下文对象ConfigurableApplicationContextcontext SpringApplication.run(WorkerServerApplication.class, args);DaoTest proxy context.getBean(DaoTest.class);System.out.println(proxy.getClass().getName());int select proxy.select();System.out.println(select);}
}yaml 数据源mybatis各种属性
server:port: 9001
spring:application:name: luban-worker-serverdatasource:url: jdbc:mysql://localhost:3306/tarena_tp_luban_worker?useSSLfalseuseUnicodetruecharacterEncodingutf-8serverTimezoneAsia/ShanghaiallowMultiQueriestrueusername: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Driver
# mybatis
mybatis:configuration:cache-enabled: false # 不启用mybatis缓存map-underscore-to-camel-case: true # 映射支持驼峰命名法log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 将运行的sql输出到控制台mapper-locations: classpath*:mapper/*.xml前台师傅功能
luban-front配置
项目中 vue.config.js 的文件配置了前端请求的代理代理会根据配置向外发出请求
一共配置了4个代理
访问功能的网关 图片上传服务
只考虑上传访问演示系统环境中图片上传是没问题的考虑的是读取图片rpc调用必须使用本地attach base基本服务
在系统中查询服务区域,查询服务类型,都可以访问演示系统提供的base服务 登录注册 师傅相关表格ER图
目标 掌握ER图分析创建过程
ER图——实体关系图entity Relationship
在设计项目之初做数据库设计的一个阶段性分析过程产出ER图数据库的概念设计
ER练习案例
设计步骤需求分析实体确定实体关系
需求请给一个论坛设计功能包含用户可以登录用户可以申请成为版主论坛有板块用户可以在板块里发帖可以回帖版主可以删除所有回帖和发帖用户只能删除自己的回帖和发帖
确定实体 用户 版主 板块 帖子 回帖 实体关系 需要根据实体提供的功能完成实体与其他实体的关系确定最后需要优化删除间接关系保留最清晰联系。最终由创建数据库DBA决定到底如何关联实体对应表格 数据库设计六个阶段 需求分析概念设计逻辑设计物理设计数据库创建数据库运维
如果设计到表格落地
user: table_user
role: table_role
user_role: table_user_role
reply: table_reply(uerId)外键需要加到哪里
如果是1对1的表格任何一方理论上做外键但是应该区分主从表
主表 核心数据
从表 数据依赖主表数据存在
鲁班表格ER关系非常重要
鲁班平台需求描述 支持运营商 供应商 厂家入住提供维修需求订单的平台可以允许用户登录注册线下培训考核成为师傅进行抢单并且对订单结果负责的一个服务平台系统
运营商 / 厂家 / 供应商 入住用户的登录注册用户成为师傅需要师傅入住师傅入住后绑定给一个平台账号厂家提供需求单平台定义结算分润师傅入住时选择服务区域师傅入住时选择服务分类师傅入住时上传身份信息图片师傅查询需求单抢单生成订单师傅签到上传施工图片完成订单平台进行订单结算
实体确定 前台师傅接口——师傅入驻
从上向下开发业务功能 adapter 接收请求 controllerdomain 处理业务 servicerepository 定义domain接口 **Repository infrustructure 定义repositoryImpldao-api 接口定义持久层功能dao-impl xml 映射文件 sql 语句
adapter
WorkerServerController
package com.tarena.luban.worker.server.controller;import com.tarena.tp.luban.worker.server.dto.param.WorkerCreateParam;
import com.tedu.inn.protocol.exception.BusinessException;
import org.springframework.beans.factory.annotation.Autowired;
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.RestController;/**前台师傅接口1. 入住 写操作2. 查询详情,查询的是已经审核通过的当前登录的师傅信息*/
RestController
RequestMapping(/worker)
public class WorkerServerController {Autowiredprivate WorkerServerService workerServerService;/*** 返回 通用数据result*/PostMapping(/create)public Long createWorker(RequestBody WorkerCreateParam workerCreateParam) throws BusinessException {//调用 worker service 新增return workerServerService.create(workerCreateParam);}
}domain
相关代码处理的问题后端代码如何获取userId WorkerServerService
package com.tarena.luban.worker.server.manange;
import com.tarena.luban.worker.server.repository.WorkerAreaRepository;
import com.tarena.luban.worker.server.repository.WorkerCategoryRepsoitory;
import com.tarena.luban.worker.server.repository.WorkerRepository;
import com.tarena.passport.protocol.LoginUser;
import com.tarena.passport.sdk.context.SecurityContext;
import com.tarena.tp.luban.worker.server.common.enums.ResultEnum;
import com.tarena.tp.luban.worker.server.dto.param.WorkerAreaParam;
import com.tarena.tp.luban.worker.server.dto.param.WorkerCategoryParam;
import com.tarena.tp.luban.worker.server.dto.param.WorkerCreateParam;
import com.tedu.inn.commons.utils.Asserts;
import com.tedu.inn.protocol.exception.BusinessException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;import java.util.List;/*** author liner* version 1.0*/
Service
Slf4j
public class WorkerServerService {Autowiredprivate WorkerRepository workerRepository;Autowiredprivate WorkerAreaRepository workerAreaRepository;Autowiredprivate WorkerCategoryRepsoitory workerCategoryRepsoitory;/*** 1. 补充userId* 2. 检查 手机号* 3. 检查 身份证 和真实名称是否匹配 TODO* 4. 存储 worker workerCategory workerArea* 使用定义好的repository接口* param workerCreateParam* return*/Transactional(rollbackFor Exception.class)public Long create(WorkerCreateParam workerCreateParam) throws BusinessException {//获取userIdLong userIdgetUserIdByToken();//检查 手机号 身份证 TODOcheckPhoneAndIdCard(workerCreateParam);//挨个存储对应数据到持久层workerCreateParam.setUserId(userId);Long idsaveWorker(workerCreateParam);saveWorkerArea(workerCreateParam);saveWorkerCategory(workerCreateParam);return id;}/*** 先删除,后新增* param workerCreateParam*/private void saveWorkerCategory(WorkerCreateParam workerCreateParam) {workerCategoryRepsoitory.deleteByUserId(workerCreateParam.getUserId());ListWorkerCategoryParam workerCategoryParams workerCreateParam.getWorkerCategoryParams();if (!CollectionUtils.isEmpty(workerCreateParam.getWorkerCategoryParams())){//循环workerCategoryParams.forEach(param - {param.setUserId(workerCreateParam.getUserId());workerCategoryRepsoitory.save(param);});}}/*** 先删除,后新增* param workerCreateParam*/private void saveWorkerArea(WorkerCreateParam workerCreateParam) {workerAreaRepository.deleteByUserId(workerCreateParam.getUserId());//循环存储 foreach//TODO 批量存ListWorkerAreaParam workerAreaParams workerCreateParam.getWorkerAreaParams();for (WorkerAreaParam workerAreaParam : workerAreaParams) {//提交的参数 workerCategoryParam中和workerParam类似的,也没有userId;workerAreaParam.setUserId(workerCreateParam.getUserId());//insert into worker_areaworkerAreaRepository.save(workerAreaParam);}}/*** 1. 当前用户有可能已经是师傅了.* 1.1 先查讯数据库是否有当前用户.师傅信息 有就报错 没有 就新增* 1.2 不管有没有 如果有就删除.重新新增* param workerCreateParam* return*/private Long saveWorker(WorkerCreateParam workerCreateParam) {//如果当前用户在数据库中有师傅信息,就删除 重新入住师傅信息workerRepository.delete(workerCreateParam.getUserId());Long idworkerRepository.save(workerCreateParam);//TODO rpc 调用 将身份信息,worker-id,和当前图片传递给attach系统,做更新return id;}private void checkPhoneAndIdCard(WorkerCreateParam workerCreateParam) {//TODOlog.info(check phone and idCard,now passed);}private Long getUserIdByToken() throws BusinessException {LoginUser loginToken SecurityContext.getLoginToken();//判断 user登录还是没登录 如果loginUser是空的,说明没登录Asserts.isTrue(loginTokennull,new BusinessException(ResultEnum.USER_TOKEN_VERIFY_FAILED));return loginToken.getUserId();}}infrustructure
实现domain定义的repository接口根据代码需求创建dao-api的dao接口
dao-impl映射文件
worker insert deleteworkerArea insert deleteworkerCategory insert delete
实现xml映射文件从源代码中粘贴修改
namespace 对应当前接口类不需要方法的删除根据当前接口中方法名确定标签的 id 是否对应根据接口中方法参数确定 sql 中 #{参数名} 是否正确
insert标签
insert idinsert parameterTypecom.tarena.tp.luban.worker.po.Worker useGeneratedKeystrue keyColumnidkeyPropertyidmybatis可以通过 useGeneratedKeys属性 决定是否要补充参数的属性值
keyColumn就是读取数据库的字段
keyProperty补充到对象的属性
main模块启动 spring-boot-starter-web 底层web容器 默认tomcat
tomcat容器里默认加载servlet容器会有servlet-api存在
main依赖分层的模块依赖中存在servlet-api会和main starter-web冲突