第九讲 整合 Spring MVC+Spring+MyBatis

来源:互联网 发布:node.js高级编程 微盘 编辑:程序博客网 时间:2024/05/29 07:58
一、导入相关jar包

           <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.0.1</version>
                <scope>provided</scope>
           </dependency>
           <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
                <version>1.2</version>
           </dependency>
           <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>4.3.8.RELEASE</version>
           </dependency>
           <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>4.3.7.RELEASE</version>
           </dependency>
           <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjweaver</artifactId>
                <version>1.8.10</version>
           </dependency>
           <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.38</version>
           </dependency>
           <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.4.1</version>
           </dependency>
           <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>1.3.1</version>
           </dependency>
           <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>4.3.7.RELEASE</version>
           </dependency>
           <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-tx</artifactId>
                <version>4.3.7.RELEASE</version>
           </dependency>
           <dependency>
                <groupId>org.javassist</groupId>
                <artifactId>javassist</artifactId>
                <version>3.20.0-GA</version>
           </dependency>
           <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>1.7.21</version>
           </dependency>
           <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>1.7.21</version>
           </dependency>
           <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-core</artifactId>
                <version>2.7</version>
           </dependency>
           <dependency>
                <groupId>cglib</groupId>
                <artifactId>cglib</artifactId>
                <version>3.2.5</version>
           </dependency>
           <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-support</artifactId>
                <version>4.3.8.RELEASE</version>
           </dependency>
           <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-orm</artifactId>
                <version>4.3.8.RELEASE</version>
           </dependency>
           <dependency>
                <groupId>commons-fileupload</groupId>
                <artifactId>commons-fileupload</artifactId>
                <version>1.3.1</version>
           </dependency>
           <dependency>
                <groupId>org.freemarker</groupId>
                <artifactId>freemarker</artifactId>
                <version>2.3.23</version>
           </dependency>
           <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>3.4</version>
           </dependency>
           <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>2.8.7</version>
           </dependency>
           <dependency>
                <groupId>commons-dbcp</groupId>
                <artifactId>commons-dbcp</artifactId>
                <version>1.4</version>
           </dependency>

二、编写配置文件

     web.xml ---> 配置Spring,配置Spring MVC

<?xmlversion="1.0"encoding="UTF-8"?>
<web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns="http://java.sun.com/xml/ns/javaee"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
     version="2.5">
     <display-name>springmvc_spring_mybatis</display-name>
     <welcome-file-list>
           <welcome-file>index.html</welcome-file>
     </welcome-file-list>
     <!-- 配置spring的配置文件 -->
     <context-param>
           <param-name>contextConfigLocation</param-name>
           <param-value>classpath:applicationContext.xml</param-value>
     </context-param>
     <listener>
           <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
     </listener>
     <!-- 配置spring mvc的配置文件 -->
     <servlet>
           <servlet-name>springmvc</servlet-name>
           <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
           <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:mvc.xml</param-value>
           </init-param>
           <load-on-startup>1</load-on-startup>
     </servlet>
     <servlet-mapping>
           <servlet-name>springmvc</servlet-name>
           <url-pattern>*.do</url-pattern
     </servlet-mapping>
</web-app>

     mvc.xml ---> Spring MVC使用注解 (如果需要JSON或其他处理,需填写相关配置)

<beansxmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:context="http://www.springframework.org/schema/context"
     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">
     
     <!-- 扫描该包下的注解 -->
     <context:component-scanbase-package="com.liujie.controller"></context:component-scan>
     
</beans>

     applicationContext.xml ---> Spring

<beansxmlns="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"xmlns:tx="http://www.springframework.org/schema/tx"
     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/aop
     http://www.springframework.org/schema/aop/spring-aop.xsd
     http://www.springframework.org/schema/tx
     http://www.springframework.org/schema/tx/spring-tx.xsd">
     <!-- 读取属性文件 -->
     <bean
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
           <propertyname="location"value="classpath:db.properties"/>
     </bean>
     <!-- 配置数据源 -->
     <beanid="dataSource"
          class="org.springframework.jdbc.datasource.DriverManagerDataSource">
           <propertyname="driverClassName"value="${driver}"></property>
           <propertyname="url"value="${url}"></property>
           <propertyname="username"value="${username}"></property>
           <propertyname="password"value="${password}"></property>
     </bean>
     <!-- 声明式事务配置 -->
     <!-- 配置事务管理器 -->
     <beanid="txManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
           <propertyname="dataSource"ref="dataSource"/>
     </bean>
     <!-- 配置事务通知 -->
     <tx:adviceid="txAdvice"transaction-manager="txManager">
           <tx:attributes>
                <!-- 配置哪些方法使用什么样的事务,配置事务的传播特性 -->
                <tx:methodname="add"propagation="REQUIRED"/>
                <tx:methodname="insert"propagation="REQUIRED"/>
                <tx:methodname="update"propagation="REQUIRED"/>
                <tx:methodname="delete"propagation="REQUIRED"/>
                <tx:methodname="remove*"propagation="REQUIRED"/>
                <tx:methodname="get"read-only="true"/>
                <tx:methodname="*"propagation="REQUIRED"/>
           </tx:attributes>
     </tx:advice>
     <aop:config>
           <!-- 切入点应该是service.impl下的所有类的所有方法,这里为了方便测试所以直接用了dao.impl -->
           <aop:pointcutexpression="execution(* com.liujie.dao.impl.*.*(..))"
                id="pointcut"/>
           <aop:advisoradvice-ref="txAdvice"pointcut-ref="pointcut"/>
     </aop:config>
     <!-- 声明式事务配置结束 -->
     <!-- 配置sqlSessionFactory -->
     <beanid="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean">
           <propertyname="dataSource"ref="dataSource"></property>
           <propertyname="configLocation"value="classpath:mybatis-config.xml"></property>
     </bean>
     <!-- 自动扫描所配置包下的所有注解
          dao:@Repository("userDao")
          service:@Service("userService")
          action:@Controller("userAction") @Scope("prototype")
          属性的注入:@Autowired
      -->
     <context:component-scanbase-package="com.liujie"></context:component-scan>
</beans>




    db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=123456


     mybatis-config.xml ---> MyBatis

<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEconfigurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
     <typeAliases>
           <packagename="com.liujie.model"/>
     </typeAliases>
     
     <mappers>
           <!-- 所有mapper文件填写位置 -->
           <mapperresource="config/mybatis/user.mapper.xml"/>
     </mappers>
     
</configuration>

三、编码


@Repository("userDao")
publicclassUserDaoImpl extendsSqlSessionDaoSupportimplementsUserDao {
     @Autowired
     @Override
     publicvoidsetSqlSessionFactory(SqlSessionFactorysqlSessionFactory) {
           super.setSqlSessionFactory(sqlSessionFactory);
     }
     
     publicList<User> list() {
           returngetSqlSession().selectList("com.liujie.model.UserMapper.selectList");
     }
}

   这里
    @Autowired
     @Override
     publicvoidsetSqlSessionFactory(SqlSessionFactorysqlSessionFactory)
   实际上就是去装配
     <!-- 配置sqlSessionFactory -->
     <beanid="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean">
           <propertyname="dataSource"ref="dataSource"></property>
           <propertyname="configLocation"value="classpath:mybatis-config.xml"></property>
     </bean>


@Service("userService")
publicclassUserServiceImpl implementsUserService {
     @Autowired
     privateUserDaouserDao;
     
     publicvoidsetUserDao(UserDaouserDao) {
           this.userDao=userDao;
     }
     
     publicList<User> list() {
           returnuserDao.list();
     }
}

@Controller
publicclassUserController {
     
     @Autowired
     privateUserServiceuserService;
     
     publicvoidsetUserService(UserServiceuserService) {
           this.userService=userService;
     }
     
     @RequestMapping("/list")
     publicString list(ModelMapmodel) {
           model.addAttribute("list",userService.list());
           return"/list.jsp";
     }

}


四、配置乱码过滤器

     CharacterEncodingFilter.java:

@WebFilter("/*")
publicclassCharacterEncodingFilter implements Filter {
     Stringencoding=null;
     publicvoiddestroy() {
           encoding=null;
     }
     publicvoidinit(FilterConfig filterConfig)throwsServletException {
           encoding=filterConfig.getInitParameter("encoding");
     }
     publicvoiddoFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throwsIOException, ServletException {
           System.out.println("filter req:" + request);
           if(encoding==null || "".equals(encoding)) {
                encoding="utf-8";
           }
           // 解决的post请求
           request.setCharacterEncoding(encoding);
           response.setCharacterEncoding(encoding);
           HttpServletRequestWrapperreq= newHttpServletRequestWrapper((HttpServletRequest)request) {
                publicString getParameter(Stringname) {
                     // 对于get请求特殊处理
                     if("get".equals(this.getMethod().toLowerCase())) {
                           Stringvalue= super.getParameter(name);
                           try{
                                returnnewString(value.getBytes("iso-8859-1"),encoding);
                           }catch(UnsupportedEncodingException e) {
                                e.printStackTrace();
                           }
                           returnvalue;
                     }
                     returnsuper.getParameter(name);
                }
           };
           chain.doFilter(req,response);
          System.out.println("-------------CharacterEncodingFilter("+encoding + ")-------------");
     }
     
}



原创粉丝点击