前段时间自己发布了一篇关于SpringMVC结合Redis的小实例,今天呢,想和大家分享一下自己最近使用Spring MVC结合MyBatis+MySQL的小实例,在这里先贴出一下自己在GitHub上共享的代码Demo,下面我会贴出一些核心的内容以及相关总结。GitHub上的Demo地址如下:https://github.com/williamjava/demo
1、准备工作
小实例Demo是基于Maven的,所以相关的jar依赖大家可以参考项目根目录下的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.tutu.love</groupId>
<artifactId>guitu</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>guitu Maven Webapp</name>
<url>http://maven.apache.org</url>
<repositories>
<repository>
<id>com.springsource.repository.bundles.release</id>
<name>EBR Spring Release Repository</name>
<url>http://repository.springsource.com/maven/bundles/release</url>
</repository>
<repository>
<id>com.springsource.repository.bundles.external</id>
<name>EBR External Release Repository</name>
<url>http://repository.springsource.com/maven/bundles/external</url>
</repository>
</repositories>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>4.1.4.RELEASE</spring.version>
</properties>
<dependencies>
<!-- MyBatis相关 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.0</version>
</dependency>
<!-- MySQL相关 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.36</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<!-- Spring相关,这里的spring.version就是上方声明的版本号,这样引用更方便修改和维护 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<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-test</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-ibatis</artifactId>
<version>2.0.8</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- 测试相关 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- Servlet相关 -->
<dependency>
<groupId>tomcat</groupId>
<artifactId>servlet-api</artifactId>
<version>5.5.23</version>
</dependency>
<!-- Log相关 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- Redis相关 -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.0.0</version>
</dependency>
<!-- 其他 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>net.sourceforge.cglib</groupId>
<artifactId>com.springsource.net.sf.cglib</artifactId>
<version>2.1.3</version>
</dependency>
</dependencies>
<build>
<finalName>guitu</finalName>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.7</version>
<configuration>
<sourceIncludes>
<sourceInclude>*</sourceInclude>
</sourceIncludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
2、配置mybatis相关类自动生成(mybatis-generator)
配置最核心的generatorConfig.xml配置文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<classPathEntry
location="D:/MavenRepo/mysql/mysql-connector-java/5.1.36/mysql-connector-java-5.1.36.jar"/>
<context id="my" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressDate" value="false"/>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://127.0.0.1:3306/stusys" userId="root"
password="123456"/>
<javaModelGenerator targetPackage="com.tu.entity"
targetProject="E:\william_demo_git\guitu\src\main\java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<sqlMapGenerator targetPackage="com.tu.mapper"
targetProject="E:\william_demo_git\guitu\src\main\resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<javaClientGenerator targetPackage="com.tu.mapper"
targetProject="E:\william_demo_git\guitu\src\main\java" type="XMLMAPPER">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<table tableName="user_info" domainObjectName="UserInfo"
enableCountByExample="true" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="true"
selectByExampleQueryId="false">
</table>
</context>
</generatorConfiguration>
如何执行MyBatis文件的相关生成呢?我自己简单写了一个.bat文件,内容如下:
#generatorConfig.xml文件所在的项目目录
cd E:\william_demo_git\guitu\src\main\java\com\tu\dao
java -jar D:\MavenRepo\org\mybatis\generator\mybatis-generator-core\1.3.2\mybatis-generator-core-1.3.2.jar -configfile generatorConfig.xml -overwrite
pause;
3、配置文件中的重要内容以及使用的相关注解
spring-common.xml文件中配置的注解扫描目录以及配置的BeanPostProcessor(对标注@Autowired的bean自动注入)
<context:component-scan base-package="com.tu"></context:component-scan>
<!-- 该 BeanPostProcessor 将自动起作用,对标注 @Autowired 的 Bean 进行自动注入 -->
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
其他的相关配置大家可以参考具体的Demo
既然使用了Spring的注解,每一层的实例注入,用到的具体注解有必要说明一下:
控制层:@Controller
Service层:@Service,使用在接口对应的实现类上面
Dao层:@Repository,同样是使用在接口对应的实现类上面
MyBatis生成的Mapper类:@Resource
类中有注入的属性:@Autowired,使用在属性上
特别需要注意的地方:使用注解@Autowired注入具体的属性的时候,一定要记得提供set方法,否则Spring注入会出错。
4、效果实现
JSP --> Controller --> Service --> Dao --> Mapper
这里除了JSP,实际开发过程中我想会有独立的前段去做,这里同大家回顾一下在前段部分我们需要做的工作。
现在我要在前段展示一个用户列表信息,后端数据已经准备好了,控制层会返回数据(userList)到前段页面,那么页面如何进行展示呢?我们使用jstl(JSP标准标签库)配合EL表达式进行实现。
a)、jsp页面引入:<%@taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
b)、使用<c:forEach>标签遍历控制层返回的用户数据信息
<c:forEach var="user" items="${userList }">
<tr>
<td>${user.name }</td>
<td>${user.province }</td>
<td>${user.city }</td>
<td>${user.job }</td>
<td>${user.phone }</td>
</tr>
</c:forEach>
到这里基本上该做的工作都做完了,接下来要做的就是启动服务,见证奇迹的时刻,一个用户列表即将展示在我们面前。
访问URL:http://localhost:8080/guitu/user/getAllUsers
看到的效果: