欢迎来到山村网

Spring + Spring MVC + Mybatis 高性能web构建实例教程详解

2019-03-09 12:10:29浏览:378 来源:山村网   
核心摘要:  用最合适的技术去实现,并不断追求最佳实践。这就是架构之道。  希望这篇文章能给你们带来一些帮助,同时希望你们可以为这

  用最合适的技术去实现,并不断追求最佳实践。这就是架构之道。

  希望这篇文章能给你们带来一些帮助,同时希望你们可以为这个项目贡献你的想法。

  源码地址:https://github.com/Eliteams/quick4j 点击打开

  源码地址:https://github.com/Eliteams/quick4j 点击打开

  源码地址:https://github.com/Eliteams/quick4j 点击打开

  看我们的项目结构:

Spring + Spring MVC + Mybatis 高性能web构建实例教程详解 山村

  是一个典型的Maven 项目 :

  src/main/Java:存放java源文件

  src/main/resources:存放程序资源、配置文件

  src/test/java:存放测试代码文件

  src/main/webapp:web根目录

  pom.xml : maven项目配置文件,管理依赖,编译,打包

  主要的后端架构:spring + Spring MVC + Mybatis + Apache Shiro

  前端界面主要使用Metronic 模板,

  先看我们搭建完成,跑起来的效果,这样你才有兴趣看下去:

  你可以 在github 上 checkout quick4j项目 查看 ,并跟下面步骤 来搭建:

  强烈建议你,checkout https://github.com/Eliteams/quick4j ,在本地跑起来,再试着自己搭建框架

  1、首先创建 maven 项目 ,用 idea 、eclipse 或 mvn 命令行都行

  2、配置 pom.xml ,添加框架依赖

<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/maven-v4_0_0.xsd">   <modelVersion>4.0.0</modelVersion>   <groupId>com.eliteams</groupId>   <artifactId>quick4j</artifactId>   <packaging>war</packaging>   <version>1.0.0</version>   <name>quick4j App</name>   <url>https://github.com/starzou/quick4j</url>   <build>     <finalName>quick4j</finalName>     <plugins>       <!-- Mybatis generator代码生成插件 配置 -->       <plugin>         <groupId>org.mybatis.generator</groupId>         <artifactId>mybatis-generator-maven-plugin</artifactId>         <version>${plugin.mybatis.generator}</version>         <configuration>           <configurationFile>${mybatis.generator.generatorConfig.xml}</configurationFile>           <overwrite>true</overwrite>           <verbose>true</verbose>         </configuration>       </plugin>       <!--Maven编译插件 配置-->       <plugin>         <groupId>org.apache.maven.plugins</groupId>         <artifactId>maven-compiler-plugin</artifactId>         <version>${plugin.maven-compiler}</version>         <configuration>           <source>${project.build.jdk}</source>           <target>${project.build.jdk}</target>           <encoding>${project.build.sourceEncoding}</encoding>         </configuration>       </plugin>     </plugins>     <!--配置Maven 对resource文件 过滤 -->     <resources>       <resource>         <directory>src/main/resources</directory>         <includes>           <include>***.xml</include>         </includes>         <filtering>true</filtering>       </resource>       <resource>         <directory>src/main/java</directory>         <includes>           <include>***.xml</include>         </includes>         <filtering>true</filtering>       </resource>     </resources>   </build>   <properties>     <!-- base setting -->     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>     <project.build.locales>zh_CN</project.build.locales>     <project.build.jdk>1.7</project.build.jdk>     <!-- plugin setting -->     <mybatis.generator.generatorConfig.xml>${basedir}/src/test/resources/generatorConfig.xml</mybatis.generator.generatorConfig.xml>     <mybatis.generator.generatorConfig.properties>file:///${basedir}/src/test/resources/generatorConfig.properties</mybatis.generator.generatorConfig.properties>     <!-- plugin versions -->     <plugin.mybatis.generator>1.3.1</plugin.mybatis.generator>     <plugin.maven-compiler>3.1</plugin.maven-compiler>     <!-- lib versions -->     <junit.version>4.11</junit.version>     <spring.version>4.0.2.RELEASE</spring.version>     <mybatis.version>3.2.2</mybatis.version>     <mybatis.spring.version>1.2.2</mybatis.spring.version>     <mysql.connector.version>5.1.30</mysql.connector.version>     <postgresql.version>9.1-901.jdbc4</postgresql.version>     <slf4j.version>1.6.6</slf4j.version>     <log4j.version>1.2.12</log4j.version>     <httpclient.version>4.1.2</httpclient.version>     <jackson.version>1.9.13</jackson.version>     <c3p0.version>0.9.1.2</c3p0.version>     <druid.version>1.0.5</druid.version>     <tomcat.jdbc.version>7.0.53</tomcat.jdbc.version>     <jstl.version>1.2</jstl.version>     <google.collections.version>1.0</google.collections.version>     <cglib.version>3.1</cglib.version>     <shiro.version>1.2.3</shiro.version>     <commons.fileupload.version>1.3.1</commons.fileupload.version>     <commons.codec.version>1.9</commons.codec.version>     <commons.net.version>3.3</commons.net.version>     <aspectj.version>1.6.12</aspectj.version>     <netty.version>4.0.18.Final</netty.version>     <hibernate.validator.version>5.1.1.Final</hibernate.validator.version>   </properties>   <dependencies>     <!-- junit -->     <dependency>       <groupId>junit</groupId>       <artifactId>junit</artifactId>       <version>${junit.version}</version>     </dependency>     <!-- springframe start -->     <dependency>       <groupId>org.springframework</groupId>       <artifactId>spring-core</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-oxm</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-jdbc</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-aop</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>     <!-- springframe end -->     <!-- mybatis start-->     <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>     <!--mybatis end-->     <!-- mysql-connector -->     <dependency>       <groupId>mysql</groupId>       <artifactId>mysql-connector-java</artifactId>       <version>${mysql.connector.version}</version>     </dependency>     <!-- DruidDataSource -->     <dependency>       <groupId>com.alibaba</groupId>       <artifactId>druid</artifactId>       <version>${druid.version}</version>     </dependency>     <!-- jackson -->     <dependency>       <groupId>org.codehaus.jackson</groupId>       <artifactId>jackson-mapper-asl</artifactId>       <version>${jackson.version}</version>     </dependency>     <!-- log start -->     <dependency>       <groupId>log4j</groupId>       <artifactId>log4j</artifactId>       <version>${log4j.version}</version>     </dependency>     <dependency>       <groupId>org.slf4j</groupId>       <artifactId>slf4j-api</artifactId>       <version>${slf4j.version}</version>     </dependency>     <dependency>       <groupId>org.slf4j</groupId>       <artifactId>slf4j-log4j12</artifactId>       <version>${slf4j.version}</version>     </dependency>     <!-- log end -->     <!-- servlet api -->     <dependency>       <groupId>javax.servlet</groupId>       <artifactId>javax.servlet-api</artifactId>       <version>3.0.1</version>       <scope>provided</scope>     </dependency>     <!-- jstl -->     <dependency>       <groupId>javax.servlet</groupId>       <artifactId>jstl</artifactId>       <version>${jstl.version}</version>     </dependency>     <!-- start apache -->     <dependency>       <groupId>commons-fileupload</groupId>       <artifactId>commons-fileupload</artifactId>       <version>${commons.fileupload.version}</version>     </dependency>     <dependency>       <groupId>org.apache.httpcomponents</groupId>       <artifactId>httpclient</artifactId>       <version>${httpclient.version}</version>     </dependency>     <dependency>       <groupId>commons-codec</groupId>       <artifactId>commons-codec</artifactId>       <version>${commons.codec.version}</version>     </dependency>     <dependency>       <groupId>commons-net</groupId>       <artifactId>commons-net</artifactId>       <version>${commons.net.version}</version>     </dependency>     <dependency>       <groupId>commons-logging</groupId>       <artifactId>commons-logging</artifactId>       <version>1.1.3</version>     </dependency>     <dependency>       <groupId>commons-collections</groupId>       <artifactId>commons-collections</artifactId>       <version>3.2.1</version>     </dependency>     <!-- end apache -->     <!-- google -->     <dependency>       <groupId>com.google.collections</groupId>       <artifactId>google-collections</artifactId>       <version>${google.collections.version}</version>     </dependency>     <!-- cglib -->     <dependency>       <groupId>cglib</groupId>       <artifactId>cglib-nodep</artifactId>       <version>${cglib.version}</version>     </dependency>     <!-- shiro -->     <dependency>       <groupId>org.apache.shiro</groupId>       <artifactId>shiro-spring</artifactId>       <version>${shiro.version}</version>     </dependency>     <dependency>       <groupId>org.apache.shiro</groupId>       <artifactId>shiro-ehcache</artifactId>       <version>${shiro.version}</version>     </dependency>     <dependency>       <groupId>org.apache.shiro</groupId>       <artifactId>shiro-core</artifactId>       <version>${shiro.version}</version>     </dependency>     <dependency>       <groupId>org.apache.shiro</groupId>       <artifactId>shiro-web</artifactId>       <version>${shiro.version}</version>     </dependency>     <dependency>       <groupId>org.apache.shiro</groupId>       <artifactId>shiro-quartz</artifactId>       <version>${shiro.version}</version>     </dependency>     <!-- aspectjweaver -->     <dependency>       <groupId>org.aspectj</groupId>       <artifactId>aspectjweaver</artifactId>       <version>${aspectj.version}</version>     </dependency>     <dependency>       <groupId>org.aspectj</groupId>       <artifactId>aspectjrt</artifactId>       <version>${aspectj.version}</version>     </dependency>     <!-- hibernate-validator -->     <dependency>       <groupId>org.hibernate</groupId>       <artifactId>hibernate-validator</artifactId>       <version>${hibernate.validator.version}</version>     </dependency>     <!-- netty -->     <dependency>       <groupId>io.netty</groupId>       <artifactId>netty-all</artifactId>       <version>${netty.version}</version>     </dependency>     <dependency>       <groupId>org.mybatis.generator</groupId>       <artifactId>mybatis-generator-core</artifactId>       <version>1.3.2</version>       <type>jar</type>       <scope>test</scope>     </dependency>   </dependencies> </project> 

3、配置web.xml

web.xml是一个项目的核心,看看它的一些配置:

配置 ContextLoaderListener 监听器

配置Spring字符编码过滤器

配置shiro 安全过滤器

配置Spring MVC 核心控制器 DispatcherServlet

配置一些页面

spring 和 apache shiro 是由一个 ContextLoaderListener 监听器 加载的配置文件,并初始化

<?xml version="1.0" encoding="utf-8"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" version="2.4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"      xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">   <!-- Spring -->   <!-- 配置Spring配置文件路径 -->   <context-param>     <param-name>contextConfigLocation</param-name>     <param-value>       classpath*:applicationContext.xml       classpath*:applicationContext-shiro.xml     </param-value>   </context-param>   <!-- 配置Spring上下文监听器 -->   <listener>     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>   </listener>   <!-- Spring -->   <!-- 配置Spring字符编码过滤器 -->   <filter>     <filter-name>encodingFilter</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>     <init-param>       <param-name>forceEncoding</param-name>       <param-value>true</param-value>     </init-param>   </filter>   <filter-mapping>     <filter-name>encodingFilter</filter-name>     <url-pattern> ; ; ; ; ; ; CREATE DATAbase `quick4j` ; USE `quick4j`;  DROP TABLE IF EXISTS `permission`; CREATE TABLE `permission` (  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '权限id',  `permission_name` varchar(32) DEFAULT NULL COMMENT '权限名',  `permission_sign` varchar(128) DEFAULT NULL COMMENT '权限标识,程序中判断使用,如"user:create"',  `description` varchar(256) DEFAULT NULL COMMENT '权限描述,UI界面显示使用',  PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC COMMENT='权限表';  insert into `permission`(`id`,`permission_name`,`permission_sign`,`description`) values (1,'用户新增','user:create',NULL);  DROP TABLE IF EXISTS `role`; CREATE TABLE `role` (  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '角色id',  `role_name` varchar(32) DEFAULT NULL COMMENT '角色名',  `role_sign` varchar(128) DEFAULT NULL COMMENT '角色标识,程序中判断使用,如"admin"',  `description` varchar(256) DEFAULT NULL COMMENT '角色描述,UI界面显示使用',  PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC COMMENT='角色表';  insert into `role`(`id`,`role_name`,`role_sign`,`description`) values (1,'admin','admin','管理员');  DROP TABLE IF EXISTS `role_permission`; CREATE TABLE `role_permission` (  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '表id',  `role_id` bigint(20) unsigned DEFAULT NULL COMMENT '角色id',  `permission_id` bigint(20) unsigned DEFAULT NULL COMMENT '权限id',  PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC COMMENT='角色与权限关联表';  insert into `role_permission`(`id`,`role_id`,`permission_id`) values (1,2,1);  DROP TABLE IF EXISTS `user`; CREATE TABLE `user` (  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户id',  `username` varchar(50) DEFAULT NULL COMMENT '用户名',  `password` char(64) DEFAULT NULL COMMENT '密码',  `state` varchar(32) DEFAULT NULL COMMENT '状态',  `create_time` datetime DEFAULT NULL COMMENT '创建时间',  PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC COMMENT='用户表';  insert into `user`(`id`,`username`,`password`,`state`,`create_time`) values (1,'starzou','8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92',NULL,'2014-07-17 12:59:08');  DROP TABLE IF EXISTS `user_role`; CREATE TABLE `user_role` (  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '表id',  `user_id` bigint(20) unsigned DEFAULT NULL COMMENT '用户id',  `role_id` bigint(20) unsigned DEFAULT NULL COMMENT '角色id',  PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC COMMENT='用户与角色关联表';  insert into `user_role`(`id`,`user_id`,`role_id`) values (1,1,1); ; ; ; ; 
(责任编辑:豆豆)
下一篇:

如何辨别真假100M宽带?

上一篇:

两台电脑如何建立局域网

  • 信息二维码

    手机看新闻

  • 分享到
打赏
免责声明
• 
本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们 xfptx@outlook.com