文章目录

  • 1. 技术架构和流程
  • 2.数据库建模工具使用
  • 3.环境搭建
    • 3.1 项目结构
    • 3.2 maven项目搭建
      • 3.2.1 创建health_parent父工程
      • 3.2.2 创建health_common子工程
      • 3.2.3 创建health_pojo子工程
      • 3.2.4 创建health_mapper子工程
      • 3.2.5 创建health_interface子工程
      • 3.2.6 创建health_service子工程
      • 3.2.7 创建health_web子工程
      • 3.2.8 导入静态资源,工程安装到本地仓库,测试
  • 4.ElementUI
  • 5. 基础数据准备
  • 6.页面布局分析
  • 7.checkitem.html
  • 8.CheckItemController.java
  • 9.CheckItemServiceImpl.java
  • 10.CheckItemMapper.java
  • 11.CheckItemMapper.xml

1. 技术架构和流程

定义-开发-维护阶段

如下后台管理系统给管理人员,微信端给患者。

2.数据库建模工具使用

File-New

3.环境搭建

3.1 项目结构


health_parent: 父工程,打包方式为pom,统一锁定依赖的版本,同时聚合其他子模块便于统一执行maven命令
health_common: 通用模块,打包方式为jar,存放项目中使用到的一些工具类和常量类
health_pojo: 打包方式为jar,存放实体类和返回结果类等
health_mapper: 持久层模块,打包方式为jar,存放mapper接口和Mapper映射文件等
health_interface: 打包方式为jar,存放服务接口
如下两个war包:
health_service: Dubbo服务模块,打包方式为war,存放服务实现类,作为服务提供方,需要部署到tomcat运行,服务生产者
health_web: 打包方式为war,作为Dubbo服务消费方,存放Controller、HTML页面、js、css、spring配置文件等,需要部署到tomcat运行

3.2 maven项目搭建




3.2.1 创建health_parent父工程

创建health_parent,父工程,打包方式为pom,用于统一管理依赖版本。

//pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.itheima.health</groupId><artifactId>health_parent</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><!-- 集中定义依赖版本号 --><properties><junit.version>4.12</junit.version><spring.version>5.0.6.RELEASE</spring.version><pagehelper.version>5.1.6</pagehelper.version><mapper.version>4.1.2</mapper.version><servlet-api.version>2.5</servlet-api.version><dubbo.version>2.6.0</dubbo.version><zookeeper.version>3.4.7</zookeeper.version><zkclient.version>0.1</zkclient.version><mybatis.version>3.4.6</mybatis.version><mybatis.spring.version>1.3.1</mybatis.spring.version><mybatis.paginator.version>1.2.15</mybatis.paginator.version><mysql.version>5.1.32</mysql.version><druid.version>1.0.9</druid.version><commons-fileupload.version>1.3.1</commons-fileupload.version><spring.security.version>5.0.6.RELEASE</spring.security.version><poi.version>3.14</poi.version><jedis.version>2.9.0</jedis.version><quartz.version>2.2.1</quartz.version></properties><!-- 依赖管理标签  必须加 --><dependencyManagement><dependencies><!-- Spring --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jms</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version></dependency><!-- dubbo相关 --><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>${dubbo.version}</version></dependency><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>${zookeeper.version}</version></dependency><dependency><groupId>com.github.sgroschupf</groupId><artifactId>zkclient</artifactId><version>${zkclient.version}</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version></dependency><dependency><groupId>javassist</groupId><artifactId>javassist</artifactId><version>3.12.1.GA</version></dependency><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.10</version></dependency><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>${pagehelper.version}</version></dependency><dependency><groupId>tk.mybatis</groupId><artifactId>mapper</artifactId><version>${mapper.version}</version></dependency><!-- Mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>${mybatis.version}</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>${mybatis.spring.version}</version></dependency><dependency><groupId>com.github.miemiedev</groupId><artifactId>mybatis-paginator</artifactId><version>${mybatis.paginator.version}</version></dependency><!-- MySql --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><!-- 连接池 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>${druid.version}</version></dependency><!-- 文件上传组件 --><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>${commons-fileupload.version}</version></dependency><dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>${quartz.version}</version></dependency><dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz-jobs</artifactId><version>${quartz.version}</version></dependency><!--跨服务器文件上传依赖--><dependency><groupId>com.sun.jersey</groupId><artifactId>jersey-client</artifactId><version>1.18.1</version></dependency><!--POI报表--><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>${poi.version}</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>${poi.version}</version></dependency><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>${jedis.version}</version></dependency><!-- 安全框架 --><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-web</artifactId><version>${spring.security.version}</version></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-config</artifactId><version>${spring.security.version}</version></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-taglibs</artifactId><version>${spring.security.version}</version></dependency><dependency><groupId>com.github.penggle</groupId><artifactId>kaptcha</artifactId><version>2.3.2</version><exclusions><exclusion><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId></exclusion></exclusions></dependency><dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId><version>1.6.1</version></dependency><dependency><groupId>xml-apis</groupId><artifactId>xml-apis</artifactId><version>1.4.01</version></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>${servlet-api.version}</version><scope>provided</scope></dependency></dependencies><build><plugins><!-- java编译插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.2</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin></plugins><pluginManagement><plugins><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><configuration><!-- 指定端口 --><port>82</port><!-- 请求路径 --><path>/</path><!--get请求乱码过滤--><uriEncoding>utf-8</uriEncoding></configuration></plugin></plugins></pluginManagement></build>
</project>

3.2.2 创建health_common子工程



//pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>health_parent</artifactId><groupId>com.itheima.health</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>health_common</artifactId><dependencies><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId></dependency><dependency><groupId>tk.mybatis</groupId><artifactId>mapper</artifactId></dependency><!-- Mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId></dependency><!-- MySql --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!-- 连接池 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId></dependency><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId></dependency><!-- Spring --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jms</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId></dependency><!-- dubbo相关 --><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId></dependency><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId></dependency><dependency><groupId>com.github.sgroschupf</groupId><artifactId>zkclient</artifactId></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId></dependency><dependency><groupId>javassist</groupId><artifactId>javassist</artifactId></dependency><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-web</artifactId></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-config</artifactId></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-taglibs</artifactId></dependency></dependencies>
</project>

3.2.3 创建health_pojo子工程

//pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>health_parent</artifactId><groupId>com.itheima.health</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>health_pojo</artifactId><packaging>jar</packaging><dependencies><dependency><groupId>com.itheima.health</groupId><artifactId>health_common</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies>
</project>

3.2.4 创建health_mapper子工程

//pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>health_parent</artifactId><groupId>com.itheima.health</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>health_mapper</artifactId><dependencies><dependency><groupId>com.itheima.health</groupId><artifactId>health_pojo</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies>
</project>
//log4j.properties
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=f:\\mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n### set log levels - for more verbose logging change 'info' to 'debug' ###log4j.rootLogger=debug, stdout
//mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--驼峰命名规则--><settings><setting name="mapUnderscoreToCamelCase" value="true"/></settings><plugins><!-- 配置分页插件 --><plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin></plugins>
</configuration>
//XxxMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.mybatis.example.BlogMapper">
</mapper>
//applicationContext-mybatis.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><!--加载外部资源文件--><context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder><!--装配数据源--><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="${jdbc.driverClassName}"></property><property name="url" value="${jdbc.url}"></property><property name="username" value="${jdbc.username}"></property><property name="password" value="${jdbc.password}"></property></bean><!--装配工厂--><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!--配置全局配置文件--><property name="configLocation" value="classpath:mybatis-config.xml"></property><!--配置数据源--><property name="dataSource" ref="dataSource"></property><!--配置别名--><property name="typeAliasesPackage" value="com.itheima.pojo"></property><!--映射文件--><property name="mapperLocations" value="classpath:mappers/**/*.xml"></property></bean><!--装配mapper--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.itheima.mapper"></property></bean>
</beans>
//jdbc.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/heima74_health
jdbc.username=root
jdbc.password=root

3.2.5 创建health_interface子工程

//pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>health_parent</artifactId><groupId>com.itheima.health</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>health_interface</artifactId><dependencies><dependency><groupId>com.itheima.health</groupId><artifactId>health_pojo</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies>
</project>

3.2.6 创建health_service子工程

//pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>health_parent</artifactId><groupId>com.itheima.health</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>health_service</artifactId><packaging>war</packaging><dependencies><dependency><groupId>com.itheima.health</groupId><artifactId>health_interface</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>com.itheima.health</groupId><artifactId>health_mapper</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><configuration><!--配置端口号--><port>81</port><!--省略项目名称--><path>/</path><!--get请求乱码过滤--><uriEncoding>utf-8</uriEncoding></configuration></plugin></plugins></build>
//applicationContext-tx.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"><!--使用xml配置事务步骤:1、装配事务管理器:注入数据源2、配置事务策略:配置事务的隔离级别、是否只读、传播行为等等3、配置aop:将事务应用到切入点--><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property></bean><tx:advice id="txAdvice"><tx:attributes><tx:method name="*"/></tx:attributes></tx:advice><!--注意: 此处必须加入proxy-target-class="true",需要进行事务控制,会由Spring框架产生代理对象,Dubbo需要将Service发布为服务,要求必须使用cglib创建代理对象。--><aop:config proxy-target-class="true"><aop:pointcut id="pt1" expression="execution(* com.itheima.service.impl.*.*(..))"></aop:pointcut><aop:advisor advice-ref="txAdvice" pointcut-ref="pt1"></aop:advisor></aop:config></beans>
//applicationContext-service.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://code.alibabatech.com/schema/dubbohttp://code.alibabatech.com/schema/dubbo/dubbo.xsd"><!--配置协议和服务端口,端口号如果不指定默认为20880--><dubbo:protocol name="dubbo" port="20881"></dubbo:protocol><!--配置服务名称--><dubbo:application name="health-service"></dubbo:application><!--配置注册中心地址--><dubbo:registry address="zookeeper://127.0.0.1:2181"></dubbo:registry><!--配置注解扫描服务--><dubbo:annotation package="com.itheima.service"></dubbo:annotation>
</beans>
//web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"version="3.0"><!-- 加载spring容器 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath*:applicationContext*.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener></web-app>

3.2.7 创建health_web子工程

//pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>health_parent</artifactId><groupId>com.itheima.health</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>health_web</artifactId><packaging>war</packaging><dependencies><dependency><groupId>com.itheima.health</groupId><artifactId>health_interface</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><configuration><!-- 指定端口 --><port>82</port><!-- 请求路径 --><path>/</path><!--get请求乱码过滤--><uriEncoding>utf-8</uriEncoding></configuration></plugin></plugins></build></project>
//springmvc-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"><mvc:annotation-driven><!--将默认的jackson的消息转换器替换为FastJson的消息转换器--><mvc:message-converters><bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"><!--设置支持的多媒体类型:处理json数据--><property name="supportedMediaTypes" value="application/json"/><!--设置fastJson的其他配置--><property name="fastJsonConfig" ref="fastJsonConfig"></property></bean></mvc:message-converters></mvc:annotation-driven><bean id="fastJsonConfig" class="com.alibaba.fastjson.support.config.FastJsonConfig"><property name="serializerFeatures"><array><!--响应json时,如果某个字段为null继续输出,默认为false--><value>WriteMapNullValue</value><!--设置使用文本方式输出日期:yyyy-MM-dd,默认是long类型--><value>WriteDateUseDateFormat</value></array></property></bean><dubbo:application name="health-web"></dubbo:application><dubbo:registry address="zookeeper://127.0.0.1:2181"></dubbo:registry><dubbo:annotation package="com.itheima"></dubbo:annotation><!--超时全局设置 10分钟check=false 不检查服务提供方,开发阶段建议设置为falsecheck=true 启动时检查服务提供方,如果服务提供方没有启动则报错--><dubbo:consumer timeout="600000" check="false"></dubbo:consumer></beans>
//web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"version="3.0"><!-- 解决post乱码 --><filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param></filter><filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 指定加载的配置文件 ,通过参数contextConfigLocation加载 --><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc-servlet.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet>    <servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping></web-app>

3.2.8 导入静态资源,工程安装到本地仓库,测试


选中health_parent工程执行install,将所有工程安装到本地仓库。

启动health_web工程,访问:http://localhost:82/pages/main.html。

4.ElementUI

http://element-cn.eleme.io/#/zh-CN

//index.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="elementui/vue.js"></script><script src="elementui/index.js"></script><link rel="stylesheet" href="elementui/index.css">
</head><!--11111111111111111111111111111111111111111111111111111111111111111-->
<body><div id="app"><el-container><el-header><el-dropdown><span class="el-dropdown-link">lisi<i class="el-icon-arrow-down el-icon--right"></i></span><el-dropdown-menu slot="dropdown"><el-dropdown-item>修改密码</el-dropdown-item><el-dropdown-item>退出</el-dropdown-item></el-dropdown-menu></el-dropdown></el-header><el-container><el-aside><el-menu><el-submenu index="1"><template slot="title"><i class="el-icon-location"></i><span>导航一</span></template><el-menu-item-group><el-menu-item index="1-1"><a href="table.html" target="content">table</a></el-menu-item><el-menu-item index="1-2">选项2</el-menu-item></el-menu-item-group></el-submenu><el-submenu index="2"><template slot="title"><i class="el-icon-location"></i><span>导航二</span></template><el-menu-item-group><el-menu-item index="2-1">选项1</el-menu-item><el-menu-item index="2-2">选项2</el-menu-item></el-menu-item-group></el-submenu></el-menu></el-aside><el-main><iframe name="content" width="100%" height="100%"></iframe></el-main></el-container>            </el-container></div><style>.el-header, .el-footer {background-color: #B3C0D1;color: #333;text-align: right;line-height: 60px;}.el-aside {background-color: #D3DCE6;color: #333;text-align: center;line-height: 200px;}.el-main {background-color: #E9EEF3;color: #333;text-align: center;line-height: 160px;}body > .el-container {margin-bottom: 40px;}.el-container:nth-child(5) .el-aside,.el-container:nth-child(6) .el-aside {line-height: 260px;}.el-container:nth-child(7) .el-aside {line-height: 320px;}</style>
</body><!--111111111111111111111111111111111111111111111111111111111111111111111--><script>new Vue({el:"#app",data:{arr:[100, 200, 300, 400,500],currentPage4:1,tableData: [{date: '2016-05-02',name: '王小虎',province: '上海',city: '普陀区',address: '上海市普陀区金沙江路 1518 弄',zip: 200333}, {date: '2016-05-04',name: '王小虎',province: '上海',city: '普陀区',address: '上海市普陀区金沙江路 1517 弄',zip: 200333}, {date: '2016-05-01',name: '王小虎',province: '上海',city: '普陀区',address: '上海市普陀区金沙江路 1519 弄',zip: 200333}, {date: '2016-05-03',name: '王小虎',province: '上海',city: '普陀区',address: '上海市普陀区金沙江路 1516 弄',zip: 200333}]},methods:{handleClick(row){console.log(row)},deleteById(){alert(111)},handleSizeChange(val) {console.log(val);},handleCurrentChange(val) {console.log(val);}}})</script>
</html>
//table.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="elementui/vue.js"></script><script src="elementui/index.js"></script><link rel="stylesheet" href="elementui/index.css">
</head>
<body><div id="app"><el-table:data="tableData"borderstyle="width: 100%"><el-table-columnfixedprop="date"label="日期"width="150"></el-table-column><el-table-columnprop="name"label="姓名"width="120"></el-table-column><el-table-columnprop="province"label="省份"width="120"></el-table-column><el-table-columnprop="city"label="市区"width="120"></el-table-column><el-table-columnprop="address"label="地址"width="300"></el-table-column><el-table-columnprop="zip"label="邮编"width="120"></el-table-column><el-table-columnfixed="right"label="操作"width="100"><template slot-scope="scope"><el-button @click="handleClick(scope.row)" type="text" size="small">查看</el-button><el-button type="text" size="small" @click="deleteById()">删除</el-button></template></el-table-column></el-table><el-pagination@size-change="handleSizeChange"@current-change="handleCurrentChange":current-page="currentPage4":page-sizes="arr":page-size="100"layout="total, sizes, prev, pager, next, jumper":total="400"></el-pagination></div>
</body><script>new Vue({el:"#app",data:{arr:[100, 200, 300, 400,500],currentPage4:1,tableData: [{date: '2016-05-02',name: '王小虎',province: '上海',city: '普陀区',address: '上海市普陀区金沙江路 1518 弄',zip: 200333}, {date: '2016-05-04',name: '王小虎',province: '上海',city: '普陀区',address: '上海市普陀区金沙江路 1517 弄',zip: 200333}, {date: '2016-05-01',name: '王小虎',province: '上海',city: '普陀区',address: '上海市普陀区金沙江路 1519 弄',zip: 200333}, {date: '2016-05-03',name: '王小虎',province: '上海',city: '普陀区',address: '上海市普陀区金沙江路 1516 弄',zip: 200333}]},methods:{handleClick(row){console.log(row)},deleteById(){this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', {confirmButtonText: '确定',cancelButtonText: '取消',type: 'warning'}).then(() => {/*this.$message({type: 'success',message: '删除成功!'});*/alert("点击了确定")}).catch(() => {/* this.$message({type: 'info',message: '已取消删除'});*/alert("取消")});},handleSizeChange(val) {console.log(val);},handleCurrentChange(val) {console.log(val);}}})</script>
</html>

5. 基础数据准备

检查项和检查组之间的关系:多对多
体检套餐和检查组之间的关系:多对多

//Result.java
package com.itheima.entity;
import java.io.Serializable;
/*** 封装返回结果*/
public class Result implements Serializable{private boolean flag;//执行结果,true为执行成功 false为执行失败private String message;//返回结果信息private Object data;//返回数据public Result(boolean flag, String message) {super();this.flag = flag;this.message = message;}public Result(boolean flag, String message, Object data) {this.flag = flag;this.message = message;this.data = data;}public boolean isFlag() {return flag;}public void setFlag(boolean flag) {this.flag = flag;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public Object getData() {return data;}public void setData(Object data) {this.data = data;}
}
<!DOCTYPE html>
<html>
<head><!-- 页面meta --><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><title>传智健康</title><meta name="description" content="传智健康"><meta name="keywords" content="传智健康"><meta content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no" name="viewport"><!-- 引入样式 --><link rel="stylesheet" href="../plugins/elementui/index.css"><link rel="stylesheet" href="../plugins/font-awesome/css/font-awesome.min.css"><link rel="stylesheet" href="../css/style.css"><style type="text/css">.el-main{position: absolute;top: 70px;bottom: 0px;left: 200px;right: 10px;padding: 0;}</style>
</head>
<body class="hold-transition skin-purple sidebar-mini"><div id="app"><el-container><el-header  class="main-header" style="height:70px;"><nav class="navbar navbar-static-top" :class=''><!-- Logo --><a href="#" class="logo" style="text-align:center"><span class="logo-lg"><img src="../img/logo.png"></span></a><div class="right-menu"><span class="help"><i class="fa fa-exclamation-circle" aria-hidden="true"></i>帮助</span><el-dropdown class="avatar-container right-menu-item" trigger="click"><div class="avatar-wrapper"><img src="../img/user2-160x160.jpg" class="user-avatar">{{username}}</div><el-dropdown-menu slot="dropdown"><el-dropdown-item divided><span style="display:block;">修改密码</span></el-dropdown-item><el-dropdown-item divided><span style="display:block;"><a href="/logout.do">退出</a></span></el-dropdown-item></el-dropdown-menu></el-dropdown></div></nav></el-header><el-container><el-aside width="200px"><el-menu><el-submenu v-for="menu in menuList" :index="menu.path"><template slot="title"><i class="fa" :class="menu.icon"></i>{{menu.title}}</template><template v-for="child in menu.children"><el-menu-item :index="child.path"><a :href="child.linkUrl" target="right">{{child.title}}</a></el-menu-item></template></el-submenu></el-menu></el-aside><el-container><iframe name="right" class="el-main" src="checkitem.html" width="100%" height="580px" frameborder="0"></iframe></el-container></el-container></el-container></div>
</body>
<!-- 引入组件库 -->
<script src="../js/vue.js"></script>
<script src="../plugins/elementui/index.js"></script>
<script type="text/javascript" src="../js/jquery.min.js"></script>
<script src="../js/axios-0.18.0.js"></script>
<script>new Vue({el: '#app',data:{username:null,menuList:[{"path": "1","title": "工作台","icon":"fa-dashboard","children": []},{"path": "2","title": "会员管理","icon":"fa-user-md","children": [{"path": "/2-1","title": "会员档案","linkUrl":"member.html","children":[]},{"path": "/2-2","title": "体检上传","children":[]},{"path": "/2-3","title": "会员统计","linkUrl":"all-item-list.html","children":[]},]},{"path": "3","title": "预约管理","icon":"fa-tty","children": [{"path": "/3-1","title": "预约列表","linkUrl":"ordersettinglist.html","children":[]},{"path": "/3-2","title": "预约设置","linkUrl":"ordersetting.html","children":[]},{"path": "/3-3","title": "套餐管理","linkUrl":"setmeal.html","children":[]},{"path": "/3-4","title": "检查组管理","linkUrl":"checkgroup.html","children":[]},{"path": "/3-5","title": "检查项管理","linkUrl":"checkitem.html","children":[]},]},{"path": "4","title": "健康评估","icon":"fa-stethoscope","children":[{"path": "/4-1","title": "中医体质辨识","linkUrl":"all-medical-list.html","children":[]},]},{"path": "5",     //菜单项所对应的路由路径"title": "统计分析",     //菜单项名称"icon":"fa-heartbeat","children":[//是否有子菜单,若没有,则为[]{"path": "/5-1","title": "会员数量统计","linkUrl":"report_member.html","children":[]},{"path": "/5-2","title": "预约套餐占比统计","linkUrl":"report_setmeal.html","children":[]},{"path": "/5-3","title": "运营数据统计","linkUrl":"report_business.html","children":[]}]}]},created(){axios.post("/user/getUsername.do").then((res)=>{if (res.data.flag){this.username = res.data.data;} else{this.$messsage.error(res.data.message);}})}});$(function() {var wd = 200;$(".el-main").css('width', $('body').width() - wd + 'px');});</script>
</html>

6.页面布局分析

请求怎么发,有什么响应数据,请求url有了,可以写controller方法,再service层,再mapper数据库。
分页查询有三个参数:当前页的页码,页面大小pagesize(每页显示多少条记录),条件查询的条件要获取到。

上面的这三个参数怎么传?定义了一个map格式json数据,这三个key是QueryPageBean.java中三个属性名称一样。所以把这json数据提交时,首先后端接json数据,request body接json数据,接收完后自动封装到QueryPageBean对象中。

查询的分页数据都是封装在PageResult中,总记录数,每页数据封装到PageResult中,再把PageResult封装到Result.java的data属性中。

7.checkitem.html

<!DOCTYPE html>
<html><head><!-- 页面meta --><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><title>传智健康</title><meta name="description" content="传智健康"><meta name="keywords" content="传智健康"><meta content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no" name="viewport"><!-- 引入样式 --><link rel="stylesheet" href="../plugins/elementui/index.css"><link rel="stylesheet" href="../plugins/font-awesome/css/font-awesome.min.css"><link rel="stylesheet" href="../css/style.css"></head><!--1111111111111111111111111111111111111111111111111111111111111111111111111111111--><body class="hold-transition"><div id="app"><div class="content-header"><h1>预约管理<small>检查项管理</small></h1><el-breadcrumb separator-class="el-icon-arrow-right" class="breadcrumb"><el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item><el-breadcrumb-item>预约管理</el-breadcrumb-item><el-breadcrumb-item>检查项管理</el-breadcrumb-item></el-breadcrumb></div><div class="app-container"><div class="box"><div class="filter-container"><el-input placeholder="项目编码/项目名称" v-model="pagination.queryString" style="width: 200px;" class="filter-item"></el-input><el-button @click="findPageByCondition()" class="dalfBut">查询</el-button><el-button type="primary" class="butT" @click="handleCreate()">新建</el-button></div><el-table size="small" current-row-key="id" :data="dataList" stripe highlight-current-row><el-table-column type="index" align="center" label="序号"></el-table-column><el-table-column prop="code" label="项目编码" align="center"></el-table-column><el-table-column prop="name" label="项目名称" align="center"></el-table-column><el-table-column label="适用性别" align="center"><template slot-scope="scope"><span>{{ scope.row.sex == '0' ? '不限' : scope.row.sex == '1' ? '男' : '女'}}</span></template></el-table-column><el-table-column prop="age" label="适用年龄" align="center"></el-table-column><el-table-column prop="remark" label="项目说明" align="center"></el-table-column><el-table-column label="操作" align="center"><template slot-scope="scope"><el-button type="primary" size="mini" @click="handleUpdate(scope.row)">编辑</el-button><el-button size="mini" type="danger" @click="handleDelete(scope.row)">删除</el-button></template></el-table-column></el-table><div class="pagination-container"><el-paginationclass="pagiantion"@current-change="handleCurrentChange":current-page="pagination.currentPage":page-size="pagination.pageSize"layout="total, prev, pager, next, jumper":total="pagination.total"></el-pagination></div><!-- 新增标签弹层 --><div class="add-form"><el-dialog title="新增检查项" :visible.sync="dialogFormVisible"><el-form ref="dataAddForm" :model="formData" :rules="rules" label-position="right" label-width="100px"><el-row><el-col :span="12"><el-form-item label="项目编码" prop="code"><el-input v-model="formData.code"/></el-form-item></el-col><el-col :span="12"><el-form-item label="项目名称" prop="name"><el-input v-model="formData.name"/></el-form-item></el-col></el-row><el-row><el-col :span="12"><el-form-item label="性别"><el-select v-model="formData.sex"><el-option label="不限" value="0"></el-option><el-option label="" value="1"></el-option><el-option label="" value="2"></el-option></el-select></el-form-item></el-col><el-col :span="12"><el-form-item label="适用年龄"><el-input v-model="formData.age"/></el-form-item></el-col></el-row><el-row><el-col :span="12"><el-form-item label="类型"><el-select v-model="formData.type"><el-option label="检查" value="1"></el-option><el-option label="检验" value="2"></el-option></el-select></el-form-item></el-col><el-col :span="12"><el-form-item label="价格"><el-input v-model="formData.price"/></el-form-item></el-col></el-row><el-row><el-col :span="24"><el-form-item label="项目说明"><el-input v-model="formData.remark" type="textarea"></el-input></el-form-item></el-col></el-row><el-row><el-col :span="24"><el-form-item label="注意事项"><el-input v-model="formData.attention" type="textarea"></el-input></el-form-item></el-col></el-row></el-form><div slot="footer" class="dialog-footer"><el-button @click="dialogFormVisible = false">取消</el-button><el-button type="primary" @click="handleAdd()">确定</el-button></div></el-dialog></div><!-- 编辑标签弹层 --><div class="add-form"><el-dialog title="编辑检查项" :visible.sync="dialogFormVisible4Edit"><el-form ref="dataEditForm" :model="formData" :rules="rules" label-position="right" label-width="100px"><el-row><el-col :span="12"><el-form-item label="项目编码" prop="code"><el-input v-model="formData.code"/></el-form-item></el-col><el-col :span="12"><el-form-item label="项目名称" prop="name"><el-input v-model="formData.name"/></el-form-item></el-col></el-row><el-row><el-col :span="12"><el-form-item label="性别"><el-select v-model="formData.sex"><el-option label="不限" value="0"></el-option><el-option label="" value="1"></el-option><el-option label="" value="2"></el-option></el-select></el-form-item></el-col><el-col :span="12"><el-form-item label="适用年龄"><el-input v-model="formData.age"/></el-form-item></el-col></el-row><el-row><el-col :span="12"><el-form-item label="类型"><el-select v-model="formData.type"><el-option label="检查" value="1"></el-option><el-option label="检验" value="2"></el-option></el-select></el-form-item></el-col><el-col :span="12"><el-form-item label="价格"><el-input v-model="formData.price"/></el-form-item></el-col></el-row><el-row><el-col :span="24"><el-form-item label="项目说明"><el-input v-model="formData.remark" type="textarea"></el-input></el-form-item></el-col></el-row><el-row><el-col :span="24"><el-form-item label="注意事项"><el-input v-model="formData.attention" type="textarea"></el-input></el-form-item></el-col></el-row></el-form><div slot="footer" class="dialog-footer"><el-button @click="dialogFormVisible4Edit = false">取消</el-button><el-button type="primary" @click="handleEdit()">确定</el-button></div></el-dialog></div></div></div></div></body><!--1111111111111111111111111111111111111111111111111111111111111111111111111111111--><!-- 引入组件库 --><script src="../js/vue.js"></script><script src="../plugins/elementui/index.js"></script><script type="text/javascript" src="../js/jquery.min.js"></script><script src="../js/axios-0.18.0.js"></script><script>var vue = new Vue({el: '#app',data:{pagination: {//分页相关模型数据currentPage: 1,//当前页码pageSize:10,//每页显示的记录数total:0,//总记录数queryString:null//查询条件},dataList: [],//当前页要展示的分页列表数据formData: {},//表单数据dialogFormVisible: false,//增加表单是否可见dialogFormVisible4Edit:false,//编辑表单是否可见rules: {//校验规则code: [{ required: true, message: '项目编码为必填项', trigger: 'blur' },{ min: 2, max: 10, message: '长度在 2 到 10个字符', trigger: 'blur' }],name: [{ required: true, message: '项目名称为必填项', trigger: 'blur' },{ min: 2, max: 10, message: '长度在 2 到 10个字符', trigger: 'blur' }]}},//钩子函数,VUE对象初始化完成后自动执行created() {this.findPage();},methods: {findPageByCondition(){this.pagination.currentPage = 1;this.findPage();},//编辑handleEdit() {//表单校验this.$refs["dataEditForm"].validate((valid)=>{if (valid){//校验成功,发送urlaxios.post("/checkitem/edit.do",this.formData).then((res)=>{//关闭编辑窗口this.dialogFormVisible4Edit = false;if (res.data.flag){this.$message.success(res.data.message);this.findPage();}else{this.$message.error(res.data.message);}})} else{this.$message.error("表单校验失败,请重新输入!")}})},//添加handleAdd () {//进行表单校验this.$refs["dataAddForm"].validate((valid)=> {if (valid){//发送请求axios.post("/checkitem/add.do",this.formData).then((res)=>{//关闭窗口this.dialogFormVisible = false;if (res.data.flag){//提示新增成功this.$message.success(res.data.message);//重新查询数据this.findPage();} else{//提示新增失败this.$message.error(res.data.message);}})} else{//提示错误信息this.$message.error("表单校验失败,请重新输入!")}})},//分页查询findPage() {//定义分页查询的参数var param = {currentPage:this.pagination.currentPage,pageSize:this.pagination.pageSize,queryString:this.pagination.queryString}//发送请求axios.post("/checkitem/findPage.do",param).then((res)=>{if (res.data.flag){//显示数据this.dataList = res.data.data.rows;this.pagination.total = res.data.data.total;} else{//提示错误信息this.$message.error(res.data.message);}})},// 重置表单resetForm() {//清空表单this.formData={};},// 弹出添加窗口handleCreate() {//显示新增窗口this.dialogFormVisible = true;//重置表单this.resetForm();//重置校验输入框this.$refs["dataAddForm"].clearValidate();},// 弹出编辑窗口handleUpdate(row) {this.dialogFormVisible4Edit = true;//发送url,通过id查询/* axios.post("/checkitem/findById.do?id="+row.id).then((res)=>{if (res.data.flag){this.$message.success(res.data.message);//将查询出来的数据绑定到数据模型this.formData = res.data.data;} else{this.$message.error(res.data.message);}});*///this.formData = row;this.formData = JSON.parse(JSON.stringify(row))},//切换页码handleCurrentChange(currentPage) {this.pagination.currentPage = currentPage;this.findPage();},// 删除handleDelete(row) {this.$confirm('是否确定删除该检查项?', '提示', {confirmButtonText: '确定',cancelButtonText: '取消',type: 'warning'}).then(() => {//发送urlaxios.post("/checkitem/deleteById.do?id="+row.id).then((res)=>{if (res.data.flag){//提示成功信息this.$message.success(res.data.message);this.pagination.currentPage = 1;//刷新页面,重新查询this.findPage();} else{//提示错误信息this.$message.error(res.data.message);}})}).catch(() => {this.$message({type: 'info',message: '已取消删除'});});}}})</script>
</html>

8.CheckItemController.java

package com.itheima.controller;
import com.alibaba.dubbo.config.annotation.Reference;
import com.itheima.constant.MessageConstant;
import com.itheima.entity.PageResult;
import com.itheima.entity.QueryPageBean;
import com.itheima.entity.Result;
import com.itheima.pojo.CheckItem;
import com.itheima.service.CheckItemService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.util.List;@RestController//默认将当前类中的所有的方法的返回值响应为json
@RequestMapping("checkitem")
public class CheckItemController {@Referenceprivate CheckItemService checkItemService;/*** 新增检查项* @param checkItem* @return*/@RequestMapping("add")public Result add(@RequestBody CheckItem checkItem){try {checkItemService.add(checkItem);return new Result(true, MessageConstant.ADD_CHECKITEM_SUCCESS);} catch (Exception e) {e.printStackTrace();return new Result(false, MessageConstant.ADD_CHECKITEM_FAIL);}}/*** 分页查询*/@RequestMapping("findPage")public Result findPage(@RequestBody QueryPageBean queryPageBean){try {PageResult pageResult =  checkItemService.findPage(queryPageBean.getCurrentPage(),queryPageBean.getPageSize(),queryPageBean.getQueryString());return new Result(true,MessageConstant.QUERY_CHECKITEM_SUCCESS,pageResult);} catch (Exception e) {e.printStackTrace();return new Result(false,MessageConstant.QUERY_CHECKITEM_FAIL);}}/*** 通过id删除检查项*/@RequestMapping("deleteById")public Result deleteById(@RequestParam("id")Integer id){try {checkItemService.deleteById(id);return new Result(true,MessageConstant.DELETE_CHECKITEM_SUCCESS);}catch (RuntimeException e) {e.printStackTrace();return new Result(false,e.getMessage());} catch (Exception e) {e.printStackTrace();return new Result(false,MessageConstant.DELETE_CHECKITEM_FAIL);}}/*** 通过id查询检查项*/@RequestMapping("findById")public Result findById(@RequestParam("id")Integer id){try {CheckItem checkItem = checkItemService.findById(id);return new Result(true,MessageConstant.QUERY_CHECKITEM_SUCCESS,checkItem);} catch (Exception e) {e.printStackTrace();return new Result(false,MessageConstant.QUERY_CHECKITEM_FAIL);}}/*** 编辑更新*/@RequestMapping("edit")public Result edit(@RequestBody CheckItem checkItem){try {checkItemService.edit(checkItem);return new Result(true,MessageConstant.EDIT_CHECKITEM_SUCCESS);} catch (Exception e) {e.printStackTrace();return new Result(false,MessageConstant.EDIT_CHECKITEM_FAIL);}}@RequestMapping("findAll")public Result findAll(){try {List<CheckItem> checkItemList= checkItemService.findAll();return new Result(true,MessageConstant.QUERY_CHECKITEM_SUCCESS,checkItemList);} catch (Exception e) {e.printStackTrace();return new Result(false,MessageConstant.QUERY_CHECKITEM_FAIL);}}@RequestMapping("findCheckItemIdsByCheckGroupId")public Result findCheckItemIdsByCheckGroupId(@RequestParam("id")Integer checkGroupId){try {List<Integer> checkItemIds = checkItemService.findCheckItemIdsByCheckGroupId(checkGroupId);return new Result(true,MessageConstant.QUERY_CHECKITEM_SUCCESS,checkItemIds);} catch (Exception e) {e.printStackTrace();return new Result(false,MessageConstant.QUERY_CHECKITEM_FAIL);}}
}

9.CheckItemServiceImpl.java

package com.itheima.service.impl;
import com.alibaba.dubbo.config.annotation.Service;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.itheima.constant.MessageConstant;
import com.itheima.entity.PageResult;
import com.itheima.mapper.CheckItemMapper;
import com.itheima.pojo.CheckItem;
import com.itheima.service.CheckItemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.parameters.P;
import java.util.List;@Service(interfaceClass = CheckItemService.class )
public class CheckItemServiceImpl implements CheckItemService {@Autowiredprivate CheckItemMapper checkItemMapper;@Overridepublic void add(CheckItem checkItem) {checkItemMapper.add(checkItem);}/*** 分页查询* @param currentPage* @param pageSize* @param queryString* @return*//* @Overridepublic PageResult findPage(Integer currentPage, Integer pageSize, String queryString) {//定义分页查询的其实索引号,limit x,y中的x的值int firstResult = (currentPage-1)*pageSize;//查询总记录数Long count = checkItemMapper.findCount(queryString);//查询分页数据集合List<CheckItem> checkItemList = checkItemMapper.findByCondition(firstResult,pageSize,queryString);//将数据封装到PageResultreturn new PageResult(count,checkItemList);}*/@Overridepublic PageResult findPage(Integer currentPage, Integer pageSize, String queryString) {PageHelper.startPage(currentPage,pageSize);//条件查询所有数据List<CheckItem> checkItemList = checkItemMapper.findByCondition(queryString);//交给PageInfo包装PageInfo pageInfo = new PageInfo(checkItemList);return new PageResult(pageInfo.getTotal(),pageInfo.getList());}/*** 通过id删除检查项* @param id*/@Overridepublic void deleteById(Integer id) {//查询当前检查项是否被引用了Integer count = checkItemMapper.findCountByCheckItemId(id);if (count>0){//抛出异常,提示错误信息throw new RuntimeException(MessageConstant.CHECKITEM_IS_QUOTED);}//通过id删除检查项checkItemMapper.deleteById(id);}/*** 通过id查询检查项* @param id* @return*/@Overridepublic CheckItem findById(Integer id) {return checkItemMapper.findById(id);}/*** 编辑更新检查项* @param checkItem*/@Overridepublic void edit(CheckItem checkItem) {checkItemMapper.edit(checkItem);}/*** 查询所有检查项* @return*/@Overridepublic List<CheckItem> findAll() {return checkItemMapper.findAll();}@Overridepublic List<Integer> findCheckItemIdsByCheckGroupId(Integer checkGroupId) {
//        int x = 1 / 0;return checkItemMapper.findCheckItemIdsByCheckGroupId(checkGroupId);}
}

10.CheckItemMapper.java

package com.itheima.mapper;
import com.itheima.pojo.CheckItem;
import org.apache.ibatis.annotations.Param;
import java.util.List;public interface CheckItemMapper {void add(CheckItem checkItem);List<CheckItem> findByCondition(@Param("queryString") String queryString);Integer findCountByCheckItemId(@Param("id")Integer id);void deleteById(@Param("id")Integer id);CheckItem findById(@Param("id")Integer id);void edit(CheckItem checkItem);List<CheckItem> findAll();List<Integer> findCheckItemIdsByCheckGroupId(@Param("checkGroupId")Integer checkGroupId);/**** 只要参数不是pojo\Map都使用@Param** @param queryString* @return*/
//    Long findCount(@Param("queryString") String queryString);//    List<CheckItem> findByCondition(@Param("firstResult")int firstResult, @Param("pageSize")Integer pageSize, @Param("queryString")String queryString);}

11.CheckItemMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itheima.mapper.CheckItemMapper"><insert id="add">insert into t_checkitem values(null,#{code},#{name},#{sex},#{age},#{price},#{type},#{attention},#{remark})</insert><!--条件查询总记录数--><!-- <select id="findCount" resultType="Long">select count(id) from t_checkitem<if test="queryString!=null and queryString.trim()!=''">where code = #{queryString} or name like "%" #{queryString} "%"</if></select>--><!--查询分页数据--><!--<select id="findByCondition" resultType="CheckItem">select * from t_checkitem<if test="queryString!=null and queryString.trim()!=''">where code = #{queryString} or name like "%" #{queryString} "%"</if>limit #{firstResult},#{pageSize}</select>--><select id="findByCondition" resultType="CheckItem">select * from t_checkitem<if test="queryString!=null and queryString.trim()!=''">where code = #{queryString} or name like "%" #{queryString} "%"</if></select><!--通过id统计当前检查项是否被引用过--><select id="findCountByCheckItemId" resultType="Integer">select count(checkitem_id) from t_checkgroup_checkitem where checkitem_id = #{id}</select><!--通过id删除检查项--><delete id="deleteById">delete from  t_checkitem where id = #{id}</delete><!--通过id查询检查项--><select id="findById" resultType="CheckItem">select * from t_checkitem where id = #{id}</select><!--编辑更新--><update id="edit">update t_checkitem<set><if test="code !=null">code = #{code},</if><if test="name !=null">name = #{name},</if><if test="sex !=null">sex = #{sex},</if><if test="age !=null">age = #{age},</if><if test="price !=null">price = #{price},</if><if test="type !=null">type = #{type},</if><if test="attention !=null">attention = #{attention},</if><if test="remark !=null">remark = #{remark}</if></set>where id = #{id}</update><!--查询所有检查项--><select id="findAll" resultType="CheckItem">select * from t_checkitem</select><select id="findCheckItemIdsByCheckGroupId" resultType="Integer">select checkitem_id from t_checkgroup_checkitem where checkgroup_id = #{checkGroupId}</select><select id="findCheckItemByCheckGroupId" resultType="CheckItem">select * from t_checkitem where id in (select checkitem_id from t_checkgroup_checkitem where checkgroup_id=#{checkGroupId})</select>
</mapper>

spring并不是很智能,告诉它怎么做才会做(每次告知代码都一样),如创建一个web项目,要配ssm的springmvc的,要配DispatcherServlet,要配Listen监听器,整合mybatis的话依赖整合包,所以每次操作基本样式一致,业务不一致【其实业务还好,业务有自己的特点:业务control调service,service调mapper,做结果返回】。

springBoot只需要引入一个依赖即springweb启动器就完了,0配置。但并不是所有东西都能做到这点,如数据库做不到这点,因为数据库各不相同。约定大于配置,除了mybatis外,我们彻底拒绝xml,全部换成注解配置。

【Java24】健康项目:环境搭建,预约管理(检查项和检查组管理)相关推荐

  1. 美多后台管理和项目环境搭建

    美多后台管理 Django框架已经提供了一个Admin管理后台,但是Admin的本身的页面可修改的页面布局效果比较少,无法满足公司定制页面需求,这时候就需要独立开发一套后台管理系统,满足公司对后台数据 ...

  2. 传智健康2.0-2-预约管理-检查项管理

    第2章 预约管理-检查项管理 1. 需求分析 传智健康管理系统是一款应用于健康管理机构的业务系统,实现健康管理机构工作内容可视化.患者管理专业化.健康评估数字化.健康干预流程化.知识库集成化,从而提高 ...

  3. django项目环境搭建

    项目环境搭建 在github上创建项目 官网: https://github.com/ 点击new 新建项目 公钥绑定 使用 git clone 项目到本地 一.在码云平台创建项目 版本控制的种类: ...

  4. 谷粒商城笔记+踩坑(1)——架构、项目环境搭建、代码生成器

     导航: 谷粒商城笔记+踩坑汇总篇_谷粒商城笔记踩坑6_vincewm的博客-CSDN博客 目录 1.项目介绍 1.1 微服务架构图 1.2. 微服务划分图 2.项目环境搭建 2.1. 虚拟机搭建环境 ...

  5. 企业实战(2) 项目环境搭建之Tomcat部署

    前言: Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选.对于一个初学者来说, ...

  6. Vue项目实战之人力资源平台系统(一)框架介绍及项目环境搭建

    前言 目录 前言 一.vue-element-admin简介 二.项目环境搭建 2.1 nodejs环境 2.2 git版本控制 2.3 vscode编辑器 三.拉取vue-element-admin ...

  7. 黑马学成在线--项目环境搭建

    完整版请移步至我的个人博客查看:https://cyborg2077.github.io/ 学成在线–项目环境搭建 学成在线–内容管理模块 学成在线–媒资管理模块 学成在线–课程发布模块 学成在线–认 ...

  8. Day133.尚品汇:项目介绍、Linux软件环境部署、项目环境搭建、表设计

    目录 一.电商项目介绍 二.Linux 软件环境部署 三.项目环境搭建 1.Maven 回顾 2.ElasticSearch 四.关于表设计 首页分类表 一.电商项目介绍 我们为什么要讲电商? 1. ...

  9. vue.js项目实战运用篇之抖音视频APP-第一节:项目环境搭建

    [温馨提示]:若想了解更多关于本次项目实战内容,可转至vue.js项目实战运用篇之抖音视频APP-项目规划中进一步了解项目规划. [项目地址] 项目采用Git进行管理,最终项目将会发布到GitHub中 ...

最新文章

  1. Linux(Nginx)+Java SpringBoot视频微服务搭建
  2. linux笔记第一章--基本命令记载
  3. Linux用系统命令杀死僵尸进程
  4. hibernate删除记录_Hibernate记录:常见问题的提示和解决方案
  5. z变换解差分方程例题_某些常见微分方程的一般解法(工具向)
  6. vue再次入手(数据传递①)
  7. php网站https怎么做301,php网站如何增加https安全访问
  8. IEumberable和IQueryable的区别
  9. hdu5358 ( First One )数学+思维
  10. 7-26 币值转换 (20 分)
  11. Pannellum:实例之为全景图添加标题和作者
  12. 视觉SLAM应用(一)------AR发展的理解
  13. 新版犀牛书该不该入手?
  14. 后台开发 vs App应用开发?
  15. 分布式 | dble 运维命令知多少
  16. 暴雪插件占用服务器,你还在用这款插件吗?暴雪公布《魔兽世界》怀旧服卡顿原因...
  17. 20175212童皓桢 《Java程序设计》第十周学习总结
  18. L - 芜湖塔台请求起飞
  19. 一个博士在华为的22年!
  20. 创业项目融资似乎很容易。而事实上,真正创业拿到融资的项目连1%都不到。

热门文章

  1. angular_ui-router ——依赖注入
  2. C#的类,构造函数以及Array阵列的数据填充与绑定
  3. PHP学习:文件操作
  4. pyqt5 实现右键自定义_《快速掌握PyQt5》第十七章 事件处理
  5. vuex刷新页面数据丢失怎么解决_你是否真正了解Vuex
  6. python字符编码使用_python – Numpy字符串编码
  7. N*N匹马,N个赛道,求出最快N匹马的解法
  8. ruby on rails 站点
  9. 关于ArcMap中的地图文档单位
  10. LeetCode 2 Keys Keyboard