- 一、需求
- 二、医院设置数据库表
- 三、添加医院设置表的实体类
- 1.基本实体类baseEntity
- 2.医院设置实体类HospitalSet
- 四、医院微服务模块service_hosp
- 1.为微服务模块添加配置信息application.properties
- 2.添加启动类ServiceHospApplication
- 3.三层架构 - - mapper持久层
- 4.三层架构 - - mapper持久层的xml文件
- 5.三层架构 - - mapper持久层的扫描实现类的配置类
- 6.三层架构 - - service业务层接口
- 7.三层架构 - - service业务层实现类
- 8.三层架构 - - controller表示层
- 9.测试
二、医院设置数据库表保存开通医院的一些基本信息,每个医院一条信息,保存医院编号和接口调用相关签名key(只有key相同才可以建立连接)等信息
# 医院设置 CREATE TABLE `hospital_set` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '编号', `hosname` VARCHAR(100) DEFAULT NULL COMMENT '医院名称', `hoscode` VARCHAR(30) DEFAULT NULL COMMENT '医院编号', `api_url` VARCHAR(100) DEFAULT NULL COMMENT 'api基础路径', `sign_key` VARCHAR(50) DEFAULT NULL COMMENT '签名秘钥', `contacts_name` VARCHAR(20) DEFAULT NULL COMMENT '联系人', `contacts_phone` VARCHAR(11) DEFAULT NULL COMMENT '联系人手机', # 如果是1,处于连接断开状态 `status` TINYINT(3) NOT NULL DEFAULT '0' COMMENT '状态', # TIMESTAMP时间戳 `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `is_deleted` TINYINT(3) NOT NULL DEFAULT '0' COMMENT '逻辑删除(1:已删除,0:未删除)', PRIMARY KEY (`id`), UNIQUE KEY `uk_hoscode` (`hoscode`) COMMENT '唯一约束(医院编号必须唯一)' ) ENGINE=INNODB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='医院设置表';
三、添加医院设置表的实体类添加一条数据
实体类中采用@TableField("create_time")来使实体类属性映射数据库表字段
在model模块下面的java包中创建com.zhengyibao.yygh包,包下创建如下目录结构
1.基本实体类baseEntity
package com.zhengyibao.yygh.model.base;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@Data //lombok生成的注解,会将get、set方法和string方法都自动生成
public class baseEntity implements Serializable{
@ApiModelProperty(value="id") //@ApiModelProperty用于对对model属性的说明或者数据操作更改 value
@TableId(type= IdType.AUTO) //@TableId用于,主键策略,AUTO代表主键自动增长
private Long id;
@ApiModelProperty(value="创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField("create_time") //映射数据库中的名称
private Date createTime;
@ApiModelProperty(value="更新时间")
@TableField("update_time")
private Date updateTime;
@ApiModelProperty(value="逻辑删除(1:已删除,0:未删除)")
@TableLogic //Mybatis-plus逻辑删除
@TableField("is_deleted")
private Integer isDeleted;
@ApiModelProperty(value="其他参数")
@TableField(exist = false) //表示当前属性不是数据库的字段,但在项目中必须使用
private Map param=new HashMap<>();
}
2.医院设置实体类HospitalSet
package com.zhengyibao.yygh.model.hosp;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.zhengyibao.yygh.model.base.baseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data //lombok生成get、set方法
@ApiModel(description = "医院设置")
@TableName("hospital_set")
public class HospitalSet extends baseEntity{ //继承baseEntity的基本属性
private static final long serialVersionUID = 1L; //Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的
//进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常
//默认的1L,也可以是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段
@ApiModelProperty(value="医院名称")
@TableField("hosname")
private String hosname;
@ApiModelProperty(value="医院编号")
@TableField("hoscode")
private String hoscode;
@ApiModelProperty(value="api基础路径")
@TableField("api_url")
private String apiUrl;
@ApiModelProperty(value="签名秘钥")
@TableField("sign_key")
private String signKey;
@ApiModelProperty(value="联系人姓名")
@TableField("contacts_name")
private String contactsName;
@ApiModelProperty(value="联系人手机")
@TableField("contacts_phone")
private String contactsPhone;
@ApiModelProperty(value="状态")
@TableField("status")
private Integer status;
}
四、医院微服务模块service_hosp
1.为微服务模块添加配置信息application.properties
# application.properties # 服务端口 server.port=8201 # 服务名 spring.application.name=service-hosp # 环境设置:dev、test、prod spring.profiles.active=dev # mysql数据库连接 spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/yygh_hosp?characterEncoding=utf-8&useSSL=false spring.datasource.username=root spring.datasource.password=root123 #返回json的全局时间格式 spring.jackson.date-format=yyyy-MM-dd HH:mm:ss spring.jackson.time-zone=GMT+82.添加启动类ServiceHospApplication
package com.zhengyibao.yygh.hosp;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ServiceHospApplication {
public static void main(String[] args){
SpringApplication.run(ServiceHospApplication.class, args);
}
}
3.三层架构 - - mapper持久层run ServiceHospApplication测试微服务框架搭建是否正确
将service模块中pom.xml的服务调用、服务注册和流量控制三个依赖注释掉,不注释会报错
package com.zhengyibao.yygh.hosp.mapper; import com.baomidou.mybatisplus.core.mapper.baseMapper; import com.zhengyibao.yygh.model.hosp.HospitalSet; //由于HospitalSet不在service_hosp模块中,去service模块的pom.xml文件中将model模块引入 //mybatis-plus在mapper提供了baseMapper接口,继承这个接口,可获得CRUD功能 public interface HospitalSetMapper extends baseMapper { }
由于HospitalSet不在service_hosp模块中,去service模块的pom.xml文件中将model模块引入
4.三层架构 - - mapper持久层的xml文件com.zhengyibao model 0.0.1-SNAPSHOT
# HospitalSetMapper.xml5.三层架构 - - mapper持久层的扫描实现类的配置类
package com.zhengyibao.yygh.hosp.config;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;
@Configuration //配置类
@MapperScan("com.zhengyibao.yygh.hosp.mapper") //由于mapper的实现类会动态被创建,所以需要加配置类来扫描mapper的包查找他的实现类
public class HospitalConfig {
}
6.三层架构 - - service业务层接口
package com.zhengyibao.yygh.hosp.service; import com.baomidou.mybatisplus.extension.service.IService; import com.zhengyibao.yygh.model.hosp.HospitalSet; //继承IService,是mybatis-plus提供的,可以让Mybatis-Plus在Service层去调用Mapper public interface HospitalSetService extends IService7.三层架构 - - service业务层实现类{ }
package com.zhengyibao.yygh.hosp.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.zhengyibao.yygh.hosp.mapper.HospitalSetMapper; import com.zhengyibao.yygh.hosp.service.HospitalSetService; import com.zhengyibao.yygh.model.hosp.HospitalSet; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service //将实现类交给spring去管理 //ServiceImpl<对应的mapper,实体类>是mybatis-plus提供的实现类 public class HospitalSetServiceImpl extends ServiceImpl8.三层架构 - - controller表示层implements HospitalSetService{ //一般service类里面要注入mapper,但由于交给mybatis-plus管理,在ServiceImpl已经注入过了,不需要使用@Autowired再进行注入了 }
package com.zhengyibao.yygh.hosp.controller;
import com.zhengyibao.yygh.hosp.service.HospitalSetService;
import com.zhengyibao.yygh.model.hosp.HospitalSet;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController //里面有两个主要注解,1.@Controller:让HospitalSetController交给spring管理 2.@ResponseBody:返回数据(以json格式返回)
@RequestMapping("/admin/hosp/hospitalSet") //访问的路径 http://localhost:8201/admin/hosp/hospitalSet/findAll
public class HospitalSetController {
//注入service
@Autowired
private HospitalSetService hospitalSetService;
//1.查询医院设置表的所有信息
@GetMapping("findAll") //get方式提交(查询所有)
public List findAllHospitalSet(){
//调用service里面的方法 mybatis-plus给增删改查在mapper中做了封装,在service中也做了封装
List list=hospitalSetService.list();
return list; //@RestController注解返回数据,底层的jackson会将数据转换成json格式,所以list最后会被转换成json格式
}
//2.删除
@DeleteMapping("{id}") //delete方式提交,并通过路径传id值 但由于浏览器无法直接使用delete方式访问,所以要在comment模块整合swagger,在common父模块的pom.xml中引入swagger的依赖,在service_util中
public boolean removeHospitalSet(@PathVariable Long id){ //@PathVariable Long id 用来得到通过路径传入的值
boolean flag=hospitalSetService.removeById(id);
return flag;
}
}
9.测试
访问此路径:http://localhost:8201/admin/hosp/hospitalSet/findAll
问题:delete方式提交,并通过路径传id值 但由于浏览器无法直接使用delete方式访问
要在comment模块整合swagger,在common父模块的pom.xml中引入swagger的依赖,在service_util中



