• SpringMVC之CRUD(直接让你迅速完成部署)


    目录

    一、项目创建

    二、配置依赖导入

    依赖导入

    1、pom.xml

    2、web.xml

    配置

    1、generatorConfig.xml

    2、jdbc.properties

    3、log4j2.xml

    4、spring-context.xml

    5、spring-mvc.xml

    6、spring-mybatis.xml

    三、后端代码

    1、逆向生成代码

    1)、实体类

    2)、生成的xml文件

    3)、生成的接口类

    2、导入资源

    1)、切面类

    2)、分页类

    3)、分页实现类

    3、配置tld文件

    4、编写biz、impl层

    5、web层

    四、前端代码

    1、首页数据访问

    2、edit前端

    五、测试结果

    1、数据回显

    2、edit


    一、项目创建

    首先创建一个基于maven的项目部署,如果有些插件没有的话可以参考mybatis入门Idea搭建

    二、配置依赖导入

    依赖导入

    1、pom.xml

    需要根据自己的文件来进行导入,并不是原本照着导入

    1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    3. <modelVersion>4.0.0modelVersion>
    4. <groupId>org.examplegroupId>
    5. <artifactId>tgqzyssmartifactId>
    6. <packaging>warpackaging>
    7. <version>1.0-SNAPSHOTversion>
    8. <name>tgqzyssm Maven Webappname>
    9. <url>http://maven.apache.orgurl>
    10. <properties>
    11. <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    12. <maven.compiler.source>1.8maven.compiler.source>
    13. <maven.compiler.target>1.8maven.compiler.target>
    14. <maven.compiler.plugin.version>3.7.0maven.compiler.plugin.version>
    15. <spring.version>5.0.2.RELEASEspring.version>
    16. <mybatis.version>3.4.5mybatis.version>
    17. <mysql.version>5.1.44mysql.version>
    18. <pagehelper.version>5.1.2pagehelper.version>
    19. <mybatis.spring.version>1.3.1mybatis.spring.version>
    20. <commons.dbcp2.version>2.1.1commons.dbcp2.version>
    21. <commons.pool2.version>2.4.3commons.pool2.version>
    22. <log4j2.version>2.9.1log4j2.version>
    23. <log4j2.disruptor.version>3.2.0log4j2.disruptor.version>
    24. <slf4j.version>1.7.13slf4j.version>
    25. <junit.version>4.12junit.version>
    26. <servlet.version>4.0.0servlet.version>
    27. <lombok.version>1.18.2lombok.version>
    28. <mybatis.ehcache.version>1.1.0mybatis.ehcache.version>
    29. <ehcache.version>2.10.0ehcache.version>
    30. <redis.version>2.9.0redis.version>
    31. <redis.spring.version>1.7.1.RELEASEredis.spring.version>
    32. <jackson.version>2.9.3jackson.version>
    33. <jstl.version>1.2jstl.version>
    34. <standard.version>1.1.2standard.version>
    35. <tomcat-jsp-api.version>8.0.47tomcat-jsp-api.version>
    36. <commons-fileupload.version>1.3.3commons-fileupload.version>
    37. <hibernate-validator.version>5.0.2.Finalhibernate-validator.version>
    38. <shiro.version>1.3.2shiro.version>
    39. properties>
    40. <dependencies>
    41. <dependency>
    42. <groupId>org.springframeworkgroupId>
    43. <artifactId>spring-coreartifactId>
    44. <version>${spring.version}version>
    45. dependency>
    46. <dependency>
    47. <groupId>org.springframeworkgroupId>
    48. <artifactId>spring-beansartifactId>
    49. <version>${spring.version}version>
    50. dependency>
    51. <dependency>
    52. <groupId>org.springframeworkgroupId>
    53. <artifactId>spring-contextartifactId>
    54. <version>${spring.version}version>
    55. dependency>
    56. <dependency>
    57. <groupId>org.springframeworkgroupId>
    58. <artifactId>spring-ormartifactId>
    59. <version>${spring.version}version>
    60. dependency>
    61. <dependency>
    62. <groupId>org.springframeworkgroupId>
    63. <artifactId>spring-txartifactId>
    64. <version>${spring.version}version>
    65. dependency>
    66. <dependency>
    67. <groupId>org.springframeworkgroupId>
    68. <artifactId>spring-aspectsartifactId>
    69. <version>${spring.version}version>
    70. dependency>
    71. <dependency>
    72. <groupId>org.springframeworkgroupId>
    73. <artifactId>spring-webartifactId>
    74. <version>${spring.version}version>
    75. dependency>
    76. <dependency>
    77. <groupId>org.springframeworkgroupId>
    78. <artifactId>spring-testartifactId>
    79. <version>${spring.version}version>
    80. dependency>
    81. <dependency>
    82. <groupId>org.mybatisgroupId>
    83. <artifactId>mybatisartifactId>
    84. <version>${mybatis.version}version>
    85. dependency>
    86. <dependency>
    87. <groupId>mysqlgroupId>
    88. <artifactId>mysql-connector-javaartifactId>
    89. <version>${mysql.version}version>
    90. dependency>
    91. <dependency>
    92. <groupId>com.github.pagehelpergroupId>
    93. <artifactId>pagehelperartifactId>
    94. <version>${pagehelper.version}version>
    95. dependency>
    96. <dependency>
    97. <groupId>org.mybatisgroupId>
    98. <artifactId>mybatis-springartifactId>
    99. <version>${mybatis.spring.version}version>
    100. dependency>
    101. <dependency>
    102. <groupId>org.springframeworkgroupId>
    103. <artifactId>spring-context-supportartifactId>
    104. <version>${spring.version}version>
    105. dependency>
    106. <dependency>
    107. <groupId>org.mybatis.cachesgroupId>
    108. <artifactId>mybatis-ehcacheartifactId>
    109. <version>${mybatis.ehcache.version}version>
    110. dependency>
    111. <dependency>
    112. <groupId>net.sf.ehcachegroupId>
    113. <artifactId>ehcacheartifactId>
    114. <version>${ehcache.version}version>
    115. dependency>
    116. <dependency>
    117. <groupId>redis.clientsgroupId>
    118. <artifactId>jedisartifactId>
    119. <version>${redis.version}version>
    120. dependency>
    121. <dependency>
    122. <groupId>org.springframework.datagroupId>
    123. <artifactId>spring-data-redisartifactId>
    124. <version>${redis.spring.version}version>
    125. dependency>
    126. <dependency>
    127. <groupId>com.fasterxml.jackson.coregroupId>
    128. <artifactId>jackson-databindartifactId>
    129. <version>${jackson.version}version>
    130. dependency>
    131. <dependency>
    132. <groupId>com.fasterxml.jackson.coregroupId>
    133. <artifactId>jackson-coreartifactId>
    134. <version>${jackson.version}version>
    135. dependency>
    136. <dependency>
    137. <groupId>com.fasterxml.jackson.coregroupId>
    138. <artifactId>jackson-annotationsartifactId>
    139. <version>${jackson.version}version>
    140. dependency>
    141. <dependency>
    142. <groupId>org.apache.commonsgroupId>
    143. <artifactId>commons-dbcp2artifactId>
    144. <version>${commons.dbcp2.version}version>
    145. <exclusions>
    146. <exclusion>
    147. <artifactId>commons-pool2artifactId>
    148. <groupId>org.apache.commonsgroupId>
    149. exclusion>
    150. exclusions>
    151. dependency>
    152. <dependency>
    153. <groupId>org.apache.commonsgroupId>
    154. <artifactId>commons-pool2artifactId>
    155. <version>${commons.pool2.version}version>
    156. dependency>
    157. <dependency>
    158. <groupId>org.springframeworkgroupId>
    159. <artifactId>spring-webmvcartifactId>
    160. <version>${spring.version}version>
    161. dependency>
    162. <dependency>
    163. <groupId>org.slf4jgroupId>
    164. <artifactId>slf4j-apiartifactId>
    165. <version>${slf4j.version}version>
    166. dependency>
    167. <dependency>
    168. <groupId>org.slf4jgroupId>
    169. <artifactId>jcl-over-slf4jartifactId>
    170. <version>${slf4j.version}version>
    171. <scope>runtimescope>
    172. dependency>
    173. <dependency>
    174. <groupId>org.apache.logging.log4jgroupId>
    175. <artifactId>log4j-apiartifactId>
    176. <version>${log4j2.version}version>
    177. dependency>
    178. <dependency>
    179. <groupId>org.apache.logging.log4jgroupId>
    180. <artifactId>log4j-coreartifactId>
    181. <version>${log4j2.version}version>
    182. dependency>
    183. <dependency>
    184. <groupId>org.apache.logging.log4jgroupId>
    185. <artifactId>log4j-slf4j-implartifactId>
    186. <version>${log4j2.version}version>
    187. dependency>
    188. <dependency>
    189. <groupId>org.apache.logging.log4jgroupId>
    190. <artifactId>log4j-webartifactId>
    191. <version>${log4j2.version}version>
    192. <scope>runtimescope>
    193. dependency>
    194. <dependency>
    195. <groupId>com.lmaxgroupId>
    196. <artifactId>disruptorartifactId>
    197. <version>${log4j2.disruptor.version}version>
    198. dependency>
    199. <dependency>
    200. <groupId>junitgroupId>
    201. <artifactId>junitartifactId>
    202. <version>${junit.version}version>
    203. dependency>
    204. <dependency>
    205. <groupId>javax.servletgroupId>
    206. <artifactId>javax.servlet-apiartifactId>
    207. <version>${servlet.version}version>
    208. <scope>providedscope>
    209. dependency>
    210. <dependency>
    211. <groupId>org.projectlombokgroupId>
    212. <artifactId>lombokartifactId>
    213. <version>${lombok.version}version>
    214. <scope>providedscope>
    215. dependency>
    216. <dependency>
    217. <groupId>jstlgroupId>
    218. <artifactId>jstlartifactId>
    219. <version>${jstl.version}version>
    220. dependency>
    221. <dependency>
    222. <groupId>taglibsgroupId>
    223. <artifactId>standardartifactId>
    224. <version>${standard.version}version>
    225. dependency>
    226. <dependency>
    227. <groupId>org.apache.tomcatgroupId>
    228. <artifactId>tomcat-jsp-apiartifactId>
    229. <version>${tomcat-jsp-api.version}version>
    230. dependency>
    231. <dependency>
    232. <groupId>commons-fileuploadgroupId>
    233. <artifactId>commons-fileuploadartifactId>
    234. <version>${commons-fileupload.version}version>
    235. dependency>
    236. <dependency>
    237. <groupId>org.hibernategroupId>
    238. <artifactId>hibernate-validatorartifactId>
    239. <version>${hibernate-validator.version}version>
    240. dependency>
    241. <dependency>
    242. <groupId>org.apache.shirogroupId>
    243. <artifactId>shiro-coreartifactId>
    244. <version>${shiro.version}version>
    245. dependency>
    246. <dependency>
    247. <groupId>org.apache.shirogroupId>
    248. <artifactId>shiro-webartifactId>
    249. <version>${shiro.version}version>
    250. dependency>
    251. <dependency>
    252. <groupId>org.apache.shirogroupId>
    253. <artifactId>shiro-springartifactId>
    254. <version>${shiro.version}version>
    255. dependency>
    256. dependencies>
    257. <build>
    258. <finalName>tgqzyssmfinalName>
    259. <resources>
    260. <resource>
    261. <directory>src/main/javadirectory>
    262. <includes>
    263. <include>**/*.xmlinclude>
    264. includes>
    265. resource>
    266. <resource>
    267. <directory>src/main/resourcesdirectory>
    268. <includes>
    269. <include>*.propertiesinclude>
    270. <include>*.xmlinclude>
    271. includes>
    272. resource>
    273. resources>
    274. <plugins>
    275. <plugin>
    276. <groupId>org.apache.maven.pluginsgroupId>
    277. <artifactId>maven-compiler-pluginartifactId>
    278. <version>${maven.compiler.plugin.version}version>
    279. <configuration>
    280. <source>${maven.compiler.source}source>
    281. <target>${maven.compiler.target}target>
    282. <encoding>${project.build.sourceEncoding}encoding>
    283. configuration>
    284. plugin>
    285. <plugin>
    286. <groupId>org.mybatis.generatorgroupId>
    287. <artifactId>mybatis-generator-maven-pluginartifactId>
    288. <version>1.3.2version>
    289. <dependencies>
    290. <dependency>
    291. <groupId>mysqlgroupId>
    292. <artifactId>mysql-connector-javaartifactId>
    293. <version>${mysql.version}version>
    294. dependency>
    295. dependencies>
    296. <configuration>
    297. <overwrite>trueoverwrite>
    298. configuration>
    299. plugin>
    300. <plugin>
    301. <artifactId>maven-clean-pluginartifactId>
    302. <version>3.1.0version>
    303. plugin>
    304. <plugin>
    305. <artifactId>maven-resources-pluginartifactId>
    306. <version>3.0.2version>
    307. plugin>
    308. <plugin>
    309. <artifactId>maven-compiler-pluginartifactId>
    310. <version>3.8.0version>
    311. plugin>
    312. <plugin>
    313. <artifactId>maven-surefire-pluginartifactId>
    314. <version>2.22.1version>
    315. plugin>
    316. <plugin>
    317. <artifactId>maven-war-pluginartifactId>
    318. <version>3.2.2version>
    319. plugin>
    320. <plugin>
    321. <artifactId>maven-install-pluginartifactId>
    322. <version>2.5.2version>
    323. plugin>
    324. <plugin>
    325. <artifactId>maven-deploy-pluginartifactId>
    326. <version>2.8.2version>
    327. plugin>
    328. plugins>
    329. build>
    330. project>

    2、web.xml

    web文件原本导入就行

    1. "1.0" encoding="UTF-8"?>
    2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    5. version="3.1">
    6. <display-name>Archetype Created Web Applicationdisplay-name>
    7. <context-param>
    8. <param-name>contextConfigLocationparam-name>
    9. <param-value>classpath:spring-context.xmlparam-value>
    10. context-param>
    11. <listener>
    12. <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
    13. listener>
    14. <filter>
    15. <filter-name>encodingFilterfilter-name>
    16. <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
    17. <async-supported>trueasync-supported>
    18. <init-param>
    19. <param-name>encodingparam-name>
    20. <param-value>UTF-8param-value>
    21. init-param>
    22. filter>
    23. <filter-mapping>
    24. <filter-name>encodingFilterfilter-name>
    25. <url-pattern>/*url-pattern>
    26. filter-mapping>
    27. <servlet>
    28. <servlet-name>SpringMVCservlet-name>
    29. <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
    30. <init-param>
    31. <param-name>contextConfigLocationparam-name>
    32. <param-value>classpath:spring-mvc.xmlparam-value>
    33. init-param>
    34. <load-on-startup>1load-on-startup>
    35. <async-supported>trueasync-supported>
    36. servlet>
    37. <servlet-mapping>
    38. <servlet-name>SpringMVCservlet-name>
    39. <url-pattern>/url-pattern>
    40. servlet-mapping>
    41. web-app>

    配置

    1、generatorConfig.xml

    1. "1.0" encoding="UTF-8" ?>
    2. generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
    3. "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
    4. <generatorConfiguration>
    5. <properties resource="jdbc.properties"/>
    6. <classPathEntry
    7. location="D:\\zking App\\mvn_repository\\mysql\\mysql-connector-java\\5.1.44\\mysql-connector-java-5.1.44.jar"/>
    8. <context id="infoGuardian">
    9. <commentGenerator>
    10. <property name="suppressAllComments" value="true"/>
    11. <property name="suppressDate" value="true"/>
    12. commentGenerator>
    13. <jdbcConnection driverClass="${jdbc.driver}"
    14. connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}"/>
    15. <javaTypeResolver>
    16. <property name="forceBigDecimals" value="false"/>
    17. javaTypeResolver>
    18. <javaModelGenerator targetProject="src/main/java" targetPackage="com.tgq.model">
    19. <property name="enableSubPackages" value="false"/>
    20. <property name="constructorBased" value="true"/>
    21. <property name="trimStrings" value="false"/>
    22. <property name="immutable" value="false"/>
    23. javaModelGenerator>
    24. <sqlMapGenerator targetProject="src/main/java" targetPackage="com.tgq.mapper">
    25. <property name="enableSubPackages" value="false"/>
    26. sqlMapGenerator>
    27. <javaClientGenerator targetProject="src/main/java" targetPackage="com.tgq.mapper" type="XMLMAPPER">
    28. <property name="enableSubPackages" value="false"/>
    29. <table schema="" tableName="t_struts_class" domainObjectName="StrutsClas"
    30. enableCountByExample="false" enableDeleteByExample="false"
    31. enableSelectByExample="false" enableUpdateByExample="false">
    32. table>
    33. context>
    34. generatorConfiguration>
    1. <classPathEntry
    2. location="D:\\zking App\\mvn_repository\\mysql\\mysql-connector-java\\5.1.44\\mysql-connector-java-5.1.44.jar"/>
    选择你本地的 mysql-connector-java-5.1.44.jar地址
    1. <table schema="" tableName="t_struts_class" domainObjectName="StrutsClas"
    2. enableCountByExample="false" enableDeleteByExample="false"
    3. enableSelectByExample="false" enableUpdateByExample="false">
    4. table>

    tableName属性里面写你的数据库表名

    domainObjectName属性里面写你的要生成的类名

    2、jdbc.properties

    1. jdbc.driver=com.mysql.jdbc.Driver
    2. jdbc.url=jdbc:mysql://localhost:3306/mybatis_ssm?useUnicode=true&characterEncoding=UTF-8
    3. jdbc.username=root
    4. jdbc.password=123456

    jdbc.username=root 数据库用户名
    jdbc.password=123456 数据库用户名密码

    3、log4j2.xml

    新建一个日志文件,用来保存日志

    1. "1.0" encoding="UTF-8"?>
    2. <Configuration status="WARN" monitorInterval="30">
    3. <Properties>
    4. <Property name="LOG_HOME">/root/workspace/lucenedemo/logsProperty>
    5. <property name="ERROR_LOG_FILE_NAME">/root/workspace/lucenedemo/logs/errorproperty>
    6. <property name="WARN_LOG_FILE_NAME">/root/workspace/lucenedemo/logs/warnproperty>
    7. <property name="PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS} [%t-%L] %-5level %logger{36} - %msg%nproperty>
    8. Properties>
    9. <Appenders>
    10. <Console name="Console" target="SYSTEM_OUT">
    11. <ThresholdFilter level="trace" onMatch="ACCEPT"
    12. onMismatch="DENY" />
    13. <PatternLayout pattern="${PATTERN}" />
    14. Console>
    15. <File name="log" fileName="logs/test.log" append="false">
    16. <PatternLayout
    17. pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
    18. File>
    19. <RollingFile name="RollingFileInfo" fileName="${LOG_HOME}/info.log"
    20. filePattern="${LOG_HOME}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
    21. <ThresholdFilter level="info" onMatch="ACCEPT"
    22. onMismatch="DENY" />
    23. <PatternLayout
    24. pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
    25. <Policies>
    26. <TimeBasedTriggeringPolicy interval="1"
    27. modulate="true" />
    28. Policies>
    29. RollingFile>
    30. <RollingFile name="RollingFileWarn" fileName="${WARN_LOG_FILE_NAME}/warn.log"
    31. filePattern="${WARN_LOG_FILE_NAME}/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
    32. <ThresholdFilter level="warn" onMatch="ACCEPT"
    33. onMismatch="DENY" />
    34. <PatternLayout
    35. pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
    36. <Policies>
    37. <TimeBasedTriggeringPolicy />
    38. <SizeBasedTriggeringPolicy size="2 kB" />
    39. Policies>
    40. <DefaultRolloverStrategy max="20" />
    41. RollingFile>
    42. <RollingFile name="RollingFileError" fileName="${ERROR_LOG_FILE_NAME}/error.log"
    43. filePattern="${ERROR_LOG_FILE_NAME}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd-HH-mm}-%i.log">
    44. <ThresholdFilter level="error" onMatch="ACCEPT"
    45. onMismatch="DENY" />
    46. <PatternLayout
    47. pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
    48. <Policies>
    49. <TimeBasedTriggeringPolicy interval="1"
    50. modulate="true" />
    51. Policies>
    52. RollingFile>
    53. Appenders>
    54. <Loggers>
    55. <logger name="org.springframework" level="INFO">logger>
    56. <logger name="org.mybatis" level="INFO">logger>
    57. <logger name="org.springframework" level="ERROR" />
    58. <logger name="org.hibernate" level="ERROR" />
    59. <logger name="org.apache.struts2" level="ERROR" />
    60. <logger name="com.opensymphony.xwork2" level="ERROR" />
    61. <logger name="org.jboss" level="ERROR" />
    62. <root level="all">
    63. <appender-ref ref="Console" />
    64. <appender-ref ref="RollingFileInfo" />
    65. <appender-ref ref="RollingFileWarn" />
    66. <appender-ref ref="RollingFileError" />
    67. root>
    68. Loggers>
    69. Configuration>

    4、spring-context.xml

    1. "1.0" encoding="UTF-8"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    5. <import resource="classpath:spring-mybatis.xml">import>
    6. beans>

    5、spring-mvc.xml

    1. "1.0" encoding="UTF-8"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xmlns:context="http://www.springframework.org/schema/context"
    5. xmlns:aop="http://www.springframework.org/schema/aop"
    6. xmlns:mvc="http://www.springframework.org/schema/mvc"
    7. xsi:schemaLocation="http://www.springframework.org/schema/beans
    8. http://www.springframework.org/schema/beans/spring-beans.xsd
    9. http://www.springframework.org/schema/context
    10. http://www.springframework.org/schema/context/spring-context-4.3.xsd
    11. http://www.springframework.org/schema/aop
    12. http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
    13. http://www.springframework.org/schema/mvc
    14. http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    15. <context:component-scan base-package="com.tgq"/>
    16. <mvc:annotation-driven/>
    17. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    18. <property name="viewClass"
    19. value="org.springframework.web.servlet.view.JstlView">property>
    20. <property name="prefix" value="/WEB-INF/jsp/"/>
    21. <property name="suffix" value=".jsp"/>
    22. bean>
    23. <aop:aspectj-autoproxy/>
    24. beans>

    6、spring-mybatis.xml

    1. "1.0" encoding="UTF-8"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
    5. xmlns:aop="http://www.springframework.org/schema/aop"
    6. xsi:schemaLocation="http://www.springframework.org/schema/beans
    7. http://www.springframework.org/schema/beans/spring-beans.xsd
    8. http://www.springframework.org/schema/context
    9. 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">
    10. <context:annotation-config/>
    11. <context:component-scan base-package="com.tgq"/>
    12. <context:property-placeholder location="classpath:jdbc.properties"/>
    13. <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"
    14. destroy-method="close">
    15. <property name="driverClassName" value="${jdbc.driver}"/>
    16. <property name="url" value="${jdbc.url}"/>
    17. <property name="username" value="${jdbc.username}"/>
    18. <property name="password" value="${jdbc.password}"/>
    19. <property name="initialSize" value="10"/>
    20. <property name="maxTotal" value="100"/>
    21. <property name="maxIdle" value="50"/>
    22. <property name="minIdle" value="10"/>
    23. <property name="maxWaitMillis" value="-1"/>
    24. bean>
    25. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    26. <property name="dataSource" ref="dataSource"/>
    27. <property name="mapperLocations" value="classpath*:com/tgq/**/mapper/*.xml"/>
    28. <property name="typeAliasesPackage" value="com/tgq/**/model"/>
    29. <property name="plugins">
    30. <array>
    31. <bean class="com.github.pagehelper.PageInterceptor">
    32. <property name="properties">
    33. <value>
    34. helperDialect=mysql
    35. value>
    36. property>
    37. bean>
    38. array>
    39. property>
    40. bean>
    41. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    42. <property name="basePackage" value="com/tgq/**/mapper"/>
    43. <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    44. bean>
    45. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    46. <property name="dataSource" ref="dataSource"/>
    47. bean>
    48. <tx:annotation-driven transaction-manager="transactionManager"/>
    49. <aop:aspectj-autoproxy/>
    50. beans>

    三、后端代码

    1、逆向生成代码

    右键

    会生成两个包

    1)、实体类

    当然可以根据自己的sql表来对比

    1. package com.tgq.model;
    2. import lombok.ToString;
    3. @ToString
    4. public class StrutsClas {
    5. private Integer cid;
    6. private String cname;
    7. private String cteacher;
    8. private String pic;
    9. public StrutsClas(Integer cid, String cname, String cteacher, String pic) {
    10. this.cid = cid;
    11. this.cname = cname;
    12. this.cteacher = cteacher;
    13. this.pic = pic;
    14. }
    15. public StrutsClas() {
    16. super();
    17. }
    18. public Integer getCid() {
    19. return cid;
    20. }
    21. public void setCid(Integer cid) {
    22. this.cid = cid;
    23. }
    24. public String getCname() {
    25. return cname;
    26. }
    27. public void setCname(String cname) {
    28. this.cname = cname;
    29. }
    30. public String getCteacher() {
    31. return cteacher;
    32. }
    33. public void setCteacher(String cteacher) {
    34. this.cteacher = cteacher;
    35. }
    36. public String getPic() {
    37. return pic;
    38. }
    39. public void setPic(String pic) {
    40. this.pic = pic;
    41. }
    42. }

    2)、生成的xml文件

    在生成好的sqlxml文件里面新添加一个

    1. <select id="selectPager" resultType="com.tgq.model.StrutsClas" parameterType="com.tgq.model.StrutsClas">
    2. select * from t_struts_class
    3. <where>
    4. <if test="cname != null"/>
    5. and cname like concat('%',#{cname},'%')
    6. where>
    7. select>

    3)、生成的接口类

    根据上面的xml配置文件生成接口方法

    List selectPager(StrutsClas strutsClas);

    1. package com.tgq.mapper;
    2. import com.tgq.model.StrutsClas;
    3. import org.springframework.stereotype.Repository;
    4. import java.util.List;
    5. @Repository
    6. public interface StrutsClasMapper {
    7. int deleteByPrimaryKey(Integer cid);
    8. int insert(StrutsClas record);
    9. int insertSelective(StrutsClas record);
    10. StrutsClas selectByPrimaryKey(Integer cid);
    11. int updateByPrimaryKeySelective(StrutsClas record);
    12. int updateByPrimaryKey(StrutsClas record);
    13. List selectPager(StrutsClas strutsClas);
    14. }

    2、导入资源

    当然可以根据自己的学习成果来确认需不需要

    1)、切面类

    1. package com.tgq.aspect;
    2. import com.github.pagehelper.PageHelper;
    3. import com.github.pagehelper.PageInfo;
    4. import com.tgq.utils.PageBean;
    5. import org.aspectj.lang.ProceedingJoinPoint;
    6. import org.aspectj.lang.annotation.Around;
    7. import org.aspectj.lang.annotation.Aspect;
    8. import org.springframework.stereotype.Component;
    9. import java.util.List;
    10. /**
    11. * @软件包名 com.tgq.aspect
    12. * @用户 tgq
    13. * @create 2023-08-25 下午9:26
    14. * @注释说明:
    15. */
    16. @Aspect //代表当前类为切面类
    17. @Component //代表该类交给spring进行管理
    18. public class PagerAspect {
    19. /**
    20. * * *..*biz.*Pager(..)
    21. * * : 任意返回值
    22. * *..: 任意版本 不限层级
    23. * *biz :以biz结尾的接口/类
    24. * *Pager :以pager结尾的方法
    25. * .. :任意参数
    26. *

    27. * 符合条件,就是目标或者目标方法
    28. *
    29. * @param args
    30. * @return
    31. * @throws Throwable
    32. */
    33. @Around("execution(* *..*Biz.*Pager(..))")
    34. public Object invoke(ProceedingJoinPoint args) throws Throwable {
    35. // 获取目标方法中的所有参数
    36. Object[] params = args.getArgs();
    37. PageBean pageBean = null;
    38. for (Object param : params) {
    39. if (param instanceof PageBean) {
    40. // 强转
    41. pageBean = (PageBean) param;
    42. break;
    43. }
    44. }
    45. if (pageBean != null && pageBean.isPagination())
    46. PageHelper.startPage(pageBean.getPage(), pageBean.getRows());
    47. //执行目标方法
    48. Object list = args.proceed(params);
    49. if (null != pageBean && pageBean.isPagination()) {
    50. PageInfo pageInfo = new PageInfo((List) list);
    51. pageBean.setTotal((int) pageInfo.getTotal());
    52. }
    53. return list;
    54. }
    55. }

    2)、分页类

    1. package com.tgq.tag;
    2. import com.tgq.utils.PageBean;
    3. import javax.servlet.jsp.JspException;
    4. import javax.servlet.jsp.JspWriter;
    5. import javax.servlet.jsp.tagext.BodyTagSupport;
    6. import java.io.IOException;
    7. import java.util.Map;
    8. import java.util.Map.Entry;
    9. import java.util.Set;
    10. public class PageTag extends BodyTagSupport {
    11. private PageBean pageBean;// 包含了所有分页相关的元素
    12. public PageBean getPageBean() {
    13. return pageBean;
    14. }
    15. public void setPageBean(PageBean pageBean) {
    16. this.pageBean = pageBean;
    17. }
    18. @Override
    19. public int doStartTag() throws JspException {
    20. // 没有标签体,要输出内容
    21. JspWriter out = pageContext.getOut();
    22. try {
    23. out.print(toHTML());
    24. } catch (IOException e) {
    25. e.printStackTrace();
    26. }
    27. return super.doStartTag();
    28. }
    29. private String toHTML() {
    30. StringBuffer sb = new StringBuffer();
    31. // 隐藏的form表单---这个就是上一次请求下次重新发的奥义所在
    32. // 上一次请求的URL
    33. sb.append("
      ");
    34. sb.append(" ");
    35. // 上一次请求的参数
    36. Map paramMap = pageBean.getMap();
    37. if (paramMap != null && paramMap.size() > 0) {
    38. Set> entrySet = paramMap.entrySet();
    39. for (Entry entry : entrySet) {
    40. // 参数名
    41. String key = entry.getKey();
    42. // 参数值
    43. for (String value : entry.getValue()) {
    44. // 上一次请求的参数,再一次组装成了新的Form表单
    45. // 注意:page参数每次都会提交,我们需要避免
    46. if (!"page".equals(key)) {
    47. sb.append(" ");
    48. }
    49. }
    50. }
    51. }
    52. sb.append("");
    53. // 分页条
    54. sb.append("
        ");
    55. sb.append("
    56. );
  • ");
  • sb.append("
  • );
  • ");// less than 小于号
  • // sb.append("
  • 1
  • ");
  • // sb.append("
  • 2
  • ");
  • sb.append("
  • " + pageBean.getPage() + "
  • ");
  • sb.append("
  • >
  • ");
  • sb.append("
  • 尾页
  • ");
  • sb.append("
  • 到第);
  • sb.append(" type='text' id='skipPage' name='' />
  • ");
  • sb.append("
  • );
  • ");
  • sb.append("
  • 共" + pageBean.getTotal() + "条
  • ");
  • sb.append("");
  • // 分页执行的JS代码
  • sb.append("");
  • return sb.toString();
  • }
  • }
  • 3)、分页实现类

    1. package com.tgq.utils;
    2. import javax.servlet.http.HttpServletRequest;
    3. import java.io.Serializable;
    4. import java.util.Map;
    5. public class PageBean implements Serializable {
    6. private static final long serialVersionUID = 2422581023658455731L;
    7. //页码
    8. private int page=1;
    9. //每页显示记录数
    10. private int rows=10;
    11. //总记录数
    12. private int total=0;
    13. //是否分页
    14. private boolean isPagination=true;
    15. //上一次的请求路径
    16. private String url;
    17. //获取所有的请求参数
    18. private Map map;
    19. public PageBean() {
    20. super();
    21. }
    22. //设置请求参数
    23. public void setRequest(HttpServletRequest req) {
    24. String page=req.getParameter("page");
    25. String rows=req.getParameter("rows");
    26. String pagination=req.getParameter("pagination");
    27. this.setPage(page);
    28. this.setRows(rows);
    29. this.setPagination(pagination);
    30. this.url=req.getContextPath()+req.getServletPath();
    31. this.map=req.getParameterMap();
    32. }
    33. public String getUrl() {
    34. return url;
    35. }
    36. public void setUrl(String url) {
    37. this.url = url;
    38. }
    39. public Map getMap() {
    40. return map;
    41. }
    42. public void setMap(Map map) {
    43. this.map = map;
    44. }
    45. public int getPage() {
    46. return page;
    47. }
    48. public void setPage(int page) {
    49. this.page = page;
    50. }
    51. public void setPage(String page) {
    52. if(null!=page&&!"".equals(page.trim()))
    53. this.page = Integer.parseInt(page);
    54. }
    55. public int getRows() {
    56. return rows;
    57. }
    58. public void setRows(int rows) {
    59. this.rows = rows;
    60. }
    61. public void setRows(String rows) {
    62. if(null!=rows&&!"".equals(rows.trim()))
    63. this.rows = Integer.parseInt(rows);
    64. }
    65. public int getTotal() {
    66. return total;
    67. }
    68. public void setTotal(int total) {
    69. this.total = total;
    70. }
    71. public void setTotal(String total) {
    72. this.total = Integer.parseInt(total);
    73. }
    74. public boolean isPagination() {
    75. return isPagination;
    76. }
    77. public void setPagination(boolean isPagination) {
    78. this.isPagination = isPagination;
    79. }
    80. public void setPagination(String isPagination) {
    81. if(null!=isPagination&&!"".equals(isPagination.trim()))
    82. this.isPagination = Boolean.parseBoolean(isPagination);
    83. }
    84. /**
    85. * 获取分页起始标记位置
    86. * @return
    87. */
    88. public int getStartIndex() {
    89. //(当前页码-1)*显示记录数
    90. return (this.getPage()-1)*this.rows;
    91. }
    92. /**
    93. * 末页
    94. * @return
    95. */
    96. public int getMaxPage() {
    97. int totalpage=this.total/this.rows;
    98. if(this.total%this.rows!=0)
    99. totalpage++;
    100. return totalpage;
    101. }
    102. /**
    103. * 下一页
    104. * @return
    105. */
    106. public int getNextPage() {
    107. int nextPage=this.page+1;
    108. if(this.page>=this.getMaxPage())
    109. nextPage=this.getMaxPage();
    110. return nextPage;
    111. }
    112. /**
    113. * 上一页
    114. * @return
    115. */
    116. public int getPreivousPage() {
    117. int previousPage=this.page-1;
    118. if(previousPage<1)
    119. previousPage=1;
    120. return previousPage;
    121. }
    122. @Override
    123. public String toString() {
    124. return "PageBean [page=" + page + ", rows=" + rows + ", total=" + total + ", isPagination=" + isPagination
    125. + "]";
    126. }
    127. }

    3、配置tld文件

    用来管理分页的标签文件

    1. "1.0" encoding="UTF-8" ?>
    2. "http://java.sun.com/xml/ns/j2ee"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
    5. version="2.0">
    6. tgq 1.1 core library
    7. tgq core
    8. 1.1
    9. <short-name>tgqshort-name>
    10. http://jsp.veryedu.cn
    11. page
    12. com.tgq.tag.PageTag
    13. JSP
    14. pageBean
    15. true
    16. true

    4、编写biz、impl层

    1. package com.tgq.biz;
    2. import com.tgq.model.StrutsClas;
    3. import com.tgq.utils.PageBean;
    4. import java.util.List;
    5. /**
    6. * @软件包名 com.tgq.biz.impl
    7. * @用户 tgq
    8. * @create 2023-09-08 下午5:59
    9. * @注释说明:
    10. */
    11. public interface StrutsClasBiz {
    12. int deleteByPrimaryKey(Integer cid);
    13. int insert(StrutsClas record);
    14. int insertSelective(StrutsClas record);
    15. StrutsClas selectByPrimaryKey(Integer cid);
    16. int updateByPrimaryKeySelective(StrutsClas record);
    17. int updateByPrimaryKey(StrutsClas record);
    18. List selectPager(StrutsClas clas, PageBean pageBean);
    19. }
    1. package com.tgq.biz.impl;
    2. import com.tgq.biz.StrutsClasBiz;
    3. import com.tgq.mapper.StrutsClasMapper;
    4. import com.tgq.model.StrutsClas;
    5. import com.tgq.utils.PageBean;
    6. import org.springframework.beans.factory.annotation.Autowired;
    7. import org.springframework.stereotype.Service;
    8. import java.util.List;
    9. /**
    10. * @软件包名 com.tgq.biz.impl
    11. * @用户 tgq
    12. * @create 2023-09-08 下午8:23
    13. * @注释说明:
    14. */
    15. @Service
    16. public class StrutsClasBizImpl implements StrutsClasBiz {
    17. @Autowired
    18. private StrutsClasMapper strutsClasMapper;
    19. @Override
    20. public int deleteByPrimaryKey(Integer cid) {
    21. return strutsClasMapper.deleteByPrimaryKey(cid);
    22. }
    23. @Override
    24. public int insert(StrutsClas record) {
    25. return strutsClasMapper.insert(record);
    26. }
    27. @Override
    28. public int insertSelective(StrutsClas record) {
    29. return strutsClasMapper.insertSelective(record);
    30. }
    31. @Override
    32. public StrutsClas selectByPrimaryKey(Integer cid) {
    33. return strutsClasMapper.selectByPrimaryKey(cid);
    34. }
    35. @Override
    36. public int updateByPrimaryKeySelective(StrutsClas record) {
    37. return strutsClasMapper.updateByPrimaryKeySelective(record);
    38. }
    39. @Override
    40. public int updateByPrimaryKey(StrutsClas record) {
    41. return strutsClasMapper.updateByPrimaryKey(record);
    42. }
    43. @Override
    44. public List selectPager(StrutsClas clas, PageBean pageBean) {
    45. return strutsClasMapper.selectPager(clas);
    46. }
    47. }

    5、web层

    添加

    @Controller :需要实现接口
    @RequestMapping("/sc") :里面的路径根据自己的习惯来进行

    @Autowired : 实例化biz层需要用到的

    编写五个方法:增上改查 数据回显

    1. package com.tgq.web;
    2. import com.tgq.biz.StrutsClasBiz;
    3. import com.tgq.model.StrutsClas;
    4. import com.tgq.utils.PageBean;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import org.springframework.stereotype.Controller;
    7. import org.springframework.ui.Model;
    8. import org.springframework.web.bind.annotation.RequestMapping;
    9. import javax.servlet.http.HttpServletRequest;
    10. import java.util.List;
    11. /**
    12. * @软件包名 com.tgq.web
    13. * @用户 tgq
    14. * @create 2023-09-08 下午8:58
    15. * @注释说明:
    16. */
    17. @Controller
    18. @RequestMapping("/sc")
    19. public class StrutsClasController {
    20. @Autowired
    21. private StrutsClasBiz strutsClasBiz;
    22. /**
    23. * 增加
    24. *
    25. * @param strutsClas
    26. * @return
    27. */
    28. @RequestMapping("/add")
    29. public String insertSelective(StrutsClas strutsClas) {
    30. strutsClasBiz.insertSelective(strutsClas);
    31. return "redirect:list";
    32. }
    33. // @DeleteMapping("/del/{cid}")
    34. // public String deleteByPrimaryKey(@PathVariable Integer cid) {
    35. /**
    36. * 删除
    37. *
    38. * @param strutsClas
    39. * @return
    40. */
    41. @RequestMapping("/del")
    42. public String deleteByPrimaryKey(StrutsClas strutsClas) {
    43. strutsClasBiz.deleteByPrimaryKey(strutsClas.getCid());
    44. return "redirect:list";
    45. }
    46. /**
    47. * 修改
    48. *
    49. * @param strutsClas
    50. * @return
    51. */
    52. @RequestMapping("/edit")
    53. public String updateByPrimaryKeySelective(StrutsClas strutsClas) {
    54. strutsClasBiz.updateByPrimaryKeySelective(strutsClas);
    55. return "redirect:list";
    56. }
    57. @RequestMapping("/list")
    58. public String list(StrutsClas strutsClas, HttpServletRequest request) {
    59. PageBean pageBean = new PageBean();
    60. pageBean.setRequest(request);
    61. List strutsClas1 = strutsClasBiz.selectPager(strutsClas, pageBean);
    62. request.setAttribute("list", strutsClas1);
    63. request.setAttribute("pageBean", pageBean);
    64. return "sc/list";
    65. }
    66. /**
    67. * 数据回显
    68. *
    69. * @param strutsClas
    70. * @param model
    71. * @return
    72. */
    73. @RequestMapping("/save")
    74. public String save(StrutsClas strutsClas, Model model) {
    75. if (strutsClas != null && strutsClas.getCid() != null && strutsClas.getCid() != 0) {
    76. StrutsClas strutsClas1 = strutsClasBiz.selectByPrimaryKey(strutsClas.getCid());
    77. model.addAttribute("s", strutsClas1);
    78. }
    79. return "sc/edit";
    80. }
    81. }

    四、前端代码

    根据自己的习惯来进行一个地方的修改

    1、首页数据访问

    1. <%@ page language="java" contentType="text/html; charset=UTF-8"
    2. pageEncoding="UTF-8" %>
    3. <%@ taglib uri="http://jsp.veryedu.cn" prefix="z" %>
    4. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    5. html>
    6. <html>
    7. <head>
    8. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    9. <link
    10. href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.css"
    11. rel="stylesheet">
    12. <script
    13. src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/js/bootstrap.js">script>
    14. <title>列表title>
    15. <style type="text/css">
    16. .page-item input {
    17. padding: 0;
    18. width: 40px;
    19. height: 100%;
    20. text-align: center;
    21. margin: 0 6px;
    22. }
    23. .page-item input, .page-item b {
    24. line-height: 38px;
    25. float: left;
    26. font-weight: 400;
    27. }
    28. .page-item.go-input {
    29. margin: 0 10px;
    30. }
    31. style>
    32. head>
    33. <body>
    34. <form class="form-inline"
    35. action="${pageContext.request.contextPath }/sc/list" method="post">
    36. <div class="form-group mb-2">
    37. <input type="text" class="form-control-plaintext" name="cname"
    38. placeholder="请输入名称">
    39. <input name="pagination" value="false" type="hidden">
    40. div>
    41. <button type="submit" class="btn btn-primary mb-2">查询button>
    42. <a class="btn btn-primary mb-2" href="${pageContext.request.contextPath }/sc/save">新增a>
    43. form>
    44. <table class="table table-striped">
    45. <thead>
    46. <tr>
    47. <th scope="col">编号th>
    48. <th scope="col">班级名th>
    49. <th scope="col">教师th>
    50. <th scope="col">Logoth>
    51. <th scope="col">操作th>
    52. tr>
    53. thead>
    54. <tbody>
    55. <c:forEach var="b" items="${list }">
    56. <tr>
    57. <td>${b.cid }td>
    58. <td>${b.cname }td>
    59. <td>${b.cteacher }td>
    60. <td>${b.pic }td>
    61. <td>
    62. <a href="${pageContext.request.contextPath }/sc/save?cid=${b.cid}">修改a>
    63. <a href="${pageContext.request.contextPath }/sc/del?cid=${b.cid}">删除a>
    64. td>
    65. tr>
    66. c:forEach>
    67. tbody>
    68. table>
    69. <z:page pageBean="${pageBean }">z:page>
    70. body>
    71. html>

    需要修改的地方就是一个自己表里面的属性名称和一个访问路径

    2、edit前端

    1. <%@ page language="java" contentType="text/html; charset=UTF-8"
    2. pageEncoding="UTF-8" %>
    3. html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    4. <html>
    5. <head>
    6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    7. <title>编辑界面title>
    8. head>
    9. <body>
    10. <form action="${pageContext.request.contextPath }/${empty s ? 'sc/add' : 'sc/edit'}" method="post">
    11. 编辑编号:<input type="text" name="cid" value="${s.cid }"><br>
    12. 班级名:<input type="text" name="cname" value="${s.cname }"><br>
    13. 教师:<input type="text" name="cteacher" value="${s.cteacher }"><br>
    14. <input type="submit">
    15. form>
    16. body>
    17. html>

    五、测试结果

    1、数据回显

    2、edit

  • 相关阅读:
    C语言-const char*,char const*,char *const理解
    C++实现坦克大战(超详细)(文末附源码!!!)
    GNN Tensorflow packages
    Spark:性能调优实战
    运算符与逻辑分支
    js中this的指向
    达人评测 锐龙r7 6800u和r5 6600h差距 r76800u和r56600h对比
    录制线上课程,有哪些形式,到底使用什么软件好?
    sql 7
    【python】list 删除列表中某个元素的3种方法;附加删除numpy数组中的指定索引元素的方法
  • 原文地址:https://blog.csdn.net/weixin_74383330/article/details/132733852