Spring MVC+Spring+Mybatis+MySQL(IDEA)入门框架搭建
Spring MVC+Spring+Mybatis+MySQL(IDEA)入门框架搭建
Spring Mybatis demo
0.项目准备
使用Intelli IDEA最终版(个人使用社区版时无法添加本地Tomcat)新建一个Maven项目:File -> new -> project... ->在左侧栏选中Maven -> 设置SDK(即jdk版本)-> 选中“Create from archetype” -> 选中“org.apache.maven.archetypes:maven-archetype-webapp” -> next -> 填写GroupId(类似包名)和ArtifactId(一般是项目名)-> 一路next,最后finish得到新建项目。
1)在新项目基础上再手动添加一些目录结构,最后项目结构应类似:
src-
|main-
|java- (右键“Mark Directory as”设置为源码根目录)
|com-
|jay-
|controller(控制层)
|dao(数据访问层)
|entities(数据实体POJO)
|service(服务层)
|resources-(右键“Mark Directory as”设置为资源根目录)
|mybatis-
|mapping-
|接口映射文件
|mybatis.xml
|mysql.properties
|spring-
|spring-mybatis.xml
|spring-mvc.xml
|log4j.properties
|test-(右键“Mark Directory As”设置为测试根目录)
|UserDaoTest.java
|webapp-
|WEB-INF-
|views-
|errorpage-
|404.jsp等
|page1.jsp
|web.xml
|index.jsp
|pom.xml
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.jay.spring</groupId>
<artifactId>springmvc</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>springmvc Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<!-- spring版本号 -->
<spring.version>4.0.5.RELEASE</spring.version>
<!-- log4j日志文件管理包版本 -->
<slf4j.version>1.6.6</slf4j.version>
<log4j.version>1.2.12</log4j.version>
<!-- junit版本号 -->
<junit.version>4.10</junit.version>
<!-- mybatis版本号 -->
<mybatis.version>3.2.1</mybatis.version>
</properties>
<dependencies>
<!-- 添加Spring依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</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-context</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-aop</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-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-web</artifactId>
<version>${spring.version}</version>
</dependency>
<!--单元测试依赖 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</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 -->
<!--spring单元测试依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<scope>test</scope>
</dependency>
<!--mybatis依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- mybatis/spring包 -->
<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.29</version>
</dependency>
<!-- javaee-api包 注意和项目使用的JDK版本对应 -->
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
<!--<!–j2ee相关包–>-->
<!--<dependency>-->
<!--<groupId>javax.servlet</groupId>-->
<!--<artifactId>javax.servlet-api</artifactId>-->
<!--<version>3.1.0</version>-->
<!--</dependency>-->
<!--<dependency>-->
<!--<groupId>javax.servlet.jsp</groupId>-->
<!--<artifactId>jsp-api</artifactId>-->
<!--<version>2.2</version>-->
<!--</dependency>-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
<build>
<finalName>springmvc</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
1.数据持久层Mybatis+MySQL
1.1 MySQL数据准备
安装好mysql,登录后新建数据库,然后建立user表,这里建立了一个很简单的表。
mysql> desc user;
+---------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(255) | NO | | | |
| address | varchar(255) | NO | | GX | |
+---------+--------------+------+-----+---------+-------+
然后随便插入几条测试数据:
mysql> select * from user;
+----+------+---------+
| id | name | address |
+----+------+---------+
| 1 | bing | BoBai |
| 2 | Jay | BoBai |
| 3 | baba | YuLin |
+----+------+---------+
3 rows in set (0.01 sec)
到这里,mysql里面的数据准备好了,接下来要通过Mybatis来获取。
1.2 Mybatis配置和使用
配置文件在mybatis目录下新建。
1.2.1 新建实体类和访问接口
1)根据数据库的user表,在entities目录下新建一个与之一一对应的Java类User.java:
package com.jay.entities;
public class User {
private Integer id;
private String name;
private String address;
public User(){}
public User(Integer id, String name, String address) {
this.id = id;
this.name = name;
this.address = address;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", address='" + address + '\'' +
'}';
}
}
2)建立访问底层数据的接口UserDao,这里为了方便,只定义了一个方法。
package com.jay.dao;
import com.jay.entities.User;
import java.util.List;
public interface UserDao {
List<User> getAllUsers();
}
1.2.2 配置MySQL连接信息
在mybatis目录下新建mysql.properties文件:
mybatis/mysql.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/数据库名
username=root
password=root
1.2.3 配置Mybatis信息
1)配置与UserDao对应的Mapper.xml文件
新建文件mybatis/mapping/UserDaoMapper.xml
mybatis/mapping/UserDaoMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--命名空间是对应接口的包名+类名,指定要映射的接口 -->
<mapper namespace="com.jay.dao.UserDao">
<!--id是接口中的方法名,结果类型如没有在mybatis.xml文件中配置别名,则必须使用全名称(包名+类名) -->
<select id="getAllUsers" resultType="User">
select id,`name`,address from user
</select>
</mapper>
2)配置Mybatis与mysql的连接文件
mybatis/mybatis.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--没有集成spring时可以用,集成spring后这个文件主要内容都做spring配置文件中完成-->
<configuration>
<!-- 指定数据库连接信息的位置 -->
<properties resource="mybatis/mysql.properties"></properties>
<!--设置类别名,默认引入该包下的所有类,这样在写Mapper文件的时候就可以只写entity的类名,而不用写全名那么麻烦 -->
<typeAliases>
<package name="com.jay.entities"/>
</typeAliases>
<!--配置mysql的链接信息,数据从配置文件里面读取,注意名称要对应-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<!--引入映射文件 -->
<mappers>
<mapper resource="mybatis/mapping/UserDaoMapper.xml" />
</mappers>
</configuration>
3)配置log4j
新建文件resources/log4j.properties
log4j.rootLogger=INFO,Console,Stdout
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
log4j.appender.Stdout = org.apache.log4j.DailyRollingFileAppender
log4j.appender.Stdout.File = E://logs/log.log
log4j.appender.Stdout.Append = true
log4j.appender.Stdout.Threshold = DEBUG
log4j.appender.Stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.Stdout.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
1.2.4 测试Mybatis访问Mysql的数据
1)在test目录下新建测试类UserDaoTest.java
import com.jay.dao.UserDao;
import com.jay.entities.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.log4j.Logger;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.io.InputStream;
import java.util.List;
public class UserDaoTest {
private static Logger logger = Logger.getLogger(UserDaoTest.class);
public static void main(String[] args) {
testMybatis();
}
private static void testMybatis(){
System.out.println("hi");
// 获得Mybatis配置文件流
InputStream config = UserDaoTest.class.getClassLoader().getResourceAsStream("mybatis/mybatis.xml");
// 创建sql会话工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(config);
//获得会话对象
SqlSession session = factory.openSession(true);
try {
//通过MyBatis实现接口UserDAO,返回实例
UserDao userDao = session.getMapper(UserDao.class);
List<User> users = userDao.getAllUsers();
logger.info(users);
users.forEach(user-> logger.info(user.getId()+","+user.getName()+","+user.getAddress()));
} finally {
session.close();
}
}
}
2)运行结果
hi
[User{id=1, name='bing', address='BoBai'}, User{id=2, name='Jay', address='BoBai'}, User{id=3, name='baba', address='YuLin'}]
1,bing,BoBai
2,Jay,BoBai
3,baba,YuLin
Process finished with exit code 0
控制台打印出来的内容和mysql数据里面的信息一致,说明Mybatis已经可以正确获取Mysql里的数据了,接下来在项目目前完成的基础上集成Spring。
2.Spring+Mybatis
2.1 Spring配置
从上面的例子可以看到,如果要访问数据,那么我们就必须先要读取mybatis.xml配置文件,然后生成SqlSessionFactory对象,再获取对应的session才可以访问数据。现在要把这些工作都交给Spring来完成(配置即可),就不用手动读取配置新建对象那么麻烦了。而且原来配置在mybatis.xml文件中的信息,都可以全部移到spring配置文件中来,原来的mybatis.xml文件存在价值不大了。
在spring目录下新建spring-mybatis.xml文件:
spring/spring-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:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- 引入mysql jdbc配置文件 -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:mybatis/mysql.properties</value>
<!--要是有多个配置文件,只需在这里继续添加即可 -->
</list>
</property>
</bean>
<!-- 配置mysql数据源 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<!-- 使用properties来配置 -->
<property name="driverClassName">
<value>${driver}</value>
</property>
<property name="url">
<value>${url}</value>
</property>
<property name="username">
<value>${username}</value>
</property>
<property name="password">
<value>${password}</value>
</property>
</bean>
<!-- 自动扫描了所有的XxxxMapper.xml对应的mapper接口文件,这样就不用一个一个手动配置Mpper的映射了,只要Mapper接口类和Mapper映射文件对应起来就可以了。 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.jay.dao.*" />
</bean>
<!-- 配置Mybatis的文件 ,mapperLocations配置**Mapper.xml文件位置,configLocation配置mybatis-config文件位置-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:mybatis/mapping/*.xml"/>
<property name="configLocation" value="classpath:mybatis/mybatis.xml" />
</bean>
<!-- 自动扫描注解的bean -->
<context:component-scan base-package="com.jay.*" />
<!-- 用eclipse的同学说不用配置该项(未验证),我也认为Mapper文件已经和接口对应起来了也不用配置的,但是IDEA一直报错无法注入UserDao,增加该配置后就ok了。每一个Mapper都需要注入sqlSessionFactory和指定映射接口 -->
<bean id="userDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
<property name="mapperInterface" value="com.jay.dao.UserDao"></property>
</bean>
</beans>
这个时候的mybatis.xml文件内容大都可以不要了,注释掉
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--没有集成spring时可以用,集成spring后这个文件主要内容都做spring配置文件中完成-->
<configuration>
<!--<!– 指定数据库连接信息的位置 –>-->
<!--<properties resource="mybatis/mysql.properties"></properties>-->
<!--设置类别名,默认引入该包下的所有类,这样在写Mapper文件的时候就可以只写entity的类名,而不用写全名那么麻烦 -->
<typeAliases>
<package name="com.jay.entities"/>
</typeAliases>
<!--<!–配置mysql的链接信息,基本数据从配置文件里面读取–>-->
<!--<environments default="development">-->
<!--<environment id="development">-->
<!--<transactionManager type="JDBC" />-->
<!--<dataSource type="POOLED">-->
<!--<property name="driver" value="${driver}" />-->
<!--<property name="url" value="${url}" />-->
<!--<property name="username" value="${username}" />-->
<!--<property name="password" value="${password}" />-->
<!--</dataSource>-->
<!--</environment>-->
<!--</environments>-->
<!--<!–引入映射文件 –>-->
<!--<mappers>-->
<!--<mapper resource="mybatis/mapping/UserDaoMapper.xml" />-->
<!--</mappers>-->
</configuration>
2.2 测试
在UserDaoTest.java类里添加测试方法testSpringMybatis()
import com.jay.dao.UserDao;
import com.jay.entities.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.log4j.Logger;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.io.InputStream;
import java.util.List;
public class UserDaoTest {
private static Logger logger = Logger.getLogger(UserDaoTest.class);
public static void main(String[] args) {
// testMybatis();
testSpringMybatis();
}
private static void testSpringMybatis(){
ApplicationContext context = new ClassPathXmlApplicationContext("spring/spring-mybatis.xml");
SqlSessionFactory factory = (SqlSessionFactory) context.getBean("sqlSessionFactory");
//获得会话对象
SqlSession session = factory.openSession(true);
try {
//通过MyBatis实现接口UserDAO,返回实例
UserDao userDao = session.getMapper(UserDao.class);
List<User> users = userDao.getAllUsers();
System.out.println(users);
users.forEach(user-> logger.info(user.getId()+","+user.getName()+","+user.getAddress()));
} finally {
session.close();
}
}
private static void testMybatis(){
System.out.println("hi");
// 获得环境配置文件流
InputStream config = UserDaoTest.class.getClassLoader().getResourceAsStream("mybatis/mybatis.xml");
// 创建sql会话工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(config);
//获得会话对象
SqlSession session = factory.openSession(true);
try {
//通过MyBatis实现接口UserDAO,返回实例
UserDao userDao = session.getMapper(UserDao.class);
List<User> users = userDao.getAllUsers();
logger.info(users);
users.forEach(user-> logger.info(user.getId()+","+user.getName()+","+user.getAddress()));
} finally {
session.close();
}
}
}
2.3 运行结果
[User{id=1, name='bing', address='BoBai'}, User{id=2, name='Jay', address='BoBai'}, User{id=3, name='baba', address='YuLin'}]
2017-09-02 12:02:55,259 [main] INFO [UserDaoTest] - 1,bing,BoBai
2017-09-02 12:02:55,259 [main] INFO [UserDaoTest] - 2,Jay,BoBai
2017-09-02 12:02:55,259 [main] INFO [UserDaoTest] - 3,baba,YuLin
Process finished with exit code 0
集成Spring后,可以通过Spring配置正常获取mysql的数据,说明到这都是畅通的。接下来加入Spring MVC模块。
3.加入Spring MVC处理请求
3.1 配置spring-mvc.xml文件
在spring目录下新建spring-mvc.xml文件
spring/spring-mvc.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:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--启用spring的注解annotation -->
<context:annotation-config/>
<!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 -->
<context:component-scan base-package="com.jay.controller">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- 配置注解驱动 可以将request参数与绑定到controller参数上 -->
<mvc:annotation-driven/>
<!-- 添加视图解析器前后缀,这里默认使用.jsp文件-->
<bean id="defaultViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/views/"/><!--设置JSP文件的目录位置-->
<property name="suffix" value=".jsp"/>
</bean>
</beans>
3.2 web.xml配置
web.xml不仅要处理转发请求,还要加载Spring文件和Spring MVC的配置文件,添加上下文监听器、编码过滤等。非常重要的一个文件。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<!--welcome pages-->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 读取spring配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/spring-mybatis.xml</param-value>
</context-param>
<!--解决乱码问题-->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 日志记录 -->
<context-param>
<!-- 日志配置文件路径 -->
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:log4j.properties</param-value>
</context-param>
<!--spring上下文监听器,如果没有-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--配置springmvc DispatcherServlet,转发前端或后台发来的请求-->
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!--resources目录下需要新建一个spring文件夹-->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 错误跳转页面 -->
<error-page>
<!-- 404客户端路径不正确 -->
<error-code>404</error-code>
<location>/WEB-INF/views/errorpage/404.jsp</location>
</error-page>
<error-page>
<!-- 客户端没有访问权限,访问被禁止 -->
<error-code>405</error-code>
<location>/WEB-INF/views/errorpage/405.jsp</location>
</error-page>
<error-page>
<!-- 服务器内部错误 -->
<error-code>500</error-code>
<location>/WEB-INF/views/errorpage/500.jsp</location>
</error-page>
</web-app>
3.3 MVC(视图层、控制层、模块服务层)
3.3.1 视图层文件
1)修改webapp目录下的index.jsp
项目启动页面,可以在以后的开发中设置为登录验证页面。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
</head>
<body>
<h1>登录,首页</h1>
</body>
</html>
2)在WEB-INF/views/目录下添加文件
page1.jsp展示从数据库获取的user数据信息
WEB-INF/views/page1.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
</head>
<body>
<h1>Hello world!</h1>
${user.id}
${user.name}
</body>
</html>
errorpage目录下的是错误跳转页面
WEB-INF/views/errorpage/404.jsp
<%@page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<html>
<body>
<h2>404 err</h2>
</body>
</html>
-----------------------------------------
WEB-INF/views/errorpage/405.jsp
<%@page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<html>
<body>
<h2>405 err</h2>
</body>
</html>
-----------------------------------------
WEB-INF/views/errorpage/500.jsp
<%@page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<html>
<body>
<h2>500 err</h2>
</body>
</html>
-----------------------------------------
3.3.2 控制层
在com.jay.controller包下新建UserController.java。主要有两个方法,getUser()返回user对象信息给page1.jsp处理,然后在前端页面展示数据库的数据信息。方法sayHi验证前后数据传输是否正常。
package com.jay.controller;
import com.jay.entities.User;
import com.jay.service.UserService;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
@Controller
public class UserController {
private static final Logger logger = Logger.getLogger(UserController.class);
@Resource
private UserService service;
/**
*返回user对象信息给page1.jsp处理,然后在前端页面展示
*/
@RequestMapping("/page1")
public ModelAndView getUser() {
System.out.println("访问page1的后台。。。");
ModelAndView mav = new ModelAndView("page1");
List<User> users = service.getAllUser();
System.out.println(users);
mav.addObject("user", users.get(0));
return mav;
// return "page1"; //跳转到.jsp结尾的对应文件(page1.jsp),此时返回值是String
}
/**
* 直接返回字符串给请求的页面(这里在请求URL增加参数v是验证前后台通信是否正常)
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/say", produces = "text/html;charset=UTF-8")
@ResponseBody
public String sayHi(HttpServletRequest request, HttpServletResponse response) {
String name = request.getParameter("v");
List<User> users = service.getAllUser();
logger.info("{name:jay,context:hi,你好}");
return name+"-{name:jay,context:hi,你好}"+users;
}
}
3.3.3 服务层
在com.jay.service下新建接口和实现类。
访问接口,没有任何注解。
package com.jay.service;
import com.jay.entities.User;
import java.util.List;
public interface UserService {
List<User> getAllUser();
}
接口实现类,注解@Service并制定名称,同时@Scope("prototype")设定每次访问都创建一个新对象,通过@Resource自动注入userDao。通过userDao就可以寻找映射的mybatis文件,从而正常获取数据库的信息。
package com.jay.service.impl;
import com.jay.dao.UserDao;
import com.jay.entities.User;
import com.jay.service.UserService;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service("userServiceImpl")
@Scope("prototype")
public class UserServiceImpl implements UserService {
@Resource
private UserDao userDao;
@Override
public List<User> getAllUser() {
return userDao.getAllUsers();
}
}
4.测试
给IDEA添加本地Tomcat服务器,然后将本项目发布到Tomcat并启动。
启动后访问项目:
1.访问:http://localhost:8080/springmvc/
页面显示:
登录,首页
2.访问:http://localhost:8080/springmvc/page1
页面显示:
Hello world!
1 bing (数据库获取的信息,这里只提取一条来说明)
3.访问:http://localhost:8080/springmvc/say?v=cainiao
页面显示:
cainiao-{name:jay,context:hi,你好}[User{id=1, name='bing', address='BoBai'}, User{id=2, name='Jay', address='BoBai'}, User{id=3, name='baba', address='YuLin'}]
至此,可以直接从前端URL请求,通过SpringMVC、Spring、Mybatis正常访问MySQL的数据,流程走通。
5.总结
本例子只是一个最简单的demo,只是用来说明框架搭建的过程。
每个环节都有十分丰富的内容需要学习和补充,比如Mybatis部分CURD、动态SQL、事务处理等,Spring部分有日志、事务、权限等AOP切面、并发处理、IO性能等,前端也有Struts等各种框架。
源码地址:
git@github.com:FEFJay/spring_demo.git
参考链接:
http://blog.csdn.net/Evankaka/article/details/48785513
http://wiki.jikexueyuan.com/project/spring/mvc-framework/spring-mvc-hello-world-example.html
其他未列出的链接
Spring MVC+Spring+Mybatis+MySQL(IDEA)入门框架搭建的更多相关文章
- freemarker + spring mvc + spring + mybatis + mysql + maven项目搭建
今天说说搭建项目,使用freemarker + spring mvc + spring + mybatis + mysql + maven搭建web项目. 先假设您已经配置好eclipse的maven ...
- IDEA下创建Maven项目,并整合使用Spring、Spring MVC、Mybatis框架
项目创建 本项目使用的是IDEA 2016创建. 首先电脑安装Maven,接着打开IDEA新建一个project,选择Maven,选择图中所选项,下一步. 填写好GroupId和ArtifactId, ...
- SSM 三大框架系列:Spring 5 + Spring MVC 5 + MyBatis 3.5 整合(附源码)
之前整理了一下新版本的 SSM 三大框架,这篇文章是关于它的整合过程和项目源码,版本号分别为:Spring 5.2.2.RELEASE.SpringMVC 5.2.2.RELEASE.MyBatis ...
- ssm(spring,spring mvc,mybatis)框架
ssm框架各个技术的职责 spring :spring是一个IOC DI AOP的 容器类框架 spring mvc:spring mvc 是一个mvc框架 mybatis:是一个orm的持久层框架 ...
- spring mvc与mybatis收集到博客
mybaits-spring 官方教程 http://mybatis.github.io/spring/zh/ SpringMVC 基础教程 框架分析 http://blog.csdn.net/swi ...
- Spring、Spring MVC、MyBatis
Spring.Spring MVC.MyBatis整合文件配置详解 使用SSM框架做了几个小项目了,感觉还不错是时候总结一下了.先总结一下SSM整合的文件配置.其实具体的用法最好还是看官方文档. Sp ...
- SSM 即所谓的 Spring MVC + Spring + MyBatis 整合开发。
SSM 即所谓的 Spring MVC + Spring + MyBatis 整合开发.是目前企业开发比较流行的架构.代替了之前的SSH(Struts + Spring + Hibernate) 计划 ...
- 转载 Spring、Spring MVC、MyBatis整合文件配置详解
Spring.Spring MVC.MyBatis整合文件配置详解 使用SSM框架做了几个小项目了,感觉还不错是时候总结一下了.先总结一下SSM整合的文件配置.其实具体的用法最好还是看官方文档. ...
- spring MVC、mybatis配置读写分离
spring MVC.mybatis配置读写分离 1.环境: 3台数据库机器,一个master,二台slave,分别为slave1,slave2 2.要实现的目标: ①使数据写入到master ②读数 ...
随机推荐
- 高可用OpenStack(Queen版)集群-9.Cinder控制节点集群
参考文档: Install-guide:https://docs.openstack.org/install-guide/ OpenStack High Availability Guide:http ...
- js 的filter()方法
filter()方法使用指定的函数测试所有元素,并创建一个包含所有通过测试的元素的新数组. filter()基本语法: arr.filter(callback[, thisArg]) filter() ...
- route命令详情
基础命令学习目录首页 原文链接:https://www.cnblogs.com/lpfuture/p/5857738.html 考试题一:linux下如何添加路由(百度面试题) 以上是原题,老男孩老师 ...
- fsck命令详解
基础命令学习目录首页 本文出自 “airfish2000” 博客,更多命令查看博客: http://airfish2000.blog.51cto.com/10829608/1880801 fsck ...
- Performance — 前端性能监控利器
Performance是一个做前端性能监控离不开的API,最好在页面完全加载完成之后再使用,因为很多值必须在页面完全加载之后才能得到.最简单的办法是在window.onload事件中读取各种数据. 大 ...
- Fifteen scrum meeting 2015-11-21
最近几日因为其他作业着实拖延了很久更新工程进度. 闫昊: 完成:学习讨论区开发 即将进行:讨论区代码开发 唐彬: 完成:学习学习进度部分开发 即将进行:学习进度功能开发 史烨轩: 完成:学习下载功能设 ...
- java的第二个实验——JAVA面向对象程序设计
java的第二个实验——JAVA面向对象程序设计 北京电子科技学院 实 验 报 告 课程:Java程序设计 班级:1352 姓名:林涵锦 学号:20135213 成绩: ...
- php与nginx之间的通信
Nginx是俄国人最早开发的Webserver,现在已经风靡全球,相信大家并不陌生.PHP也通过二十多年的发展来到了7系列版本,更加关注性能.这对搭档在最近这些年,叱咤风云,基本上LNMP成了当下的标 ...
- iOS学习资源搜集
swift 2.0 新的开始 iOS7初学者入门 斯坦福大学公开课:iOS 8开发 苹果官方开发 中文 iOS/Mac 开发博客列表 git
- SQL Server 2008 存储过程示例
出处:http://www.jb51.net/article/54730.htm --有输入参数的存储过程-- create proc GetComment (@commentid int) as s ...