花了一整天来从新研究这些框架的整合已经如何使用,先整理如下:
本文着手搭建SSM环境。主要过程如下:
1、搭建maven环境;
2、整合springMVC;
3、整合数据源(mysql);
4、整合mybatis;
5、整合velocity;
6、添加事务;
=============================================================================
1、搭建maven环境
springMVC需要的依赖:
<!-- ========================mvc=========================== -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
dataSource需要的依赖:
<!-- ========================data source=========================== -->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.0.RELEASE</version>
</dependency>
<!-- ========================mybatis=========================== -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>
velocity需要的依赖:
<!-- ========================velocity=========================== -->
<!-- https://mvnrepository.com/artifact/org.apache.velocity/velocity -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.velocity/velocity-tools -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-tools</artifactId>
<version>2.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
2、整合springMVC
在web.xml配置文件中,以一个Servlet作为入口程序是绝大多数MVC框架都遵循的基本设计方案。这里的DispatcherServlet被我们称之为核心分发器,是SpringMVC最重要的类之一,它是springMVC框架的入口。
配置springMVC的入口:
<!-- 添加spring-mvc入口,并设置拦截所有请求 -->
<servlet>
<!-- <servlet-name>的值会作为springMVC配置文件名的一部分, 如mvc-servlet.xml -->
<servlet-name>mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>mvc</servlet-name>
<!-- 一般情况下,设置拦截所有的请求 -->
<url-pattern>/</url-pattern>
</servlet-mapping>
为支持中文,添加中文处理filter:
<!-- 为了能够处理中文的post请求,再配置一个encodingFilter,以避免post请求中文出现乱码情况 -->
<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>/*</url-pattern>
</filter-mapping>
注意:web.xml文件的初始化顺序为:context-param --> listener --> filter --> servlet,因此web.xml解析中文支持在springMVC入口之前。
<?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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 指明controller所在的包路径 -->
<context:component-scan base-package="hu.azeroth.*" />
<!-- 开启注解 -->
<mvc:annotation-driven />
<!-- ViewResolver试图解析器。 用于支持Servlet,jsp页面解析 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
<!--<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>-->
<property name="prefix" value="/WEB-INF/page/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
package hu.azeroth.controller;
import hu.azeroth.pojo.UserDO;
import hu.azeroth.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
/**
* Created by carrot on 16/9/4.
*/
// @Controller 用以将MyController类注册为 springMVC 中的控制类,这样url将会交由这里来处理
@Controller
public class MyController {
@Autowired
private UserService userService;
// 主页
// @RequestMapping 用以区分url,value值代表不同的url,这样不同的url将会传递到到不同的方法中
@RequestMapping(value = "/", method = RequestMethod.GET)
public String index() {
return "index";
}
// 用户管理
@RequestMapping(value = "/users", method = RequestMethod.GET)
public String users(ModelMap modelMap) {
List<UserDO> userDOList = userService.showUsers();
// modelMap.put("userDOList", userDOList);
modelMap.addAttribute("userDOList", userDOList);
return "userManager";
}
// 添加用户表单页面
@RequestMapping(value = "/addUser", method = RequestMethod.GET)
public String addUser() {
return "addUser";
}
// 添加用户处理
// @RequestParam用以获取url中的参数,其中value的值为url中包含的参数名
@RequestMapping(value = "/addUserDeal", method = RequestMethod.GET)
public String addUserDeal(@RequestParam(value = "username") String userName,
@RequestParam(value = "age") int age,
@RequestParam(value = "gender") String gender,
@RequestParam(value = "address") String address) {
UserDO userDO = new UserDO(userName, age, gender, address);
userService.addUser(userDO);
return "redirect:/users";
}
// 查看用户信息
@RequestMapping(value = "/showUserInfo/{userId}", method = RequestMethod.GET)
public String showUserInfo() {
return "userInfo";
}
// 更新用户信息页面
@RequestMapping(value = "/updateUser/{userId}", method = RequestMethod.GET)
public String updateUserInfo() {
return "updateUser";
}
// 处理用户修改请求
@RequestMapping(value = "/updateUserDeal", method = RequestMethod.GET)
public String updateUserDeal() {
return "redirect:/users"; //从定向
}
// 删除用户
@RequestMapping(value = "/delUser/{userId}", method = RequestMethod.GET)
public String delUser() {
return "redirect:/users";
}
}
注:以上我只用到了index 和 addUser方法,其他的没有用到,只是作为功能上使用的参考。
参见mvc-servlet.xml文件的配置:
<property name="prefix" value="/WEB-INF/page/"/>
在 webapp/WEB-INF/ 创建包 page,并在page包下创建 .jsp 文件。
注意,我们在 MyController类中每个方法中返回的String字符串,就是每个 .jsp 文件所返回的文件名。例如,index方法返回的“index”字符串,springMVC将会在配置的page包中查找 index.jsp 文件进行返回,若没有找到,则返回404.
这时,通过在地址栏输入MyController中每个@RequestMapping中的value所对应的url,就能精确匹配到某一个方法中。在每个方法中,我们可以调用Service层的服务来做些什么。
3、整合数据源(mysql)
以前的数据库连接信息是在代码中设置的,通过spring提供的数据源,我们可以很方便的将要连接的数据库信息配置在xml文件中,方便管理。
在mvc-servlet.xml文件中添加数据源配置:
<!-- 数据源 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1/db_user?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</bean>
这样spring就能自己连接并验证数据库,数据库的信息都通过配置文件来指定。
4、整合mybatis
有了数据源,那么mybatis的使用就彻底摆脱的对数据库操作的硬编码。除了我们还是用SQL语句来操纵数据库,其他的都是通过配置文件以及数据操作接口(dao层接口,没有实现)来实现都数据库的操作。
在 main/src/java 下创建包:hu/azeroth/dao ,在此包下创建:UserDao接口:
package hu.azeroth.dao;
import hu.azeroth.pojo.UserDO;
import java.util.List;
/**
* Created by carrot on 16/9/4.
*/
public interface UserDao {
boolean insert(UserDO userDO);
List<UserDO> showUsers();
}
在mvc-servlet.xml文件中添加配置:
<!-- 配置mybatis -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 配置mybatis配置文件的位置 -->
<property name="configLocation" value="classpath:mybatis/mybatis-config.xml"/>
<!-- 配置mapper文件的位置 -->
<property name="mapperLocations" value="classpath*:mybatis/mapper/*.xml" />
<!-- 配置数据源 -->
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<!-- 配置数据库操作接口 -->
<property name="mapperInterface" value="hu.azeroth.dao.UserDao"/>
<!-- 配置 sqlSessionFactory -->
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
添加mybatis-config.xml 以及 mapper.xml文件:
在resource目录下,根据mvc-servlet中的配置,创建 包mapper 以及文件 mybatis-config.xml 文件,然后在mapper包下创建UserMapper.xml文件。
mybatis-config.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">
<configuration>
<typeAliases>
<!-- type为数据库操作接口层的完路径, alias为别名,在UserMapper中用到 -->
<typeAlias alias="UserDO" type="hu.azeroth.pojo.UserDO"/>
</typeAliases>
</configuration>
UserMapper.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">
<!-- namespace为命名空间,指定是与哪一个数据库操作接口映射 -->
<mapper namespace="hu.azeroth.dao.UserDao">
<!-- type为在mybatis-config.xml文件中配置的别名 -->
<resultMap id="UserResultMap" type="UserDO">
<!-- property为POJO中的属性名, colum为在数据库中的字段名 -->
<result property="userName" column="username"/>
<result property="age" column="age"/>
<result property="gender" column="gender"/>
<result property="address" column="address"/>
</resultMap>
<!-- id为映射的数据库操作接口中的方法名 -->
<insert id="insert" parameterType="UserDO">
INSERT INTO tb_userinfo
(username, age, gender, address)
VALUES
(#{userName}, #{age}, #{gender}, #{address})
</insert>
</mapper>
5、整个velocity
velocity的存在,使得不像之前通过MyController类的方法返回对应的 jsp 文件一样,而是会通过配置去找对应名称的 .vm 文件。也就是说,不在去响应page目录下的对应的 jsp 文件,而是在在layout和templates目录下找对应的 .vm 文件。
在mvc-servlet.xml文件中配置velocity:
<!-- 配置velocity -->
<bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
<!-- 配置velocity的配置文件的位置 -->
<property name="configLocation" value="/WEB-INF/velocity/velocity.properties" />
<property name="resourceLoaderPath" value="/" />
</bean>
<bean id="viewResolverVelocity" class="org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver">
<property name="cache" value="false"/>
<property name="layoutUrl" value="/layout/main.vm" />
<property name="prefix" value="/templates/" />
<property name="suffix" value=".vm" />
<property name="exposeSpringMacroHelpers" value="true" />
<property name="contentType" value="text/html;charset=UTF-8" />
<property name="screenContentKey" value="screen_placeholder"/>
<property name="viewClass" value="org.springframework.web.servlet.view.velocity.VelocityLayoutView" />
其中layout、templates目录中分别配置 .vm 文件,也就是说,以MyController类中的方法的返回值为文件名,创建 .vm 文件,比如说 index.vm 文件。
其次,配置velocity:
velocimacro.permissions.allow.inline=true
velocimacro.permissions.allow.inline.to.replace.global=true
velocimacro.permissions.allow.inline.local.scope=true
input.encoding=UTF-8
output.encoding=UTF-8
resource.loader=webapp, class
class.resource.loader.description=Velocity Classpath Resource Loader
class.resource.loader.class=org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
webapp.resource.loader.class=org.apache.velocity.tools.view.WebappResourceLoader
webapp.resource.loader.path=/WEB-INF/velocity/
webapp.resource.loader.cache=false
具体的 .vm 文件的配置视需求而定。
差不多就这多了。