目录
1、后台
1.1、导入pom依赖
1.2、web.xml
1.3、配置文件
springmvc-serlvet.xml
mybatis.cfg.xml
log4j2.xml
jdbc.properties
generatorConfig.xml
applicationContext-mybatis.xml
applicationCotext.xml
1.4、工具类
CorsFilter.java
JsonData.java
PageBean.java
ResponseUtil.java
StringUtil.java
1.5、数据库访问层、业务逻辑层、空之城
BookMapper.xml
BookMapper.java
BookBiz.java
BookImpl.java
BookController.java
2、前台
2.1、执行命令
2.2、main.js
2.3、连接后台
action.js
http.js
2.4、index.vue
3、运行效果
<?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>org.example</groupId> <artifactId>zsgc</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <name>zsgc Maven Webapp</name> <!-- FIXME change it to the project;s website --> <url>http://www.example.com</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.plugin.version>3.7.0</maven.compiler.plugin.version> <!--添加jar包依赖--> <!--1.spring 5.0.2.RELEASE相关--> <spring.version>5.0.2.RELEASE</spring.version> <!--2.mybatis相关--> <mybatis.version>3.4.5</mybatis.version> <!--mysql--> <mysql.version>5.1.44</mysql.version> <!--pagehelper分页jar依赖--> <pagehelper.version>5.1.2</pagehelper.version> <!--mybatis与spring集成jar依赖--> <mybatis.spring.version>1.3.1</mybatis.spring.version> <!--3.dbcp2连接池相关 druid--> <commons.dbcp2.version>2.1.1</commons.dbcp2.version> <commons.pool2.version>2.4.3</commons.pool2.version> <!--4.log日志相关--> <log4j2.version>2.9.1</log4j2.version> <!--5.其他--> <junit.version>4.12</junit.version> <servlet.version>4.0.0</servlet.version> <lombok.version>1.18.2</lombok.version> <ehcache.version>2.10.0</ehcache.version> <slf4j-api.version>1.7.7</slf4j-api.version> </properties> <dependencies> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-web</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.3.2</version> </dependency> <!--1.spring相关--> <dependency> <groupId>org.springFramework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</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-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <!--2.mybatis相关--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <!--mysql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <!--pagehelper分页插件jar包依赖--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>${pagehelper.version}</version> </dependency> <!--mybatis与spring集成jar包依赖--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>${mybatis.spring.version}</version> </dependency> <!--3.dbcp2连接池相关--> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-dbcp2</artifactId> <version>${commons.dbcp2.version}</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>${commons.pool2.version}</version> </dependency> <!--4.log日志相关依赖--> <!--核心log4j2jar包--> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>${log4j2.version}</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>${log4j2.version}</version> </dependency> <!--web工程需要包含log4j-web;非web工程不需要--> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-web</artifactId> <version>${log4j2.version}</version> </dependency> <!--5.其他--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>${servlet.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <!-- jsp依赖--> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> <version>2.3.3</version> </dependency> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.3</version> </dependency> <!-- 做服务端参数校验 JSR303 的jar包依赖--> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>6.0.7.Final</version> </dependency> <!--用来支持SpringMvc支持json数据转换--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.9.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.9.3</version> </dependency> <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache</artifactId> <version>${ehcache.version}</version> </dependency> <!-- slf4j核心包 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j-api.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>${slf4j-api.version}</version> <scope>runtime</scope> </dependency> <!--用于与slf4j保持桥接 --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>${log4j2.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.0.2.RELEASE</version> <scope>compile</scope> </dependency> </dependencies> <build> <finalName>zsgc</finalName> <resources> <!--解决mybatis-generator-maven-plugin运行时没有将XxxMapper.xml文件放入target文件夹的问题--> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> <!--解决mybatis-generator-maven-plugin运行时没有将jdbc.properites文件放入target文件夹的问题--> <resource> <directory>src/main/resources</directory> <includes> <include>jdbc.properties</include> <include>*.xml</include> </includes> </resource> </resources> <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>${maven.compiler.plugin.version}</version> <configuration> <source>${maven.compiler.source}</source> <target>${maven.compiler.target}</target> <encoding>${project.build.sourceEncoding}</encoding> </configuration> </plugin> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.2</version> <dependencies> <!--使用Mybatis-generator插件不能使用太高版本的mysql驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> </dependencies> <configuration> <overwrite>true</overwrite> </configuration> </plugin> <plugin> <artifactId>maven-clean-plugin</artifactId> <version>3.1.0</version> </plugin> <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>3.0.2</version> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.1</version> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.2</version> </plugin> <plugin> <artifactId>maven-install-plugin</artifactId> <version>2.5.2</version> </plugin> <plugin> <artifactId>maven-deploy-plugin</artifactId> <version>2.8.2</version> </plugin> </plugins> </pluginManagement> </build> </project>
1.2、web.xml
<web-app xmlns=;http://xmlns.jcp.org/xml/ns/javaee;
xmlns:xsi=;http://www.w3.org/2001/XMLSchema-instance; xsi:schemaLocation=;http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd; version=;3.1;> <display-name>Archetype Created Web Application</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <!-- 读取Spring上下文的监听器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- Spring MVC servlet --> <servlet> <servlet-name>SpringMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!--此参数可以不配置;默认值为;/WEB-INF/springmvc-servlet.xml--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/springmvc-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> <!--web.xml 3.0的新特性;是否支持异步--> <async-supported>true</async-supported> </servlet> <servlet-mapping> <servlet-name>SpringMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- 解决cors跨域问题过滤器 --> <filter> <filter-name>corsFilter</filter-name> <filter-class>com.ssr.util.CorsFilter</filter-class> </filter> <filter-mapping> <filter-name>corsFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter> <filter-name>encodingFilter</filter-name> <filter-class> org.springframework.web.filter.CharacterEncodingFilter </filter-class> <async-supported>true</async-supported> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
1.3、配置文件
mybatis.cfg.xml
<?xml version=;1.0; encoding=;UTF-8;?>
<configuration> <!-- 引入外部配置文件 --> <properties resource=;jdbc.properties;/> <settings> <setting name=;logImpl; value=;LOG4J2;/> </settings> <!-- 别名 --> <typeAliases> <!--<typeAlias type=;com.javaxl.model.Book; alias=;Book;/>--> </typeAliases> <!-- 配置mybatis运行环境 --> <environments default=;development;> <environment id=;development;> <!-- type=;JDBC; 代表使用JDBC的提交和回滚来管理事务 --> <transactionManager type=;jdbc;/> <!-- mybatis提供了3种数据源类型;分别是;POOLED,UNPOOLED,JNDI --> <!-- POOLED 表示支持JDBC数据源连接池 --> <!-- UNPOOLED 表示不支持数据源连接池 --> <!-- JNDI 表示支持外部数据源连接池 --> <dataSource type=;POOLED;> <property name=;driver; value=;${jdbc.driver};/> <property name=;url; value=;${jdbc.url};/> <property name=;username; value=;${jdbc.username};/> <property name=;password; value=;${jdbc.password};/> </dataSource> </environment> </environments> <mappers> <mapper resource=;com/ssr/mapper/BookMapper.xml;/> </mappers> </configuration>
log4j2.xml
<?xml version=;1.0; encoding=;UTF-8;?>
<!-- status : 指定log4j本身的打印日志的级别.ALL< Trace < DEBUG < INFO < WARN < ERROR < FATAL < OFF。 monitorInterval : 用于指定log4j自动重新配置的监测间隔时间;单位是s,最小是5s. --> <Configuration status=;WARN; monitorInterval=;30;> <Properties> <!-- 配置日志文件输出目录 ${sys:user.home} --> <Property name=;LOG_HOME;>/root/workspace/lucenedemo/logs</Property> <property name=;ERROR_LOG_FILE_NAME;>/root/workspace/lucenedemo/logs/error</property> <property name=;WARN_LOG_FILE_NAME;>/root/workspace/lucenedemo/logs/warn</property> <property name=;PATTERN;>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t-%L] %-5level %logger{36} - %msg%n</property> </Properties> <Appenders> <!--这个输出控制台的配置 --> <Console name=;Console; target=;SYSTEM_OUT;> <!-- 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) --> <ThresholdFilter level=;trace; onMatch=;ACCEPT; onMismatch=;DENY; /> <!-- 输出日志的格式 --> <!-- %d{yyyy-MM-dd HH:mm:ss, SSS} : 日志生产时间 %p : 日志输出格式 %c : logger的名称 %m : 日志内容;即 logger.info(;message;) %n : 换行符 %C : Java类名 %L : 日志输出所在行数 %M : 日志输出所在方法名 hostName : 本地机器名 hostAddress : 本地ip地址 --> <PatternLayout pattern=;${PATTERN}; /> </Console> <!--文件会打印出所有信息;这个log每次运行程序会自动清空;由append属性决定;这个也挺有用的;适合临时测试用 --> <!--append为TRUE表示消息增加到指定文件中;false表示消息覆盖指定的文件内容;默认值是true --> <File name=;log; fileName=;logs/test.log; append=;false;> <PatternLayout pattern=%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n; /> </File> <!-- 这个会打印出所有的info及以下级别的信息;每次大小超过size; 则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩;作为存档 --> <RollingFile name=;RollingFileInfo; fileName=;${LOG_HOME}/info.log; filePattern=;${LOG_HOME}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log;> <!--控制台只输出level及以上级别的信息;onMatch;;其他的直接拒绝;onMismatch; --> <ThresholdFilter level=;info; onMatch=;ACCEPT; onMismatch=;DENY; /> <PatternLayout pattern=%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n; /> <Policies> <!-- 基于时间的滚动策略;interval属性用来指定多久滚动一次;默认是1 hour。 modulate=true用来调整时间;比如现在是早上3am;interval是4;那么第一次滚动是在4am;接着是8am;12am...而不是7am. --> <!-- 关键点在于 filePattern后的日期格式;以及TimeBasedTriggeringPolicy的interval; 日期格式精确到哪一位;interval也精确到哪一个单位 --> <!-- log4j2的按天分日志文件 : info-%d{yyyy-MM-dd}-%i.log --> <TimeBasedTriggeringPolicy interval=;1; modulate=;true; /> <!-- SizeBasedTriggeringPolicy:Policies子节点; 基于指定文件大小的滚动策略;size属性用来定义每个日志文件的大小. --> <!-- <SizeBasedTriggeringPolicy size=;2 kB; /> --> </Policies> </RollingFile> <RollingFile name=;RollingFileWarn; fileName=;${WARN_LOG_FILE_NAME}/warn.log; filePattern=;${WARN_LOG_FILE_NAME}/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log;> <ThresholdFilter level=;warn; onMatch=;ACCEPT; onMismatch=;DENY; /> <PatternLayout pattern=%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n; /> <Policies> <TimeBasedTriggeringPolicy /> <SizeBasedTriggeringPolicy size=;2 kB; /> </Policies> <!-- DefaultRolloverStrategy属性如不设置;则默认为最多同一文件夹下7个文件;这里设置了20 --> <DefaultRolloverStrategy max=;20; /> </RollingFile> <RollingFile name=;RollingFileError; fileName=;${ERROR_LOG_FILE_NAME}/error.log; filePattern=;${ERROR_LOG_FILE_NAME}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd-HH-mm}-%i.log;> <ThresholdFilter level=;error; onMatch=;ACCEPT; onMismatch=;DENY; /> <PatternLayout pattern=%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n; /> <Policies> <!-- log4j2的按分钟 分日志文件 : warn-%d{yyyy-MM-dd-HH-mm}-%i.log --> <TimeBasedTriggeringPolicy interval=;1; modulate=;true; /> <!-- <SizeBasedTriggeringPolicy size=;10 MB; /> --> </Policies> </RollingFile> </Appenders> <!--然后定义logger;只有定义了logger并引入的appender;appender才会生效 --> <Loggers> <!--过滤掉spring和mybatis的一些无用的DEBUG信息 --> <logger name=;org.springframework; level=;INFO;></logger> <logger name=;org.mybatis; level=;INFO;></logger> <!-- 第三方日志系统 --> <logger name=;org.springframework; level=;ERROR; /> <logger name=;org.hibernate; level=;ERROR; /> <logger name=;org.apache.struts2; level=;ERROR; /> <logger name=;com.opensymphony.xwork2; level=;ERROR; /> <logger name=;org.jboss; level=;ERROR; /> <!-- 配置日志的根节点 --> <root level=;all;> <appender-ref ref=;Console; /> <appender-ref ref=;RollingFileInfo; /> <appender-ref ref=;RollingFileWarn; /> <appender-ref ref=;RollingFileError; /> </root> </Loggers> </Configuration>
jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/t280?useUnicode=true&characterEncoding=UTF-8 jdbc.username=root jdbc.password=123456
generatorConfig.xml
<?xml version=;1.0; encoding=;UTF-8; ?>
<generatorConfiguration> <!-- 引入配置文件 --> <properties resource=;jdbc.properties;/> <!--指定数据库jdbc驱动jar包的位置--> <classPathEntry location=;D:ruanjianmaven_ckmysqlmysql-connector-java5.1.44mysql-connector-java-5.1.44.jar;/> <!-- 一个数据库一个context --> <context id=;infoGuardian;> <!-- 注释 --> <commentGenerator> <property name=;suppressAllComments; value=;true;/><!-- 是否取消注释 --> <property name=;suppressDate; value=;true;/> <!-- 是否生成注释代时间戳 --> </commentGenerator> <!-- jdbc连接 --> <jdbcConnection driverClass=;${jdbc.driver}; connectionURL=;${jdbc.url}; userId=;${jdbc.username}; password=;${jdbc.password};/> <!-- 类型转换 --> <javaTypeResolver> <!-- 是否使用bigDecimal; false可自动转化以下类型;Long, Integer, Short, etc.; --> <property name=;forceBigDecimals; value=;false;/> </javaTypeResolver> <!-- 01 指定javaBean生成的位置 --> <!-- targetPackage;指定生成的model生成所在的包名 --> <!-- targetProject;指定在该项目下所在的路径 --> <javaModelGenerator targetPackage=;com.ssr.model; targetProject=;src/main/java;> <!-- 是否允许子包;即targetPackage.schemaName.tableName --> <property name=;enableSubPackages; value=;false;/> <!-- 是否对model添加构造函数 --> <property name=;constructorBased; value=;true;/> <!-- 是否针对string类型的字段在set的时候进行trim调用 --> <property name=;trimStrings; value=;false;/> <!-- 建立的Model对象是否 不可改变 即生成的Model对象不会有 setter方法;只有构造方法 --> <property name=;immutable; value=;false;/> </javaModelGenerator> <!-- 02 指定sql映射文件生成的位置 --> <sqlMapGenerator targetPackage=;com.ssr.mapper; targetProject=;src/main/java;> <!-- 是否允许子包;即targetPackage.schemaName.tableName --> <property name=;enableSubPackages; value=;false;/> </sqlMapGenerator> <!-- 03 生成XxxMapper接口 --> <!-- type=;ANNOTATEDMAPPER;,生成Java Model 和基于注解的Mapper对象 --> <!-- type=;MIXEDMAPPER;,生成基于注解的Java Model 和相应的Mapper对象 --> <!-- type=;XMLMAPPER;,生成SQLMap XML文件和独立的Mapper接口 --> <javaClientGenerator targetPackage=;com.ssr.mapper; targetProject=;src/main/java; type=;XMLMAPPER;> <!-- 是否在当前路径下新加一层schema,false路径com.oop.eksp.user.model; true:com.oop.eksp.user.model.[schemaName] --> <property name=;enableSubPackages; value=;false;/> </javaClientGenerator> <!-- 配置表信息 --> <!-- schema即为数据库名 --> <!-- tableName为对应的数据库表 --> <!-- domainObjectName是要生成的实体类 --> <!-- enable*ByExample是否生成 example类 --> <!--<table schema=;; tableName=;t_book; domainObjectName=;Book;--> <!--enableCountByExample=;false; enableDeleteByExample=;false;--> <!--enableSelectByExample=;false; enableUpdateByExample=;false;>--> <!--<!– 忽略列;不生成bean 字段 –>--> <!--<!– <ignoreColumn column=;FRED; /> –>--> <!--<!– 指定列的java数据类型 –>--> <!--<!– <columnOverride column=;LONG_VARCHAR_FIELD; jdbcType=;VARCHAR; /> –>--> <!--</table>--> <!-- <table schema=;; tableName=;t_struts_class; domainObjectName=;Clayy;--> <!-- enableCountByExample=;false; enableDeleteByExample=;false;--> <!-- enableSelectByExample=;false; enableUpdateByExample=;false;>--> <!-- <!– 忽略列;不生成bean 字段 –>--> <!-- <!– <ignoreColumn column=;FRED; /> –>--> <!-- <!– 指定列的java数据类型 –>--> <!-- <!– <columnOverride column=;LONG_VARCHAR_FIELD; jdbcType=;VARCHAR; /> –>--> <!-- </table>--> <table schema=;; tableName=;t_mvc_book; domainObjectName=;Book; enableCountByExample=;false; enableDeleteByExample=;false; enableSelectByExample=;false; enableUpdateByExample=;false;> <!-- 忽略列;不生成bean 字段 --> <!-- <ignoreColumn column=;FRED; /> --> <!-- 指定列的java数据类型 --> <!-- <columnOverride column=;LONG_VARCHAR_FIELD; jdbcType=;VARCHAR; /> --> </table> </context> </generatorConfiguration>
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; 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/context http://www.springframework.org/schema/context/spring-context.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;> <!--1. 注解式开发 --> <!-- 注解驱动 --> <context:annotation-config/> <!-- 用注解方式注入bean;并指定查找范围;com.javaxl.ssm及子子孙孙包--> <context:component-scan base-package=;com.ssr;/> <context:property-placeholder location=;classpath:jdbc.properties;/> <bean id=;dataSource; class=;org.apache.commons.dbcp2.BasicDataSource; destroy-method=;close;> <property name=;driverClassName; value=;${jdbc.driver};/> <property name=;url; value=;${jdbc.url};/> <property name=;username; value=;${jdbc.username};/> <property name=;password; value=;${jdbc.password};/> <!--初始连接数--> <property name=;initialSize; value=;10;/> <!--最大活动连接数--> <property name=;maxTotal; value=;100;/> <!--最大空闲连接数--> <property name=;maxIdle; value=;50;/> <!--最小空闲连接数--> <property name=;minIdle; value=;10;/> <!--设置为-1时;如果没有可用连接;连接池会一直无限期等待;直到获取到连接为止。--> <!--如果设置为N;毫秒;;则连接池会等待N毫秒;等待不到;则抛出异常--> <property name=;maxWaitMillis; value=;-1;/> </bean> <!--4. spring和MyBatis整合 --> <!--1) 创建sqlSessionFactory--> <bean id=;sqlSessionFactory; class=;org.mybatis.spring.SqlSessionFactoryBean;> <!-- 指定数据源 --> <property name=;dataSource; ref=;dataSource;/> <!-- 自动扫描XxxMapping.xml文件;**任意路径 --> <property name=;mapperLocations; value=;classpath*:com/ssr/**/mapper/*.xml;/> <!-- 指定别名 --> <property name=;typeAliasesPackage; value=;com/yzp/**/model;/> <!--配置pagehelper插件--> <property name=;plugins;> <array> <bean class=;com.github.pagehelper.PageInterceptor;> <property name=;properties;> <value> helperDialect=mysql </value> </property> </bean> </array> </property> </bean> <!--2) 自动扫描com/javaxl/ssm/**/mapper下的所有XxxMapper接口(其实就是DAO接口);并实现这些接口;--> <!-- 即可直接在程序中使用dao接口;不用再获取sqlsession对象--> <bean class=;org.mybatis.spring.mapper.MapperScannerConfigurer;> <!--basePackage 属性是映射器接口文件的包路径。--> <!--你可以使用分号或逗号 作为分隔符设置多于一个的包路径--> <property name=;basePackage; value=;com/ssr/**/mapper;/> <property name=;sqlSessionFactoryBeanName; value=;sqlSessionFactory;/> </bean> <bean id=;transactionManager; class=;org.springframework.jdbc.datasource.DataSourceTransactionManager;> <property name=;dataSource; ref=;dataSource; /> </bean> <tx:annotation-driven transaction-manager=;transactionManager; /> <aop:aspectj-autoproxy/> </beans>
applicationCotext.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; 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/context http://www.springframework.org/schema/context/spring-context.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;> <!--随着后续学习;框架越学越多;不能将所有的框架配置;放到同一个配置文件;否则不利于管理 --> <import resource=;applicationContext-mybatis.xml;></import> </beans>
1.4、工具类
CorsFilter.java
package com.ssr.util;
import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * 配置tomcat允许跨域访问 * * ;author Administrator * */ public class CorsFilter implements Filter { ;Override public void init(FilterConfig filterConfig) throws ServletException { } // ;Override // public void doFilter(ServletRequest servletRequest, ServletResponse // servletResponse, FilterChain filterChain) // throws IOException, ServletException { // HttpServletResponse httpResponse = (HttpServletResponse) servletResponse; // // // Access-Control-Allow-Origin就是我们需要设置的域名 // // Access-Control-Allow-Headers跨域允许包含的头。 // // Access-Control-Allow-Methods是允许的请求方式 // httpResponse.addHeader(;Access-Control-Allow-Origin;, ;*;);// *,任何域名 // httpResponse.setHeader(;Access-Control-Allow-Methods;, ;POST, GET, PUT, // DELETE;); // // httpResponse.setHeader(;Access-Control-Allow-Headers;, ;Origin, // // X-Requested-With, Content-Type, Accept;); // // // 允许请求头Token // httpResponse.setHeader(;Access-Control-Allow-Headers;, // ;Origin,X-Requested-With, Content-Type, Accept, Token;); // HttpServletRequest req = (HttpServletRequest) servletRequest; // System.out.println(;Token=; ; req.getHeader(;Token;)); // if(;OPTIONS;.equals(req.getMethod())) { // return; // } // // // filterChain.doFilter(servletRequest, servletResponse); // } ;Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletResponse resp = (HttpServletResponse) servletResponse; HttpServletRequest req = (HttpServletRequest) servletRequest; // Access-Control-Allow-Origin就是我们需要设置的域名 // Access-Control-Allow-Headers跨域允许包含的头。 // Access-Control-Allow-Methods是允许的请求方式 resp.setHeader(;Access-Control-Allow-Origin;, ;*;);// *,任何域名 resp.setHeader(;Access-Control-Allow-Methods;, ;POST, GET, PUT, DELETE;); // resp.setHeader(;Access-Control-Allow-Headers;, ;Origin,X-Requested-With, // Content-Type, Accept;); // 允许客户端;发一个新的请求头jwt resp.setHeader(;Access-Control-Allow-Headers;, ;Origin,X-Requested-With, Content-Type, Accept, jwt;); // 允许客户端;处理一个新的响应头jwt resp.setHeader(;Access-Control-Expose-Headers;, ;jwt;); // String sss = resp.getHeader(;Access-Control-Expose-Headers;); // System.out.println(;sss=; ; sss); // 允许请求头Token // httpResponse.setHeader(;Access-Control-Allow-Headers;,;Origin,X-Requested-With, // Content-Type, Accept, Token;); // System.out.println(;Token=; ; req.getHeader(;Token;)); if (;OPTIONS;.equals(req.getMethod())) {// axios的ajax会发两次请求;第一次提交方式为;option;直接返回即可 return; } filterChain.doFilter(servletRequest, servletResponse); } ;Override public void destroy() { } }
JsonData.java
package com.ssr.util;
import java.io.Serializable; import java.util.HashMap; /** * 服务器返回给客户端的JSON格式的数据 * */ public class JsonData extends HashMap<String, Object> implements Serializable { private static final long serialVersionUID = -8855960778711040221L; private int code; private String msg; private Object result; public int getCode() { return code; } public void setCode(int code) { this.code = code; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public Object getResult() { return result; } public void setResult(Object result) { this.result = result; } public JsonData(int code, String msg, Object result) { super(); this.put(;code;, code); this.put(;msg;, msg); this.put(;result;, result); } public JsonData() { super(); } }
PageBean.java
package com.ssr.util;
import javax.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.Map; /** * 分页工具类 * */ public class PageBean { private int page = 1;// 页码 private int rows = 10;// 页大小 private int total = 0;// 总记录数 private boolean pagination = true;// 是否分页 private String url; //保存上一次请求的URL private Map<String,String[]> paramMap = new HashMap<>();// 保存上一次请求的参数 /** * 初始化pagebean的;保存上一次请求的重要参数 * ;param req */ public void setRequest(HttpServletRequest req) { // 1.1 需要保存上一次请求的URL this.setUrl(req.getRequestURL().toString()); // 1.2 需要保存上一次请求的参数 bname、price this.setParamMap(req.getParameterMap()); // 1.3 需要保存上一次请求的分页设置 pagination this.setPagination(req.getParameter(;pagination;)); // 1.4 需要保存上一次请求的展示条目数 this.setRows(req.getParameter(;rows;)); // 1.5 初始化请求的页码 page this.setPage(req.getParameter(;page;)); } public void setPage(String page) { if(StringUtils.isNotBlank(page)) this.setPage(Integer.valueOf(page)); } public void setRows(String rows) { if(StringUtils.isNotBlank(rows)) this.setRows(Integer.valueOf(rows)); } public void setPagination(String pagination) { // 只有在前台jsp填写了pagination=false;才代表不分页 if(StringUtils.isNotBlank(pagination)) this.setPagination(!;false;.equals(pagination)); } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public Map<String, String[]> getParamMap() { return paramMap; } public void setParamMap(Map<String, String[]> paramMap) { this.paramMap = paramMap; } public PageBean() { super(); } public int getPage() { return page; } public void setPage(int page) { this.page = page; } public int getRows() { return rows; } public void setRows(int rows) { this.rows = rows; } public int getTotal() { return total; } public void setTotal(int total) { this.total = total; } public void setTotal(String total) { this.total = Integer.parseInt(total); } public boolean isPagination() { return pagination; } public void setPagination(boolean pagination) { this.pagination = pagination; } /** * 获得起始记录的下标 * * ;return */ public int getStartIndex() { return (this.page - 1) * this.rows; } /** * 最大页 * ;return */ public int maxPage() { // total % rows == 0 ? total / rows : total / rows ;1 return this.total % this.rows == 0 ? this.total / this.rows : this.total / this.rows ; 1; } /** * 下一页 * ;return */ public int nextPage() { // 如果当前页小于最大页;那就下一页为当前页;1;如果不小于;说明当前页就是最大页;那就无需;1 return this.page < this.maxPage() ? this.page ; 1 : this.page; } /** * 上一页 * ;return */ public int previousPage() { return this.page > 1 ? this.page - 1 : this.page; } ;Override public String toString() { return ;PageBean [page=; ; page ; ;, rows=; ; rows ; ;, total=; ; total ; ;, pagination=; ; pagination ; ;];; } }
ResponseUtil.java
package com.ssr.util;
import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; public class ResponseUtil { public static void write(HttpServletResponse response,Object o)throws Exception{ response.setContentType(;text/html;charset=utf-8;); PrintWriter out=response.getWriter(); out.println(o.toString()); out.flush(); out.close(); } }
StringUtil.java
package com.ssr.util;
public class StringUtils { // 私有的构造方法;保护此类不能在外部实例化 private StringUtils() { } /** * 如果字符串等于null或去空格后等于;;;则返回true;否则返回false * * ;param * ;return */ public static boolean isBlank(String s) { boolean b = false; if (null == s || s.trim().equals(;;)) { b = true; } return b; } /** * 如果字符串不等于null或去空格后不等于;;;则返回true;否则返回false * * ;param s * ;return */ public static boolean isNotBlank(String s) { return !isBlank(s); } }
1.5、数据库访问层、业务逻辑层、空之城
BookMapper.xml
<?xml version=;1.0; encoding=;UTF-8;?>
<mapper namespace=;com.ssr.mapper.BookMapper;> <resultMap id=;BaseResultMap; type=;com.ssr.model.Book;> <constructor> <idArg column=;bid; javaType=;java.lang.Integer; jdbcType=;INTEGER; /> <arg column=;bname; javaType=;java.lang.String; jdbcType=;VARCHAR; /> <arg column=;price; javaType=;java.lang.Float; jdbcType=;REAL; /> </constructor> </resultMap> <sql id=;Base_Column_List;> bid, bname, price </sql> <select id=;selectByPrimaryKey; parameterType=;java.lang.Integer; resultMap=;BaseResultMap;> select <include refid=;Base_Column_List; /> from t_mvc_book where bid = #{bid,jdbcType=INTEGER} </select> <select id=;listPager; parameterType=;java.util.Map; resultType=;java.util.Map;> select * from t_mvc_book where bname like concat(concat(%,#{bname}),%) </select> <delete id=;deleteByPrimaryKey; parameterType=;java.lang.Integer;> delete from t_mvc_book where bid = #{bid,jdbcType=INTEGER} </delete> <insert id=;insert; parameterType=;com.ssr.model.Book;> insert into t_mvc_book (bid, bname, price ) values (#{bid,jdbcType=INTEGER}, #{bname,jdbcType=VARCHAR}, #{price,jdbcType=REAL} ) </insert> <insert id=;insertSelective; parameterType=;com.ssr.model.Book;> insert into t_mvc_book <trim prefix=;(; suffix=;); suffixOverrides=;,;> <if test=;bid != null;> bid, </if> <if test=;bname != null;> bname, </if> <if test=;price != null;> price, </if> </trim> <trim prefix=;values (; suffix=;); suffixOverrides=;,;> <if test=;bid != null;> #{bid,jdbcType=INTEGER}, </if> <if test=;bname != null;> #{bname,jdbcType=VARCHAR}, </if> <if test=;price != null;> #{price,jdbcType=REAL}, </if> </trim> </insert> <update id=;updateByPrimaryKeySelective; parameterType=;com.ssr.model.Book;> update t_mvc_book <set> <if test=;bname != null;> bname = #{bname,jdbcType=VARCHAR}, </if> <if test=;price != null;> price = #{price,jdbcType=REAL}, </if> </set> where bid = #{bid,jdbcType=INTEGER} </update> <update id=;updateByPrimaryKey; parameterType=;com.ssr.model.Book;> update t_mvc_book set bname = #{bname,jdbcType=VARCHAR}, price = #{price,jdbcType=REAL} where bid = #{bid,jdbcType=INTEGER} </update> </mapper>
BookMapper.java
package com.ssr.mapper;
import com.ssr.model.Book; import com.ssr.util.PageBean; import java.util.List; import java.util.Map; public interface BookMapper { int deleteByPrimaryKey(Integer bid); int insert(Book record); int insertSelective(Book record); Book selectByPrimaryKey(Integer bid); int updateByPrimaryKeySelective(Book record); int updateByPrimaryKey(Book record); List<Map> listPager(Map map); }
BookBiz.java
package com.ssr.Biz;
import com.ssr.model.Book; import com.ssr.util.PageBean; import java.util.List; import java.util.Map; /** * ;author四金 * ;site 226... * ;company China * ;create 2022-09-28-18:18 */ public interface BookBiz { int deleteByPrimaryKey(Integer bid); int insert(Book record); int insertSelective(Book record); Book selectByPrimaryKey(Integer bid); int updateByPrimaryKeySelective(Book record); int updateByPrimaryKey(Book record); List<Map> listPager(Map map, PageBean pageBean); }
BookImpl.java
package com.ssr.Biz;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.ssr.mapper.BookMapper; import com.ssr.model.Book; import com.ssr.util.PageBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; import java.util.Map; /** * ;author四金 * ;site 226... * ;company China * ;create 2022-09-28-18:18 */ ;Service public class BookBizImpl implements BookBiz { ;Autowired private BookMapper bookMapper; ;Override public int deleteByPrimaryKey(Integer bid) { return bookMapper.deleteByPrimaryKey(bid); } ;Override public int insert(Book record) { return bookMapper.insert(record); } ;Override public int insertSelective(Book record) { return bookMapper.insertSelective(record); } ;Override public Book selectByPrimaryKey(Integer bid) { return bookMapper.selectByPrimaryKey(bid); } ;Override public int updateByPrimaryKeySelective(Book record) { return bookMapper.updateByPrimaryKeySelective(record); } ;Override public int updateByPrimaryKey(Book record) { return bookMapper.updateByPrimaryKey(record); } ;Override public List<Map> listPager(Map map, PageBean pageBean) { if(pageBean!=null&&pageBean.isPagination()){ PageHelper.startPage(pageBean.getPage(),pageBean.getRows()); } List<Map> maps = bookMapper.listPager(map); if(pageBean!=null&&pageBean.isPagination()){ PageInfo info = new PageInfo(maps); pageBean.setTotal(info.getTotal();;;); } return maps; } }
BookController.java
package com.ssr.conreoller;
import com.fasterxml.jackson.databind.ObjectMapper; import com.ssr.Biz.BookBiz; import com.ssr.model.Book; import com.ssr.util.JsonData; import com.ssr.util.PageBean; import com.ssr.util.ResponseUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.HashMap; import java.util.List; import java.util.Map; /** * ;author四金 * ;site 226... * ;company China * ;create 2022-09-28-18:28 */ ;Controller ;RequestMapping(;/book;) public class BookController { ;Autowired private BookBiz bookBiz; ;ResponseBody ;RequestMapping(;/list;) public String list(HttpServletRequest request, HttpServletResponse response){ PageBean pageBean = new PageBean(); pageBean.setRequest(request); ObjectMapper om = new ObjectMapper(); try{ Map map = new HashMap(); String bname = request.getParameter(;bname;); if(bname==null){ bname = ;;; } map.put(;bname;,bname); List<Map> list = bookBiz.listPager(map,pageBean); JsonData jsonData = new JsonData(1,;操作成功;,list); jsonData.put(;pageBean;,pageBean); ResponseUtil.write(response,om.writeValueAsString(jsonData)); }catch (Exception e){ e.printStackTrace(); } return null; } ;ResponseBody ;RequestMapping(;/add;) public String add(Book book){ this.bookBiz.insertSelective(book); return null; } ;ResponseBody ;RequestMapping(;/del;) public String del(int bid){ this.bookBiz.deleteByPrimaryKey(bid); return null; } ;ResponseBody ;RequestMapping(;/edit;) public String edit(Book book){ this.bookBiz.updateByPrimaryKeySelective(book); return null; } }
2、前台
2.1、执行命令
在项目路径下执行
npm install element-ui -S
npm install axios -S
npm install qs -S
npm install vue-axios -S
2.2、main.js
// The Vue build version to load with the ;import; command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias. import Vue from ;vue; import ElementUI from ;element-ui; import ;element-ui/lib/theme-chalk/index.css; import App from ;./App; import router from ;./router; import qs from ;qs; import axios from ;;/api/http; //vue项目对axios的全局配置 import VueAxios from ;vue-axios; Vue.config.productionTip = false Vue.use(ElementUI); Vue.use(VueAxios, axios); /* eslint-disable no-new */ new Vue({ el: ;#app;, router, components: { App }, template: ;<App/>; })
2.3、连接后台
action.js
/**
* 对后台请求的地址的封装;URL格式如下; * 模块名_实体名_操作 */ export default { ;SERVER;: ;http://localhost:8080/;, //服务器 ;SYSTEM_ARTICLE_list;: ;/bkk/list;, //查询 ;SYSTEM_ARTICLE_add;: ;/bkk/add;, //增加 ;SYSTEM_ARTICLE_del;: ;/bkk/del;, //删除 ;SYSTEM_ARTICLE_edit;: ;/bkk/edit;, //修改 ;getFullPath;: k => { //获得请求的完整地址;用于mockjs测试时使用 return this.SERVER ; this[k]; } }
http.js
/**
* vue项目对axios的全局配置 */ import axios from ;axios; import qs from ;qs; //引入action模块;并添加至axios的类属性urls上 import action from ;;/api/action; axios.urls = action // axios默认配置 axios.defaults.timeout = 10000; // 超时时间 // axios.defaults.baseURL = ;http://localhost:8080/j2ee15;; // 默认地址 axios.defaults.baseURL = action.SERVER; //整理数据 // 只适用于 POST,PUT,PATCH;transformRequest; 允许在向服务器发送前;修改请求数据 axios.defaults.transformRequest = function(data) { data = qs.stringify(data); return data; }; export default axios;
2.4、index.vue
<template>
<div> <!-- 搜索筛选 --> <el-form :inline=;true; :model=;formInline; class=;user-search;> <el-form-item label=;搜索;;> <el-input size=;small; v-model=;formInline.bname; placeholder=;输入文章标题;></el-input> </el-form-item> <el-form-item> <el-button size=;small; type=;primary; icon=;el-icon-search; ;click=;search;>搜索</el-button> <el-button size=;small; type=;primary; icon=;el-icon-plus; ;click=;handleEdit();>添加</el-button> </el-form-item> </el-form> <!--列表--> <el-table size=;small; :data=;listData; Highlight-current-row style=;width: 100%;> <!-- <el-table-column align=;center; type=;selection; width=;60;> </el-table-column> --> <el-table-column align=;center; sortable prop=;bid; label=;编号; width=;100;> </el-table-column> <el-table-column sortable prop=;bname; label=;文章标题; width=;200;> </el-table-column> <el-table-column sortable prop=;price; label=;文章价格; width=;300;> </el-table-column> <el-table-column align=;center; label=;操作; min-width=;100;> <template slot-scope=;scope;> <el-button size=;mini; ;click=;handleEdit(scope.$index, scope.row);>编辑</el-button> <el-button size=;mini; type=;danger; ;click=;deleteUser(scope.$index, scope.row);>删除</el-button> </template> </el-table-column> </el-table> <!-- 分页条 --> <el-pagination style=;margin-top: 20px;; ;size-change=;handleSizeChange; ;current-change=;handleCurrentChange; :current-page=;formInline.page; :page-sizes=;[10, 20, 30, 50]; :page-size=;100; layout=;total, sizes, prev, pager, next, jumper; :total=;formInline.total;> </el-pagination> <!-- 编辑弹窗界面 --> <el-dialog :title=;title; :visible.sync=;editFormVisible; width=;30% ;click=;closeDialog;> <el-form label-width=;120px; :model=;editForm; :rules=;rules; ref=;editForm;> <el-form-item label=;文章标题; prop=;bname;> <!-- <el-input size=;small; v-model=;editForm.title; auto-complete=;off; maxlength=;10; placeholder=;请输入文章标题;> --> </el-input> <el-input type=;text; placeholder=;请输入文章标题; v-model=;editForm.bname; maxlength=;50; show-word-limit> </el-input> </el-form-item> <el-form-item label=;文章价格; prop=;price;> <!-- <el-input size=;small; v-model=;editForm.body; auto-complete=;off; placeholder=;请输入文章内容;></el-input> --> <el-input type=;textarea; :rows=;2; placeholder=;请输入文章内容; v-model=;editForm.price;> </el-input> </el-form-item> </el-form> <div slot=;footer; class=;dialog-footer;> <el-button size=;small; ;click=;closeDialog;>取消</el-button> <el-button size=;small; type=;primary; ;click=;submitForm(;editForm;);>保存</el-button> </div> </el-dialog> </div> </template> <script> export default { name: ;Articles;, data() { return { listData: {}, editForm: { price: ;;, bname: ;;, bid: 0 }, editFormVisible: false, rules: { bname: [{ required: true, message: ;请输入文章标题;, trigger: ;blur; } ], price: [{ required: true, message: ;请输入文章价格;, trigger: ;blur; }] }, formInline: { page: 1, rows: 10, total: 0, title: ;; } } }, created() { this.dosearch({}); }, methods: { handleSizeChange(rows) { console.log(;当前页查询数量为;; ; rows); this.formInline.page = 1; this.formInline.rows = rows; this.search(); }, handleCurrentChange(page) { console.log(;当前页为;; ; page); this.formInline.page = page; this.search(); }, dosearch(param) { let url = this.axios.urls.SYSTEM_ARTICLE_LIST; this.axios.post(url, param).then(res => { console.log(res); this.listData = res.data.result; this.formInline.total = res.data.pageBean.total; }).catch(function(error) { console.log(error); }); }, search() { this.dosearch(this.formInline); }, closeDialog() { //关闭窗体 this.clearData(); }, clearData() { //清除编辑窗体的缓存数据 this.editForm.bname = ;;; this.editForm.bid = 0; this.editForm.price = ;;; this.title = ;;; this.editFormVisible = false; }, submitForm(formName) { this.$refs[formName].validate((valid) => { if (valid) { let url; if (this.editForm.bid == 0) { url = this.axios.urls.SYSTEM_ARTICLE_ADD; } else { url = this.axios.urls.SYSTEM_ARTICLE_EDIT; } this.axios.post(url, this.editForm).then(r => { //成功后关闭窗体;清空表单数据;并重新查询 this.$message({ message: r.data.msg, type: ;success; }); this.clearData(); this.search(); }).catch(e => { }); } else { console.log(;error submit!!;); return false; } }); }, handleEdit(index, row) { this.clearData(); // console.log(row); //展示新增文章的表单窗体 this.editFormVisible = true; if (row) { //编辑 this.title = ;编辑;; this.editForm.bname = row.bname; this.editForm.bid = row.bid; this.editForm.price = row.price; } else { //新增 this.title = ;新增窗体;; } }, deleteUser(index, row) { this.$confirm(;此操作将永久删除该文件, 是否继续?;, ;提示;, { confirmButtonText: ;确定;, cancelButtonText: ;取消;, type: ;warning; }).then(() => { this.$message({ type: ;success;, message: ;删除成功!; }); let url = this.axios.urls.SYSTEM_ARTICLE_DEL; this.axios.post(url, { bid: row.bid }).then(r => { this.clearData(); this.search(); }).catch(e => { }); }).catch(() => { this.$message({ type: ;info;, message: ;已取消删除; }); }); } } } </script> <style> </style>
3、运行效果

上一篇:Ubuntu系统备份与刻录 下一篇:Golang配置环境变量
网友评论
快盘下载暂未开通留言功能。
推荐文章

使用Sublime开发微信小程序实现wxml, wxss代码高亮和语法提示

海康威视iVMS-4200校时、手动校时、定位校时、NTP校时四种方法任你选
最新文章

elasticsearch根据id修改文档的部分数据12-01 
Vue3---Pinia-状态管理(环境搭建安装及各属性使用教程)详细使用教程12-01
- svn的常规使用
- 女神联盟怎么召唤3个宠物同时出战?-女神联盟召唤3个宠物同时出战教程攻略
- 女神联盟怎么召唤3个宠物同时出战?-女神联盟召唤3个宠物同时出战教程攻略
- 脑叶公司游戏卡顿怎么办?-脑叶公司游戏卡顿解决教程攻略
文章排行
- 1海康威视iVMS-4200校时、手动校时、定位校时、NTP校时四种方法任你选
- 2手机设置联想领像(M100/L100)打印机通用教程
- 3中文版AIDA64安装教程附aida64序列号
- 4BitLocker 恢复密钥 输入此驱动器的恢复密钥
- 5qq邮箱超大附件无法上传解决办法,怎么才能上传超大附件
- 6海康威视录像机时间变成了1970年,如何修改录像机时间
- 7英伟达(NVIDIA)显卡如何设置144Hz刷新率
- 8哪个p图软件可以有圆圈放大镜
- 9QQ浏览器启用flash插件
- 10MegaRAID Storage Manager RAID管理工具使用方法完整版
Copyright 2019-2029 【快快下载吧】 版权所有 快快下载吧 |
豫ICP备10006759号公安备案:41010502004165
声明: 快快下载吧上的所有软件和资料来源于互联网,仅供学习和研究使用,请测试后自行销毁,如有侵犯你版权的,请来信指出,本站将立即改正。
var allpre = document.getElementsByTagName("pre"); for(i = 0; i < allpre.length; i++) { var onepre = document.getElementsByTagName("pre")[i]; var mycode = document.getElementsByTagName("pre")[i].innerHTML; onepre.innerHTML = ''+mycode+'
'; }