SpringMVC+Mybatis集成记录

来源:互联网 发布:手机如何清除数据 编辑:程序博客网 时间:2024/06/05 03:11

想把自己网站从SpringMVC的数据持久层从SpringMVC自带的jdbctemplate()转为Mybatis,但担心会把项目搞炸,到时麻烦,还是先做个demo,不然哭都没地儿去。

而且最近时间,一方面签三方时填资料发现字都不会写了,另一方面最近帮大佬写测试文档时语言表达都僵硬起来,趁现在没项目时间多好好写写Blog。

先demo再问题

项目结构mybatis麻烦点的就是需要配置一些东西,其他都和其他持久层框架一样

文件路径需要注意一下,个人习惯将除web.xml文件,其他xml文件放在config文件夹中

当在web.xml中路径用到其他文件时

1:如果同在WEB-INF下且没又其他package,可以直接使用,最不济加上/WEB-INF/xxx.xml,这个没试过

2:如果其他文件在WEB-INF新建的文件夹中,路径就要使用/WEB-INF/xxx(package)/xxx.xml

3:如果放在src/main/java下,路径需要classpath:xxx(package)/xxx.xml

web.xml

<?xml version="1.0" encoding="UTF-8"?>  <web-app version="3.0" 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">            <!-- Spring配置 -->    <!-- 配置Spring配置文件路径,好让ContextLoaderListener对其加载与解析-->     <context-param>        <param-name>contextConfigLocation</param-name>        <param-value>/WEB-INF/config/applicationContext.xml</param-value>    </context-param>     <!-- 配置Spring上下文监听器,它的作用就是在启动WEB容器时,就会自动装在我们applicationContext.xml配置-->    <listener>        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>    </listener>    <!-- 配置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>/*</url-pattern>    </filter-mapping>    <!-- Spring MVC 核心控制器 DispatcherServlet 配置 -->    <servlet>        <servlet-name>dispatcher</servlet-name>        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>        <init-param>            <!-- 用于标明spring-mvc.xml配置的位置,我是存放在config文件夹下 -->            <param-name>contextConfigLocation</param-name>            <param-value>/WEB-INF/config/dispatcher-servlet.xml</param-value>        </init-param>         <load-on-startup>1</load-on-startup>    </servlet>    <servlet-mapping>        <servlet-name>dispatcher</servlet-name>        <!-- 拦截所有/的请求,交给DispatcherServlet处理,性能最好 -->        <url-pattern>/</url-pattern>    </servlet-mapping>        <!--用于设定默认首页-->    <welcome-file-list>        <welcome-file>index.jsp</welcome-file>    </welcome-file-list></web-app>
dispatcher-servlet.xml MVC配置

<?xml version="1.0" encoding="UTF-8" standalone="no"?>  <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.0.xsd       http://www.springframework.org/schema/context       http://www.springframework.org/schema/context/spring-context-3.0.xsd       http://www.springframework.org/schema/mvc       http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> <!--扫描控制器,当配置了它后,Spring会自动的到com.damionew.controller    下扫描带有@controller @service @component等注解等类,将他们自动实例化-->    <context:component-scan base-package="com.damionew.controller" />        <!--<mvc:annotation-driven /> 会自动注册DefaultAnnotationHandlerMapping与    AnnotationMethodHandlerAdapter 两个bean,它解决了一些@controllerz注解使用时的提前配置-->    <context:annotation-config />     <mvc:annotation-driven />        <mvc:resources mapping="/jsp/**" location="/WEB-INF/jsp/" />     <!--配置 页面控制器-->    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">        <property name="prefix" value="/WEB-INF/jsp/"/>        <property name="suffix" value=".jsp" />    </bean></beans>
applicationContext.xml Spring配置,DataSource

<?xml version="1.0" encoding="UTF-8" standalone="no"?>  <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.0.xsd       http://www.springframework.org/schema/context       http://www.springframework.org/schema/context/spring-context-3.0.xsd       http://www.springframework.org/schema/mvc       http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">          <!--  扫描文件(自动将service层注入)-->    <context:component-scan base-package="com.damionew.service"/>    <!--配置数据源-->    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">        <property name="driverClass" value="com.mysql.jdbc.Driver"/>        <property name="jdbcUrl" value="jdbc:mysql://123.206.113.157:3307/ftn"/>        <property name="user" value="root"/>        <property name="password" value=""/>        <!--连接池中保存的最大连接数目-->        <property name="maxPoolSize" value="20"/>        <!--连接池中保存的最少连接数目-->        <property name="minPoolSize" value="2"/>        <!-- 初始化连接大小 -->        <property name="initialPoolSize" value="2"/>        <!-- 获取连接最大等待时间 -->        <property name="maxConnectionAge" value="6000"/>        <!-- 连接池最大空闲 -->        <property name="maxIdleTime" value="60"/>    </bean>    <!--配置sqlSessionFactory 并将数据源注入-->    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">        <!--注入数据源-->        <property name="dataSource" ref="dataSource"/>        <!--指定要使用到到mybatis配置文件-->        <property name="configLocation" value="/WEB-INF/config/config.xml"/>         <!--用于配置mapper映射xml-->        <property name="mapperLocations" value="classpath*:com/damionew/mapper/*.xml"/>    </bean>    <!-- 创建数据映射器-->    <bean  class="org.mybatis.spring.mapper.MapperScannerConfigurer">          <property name="basePackage" value="com.damionew.dao"/>    </bean>    <!-- 对数据源进行事务管理 -->    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">        <property name="dataSource" ref="dataSource"/>    </bean>    </beans>
唉 URL直接暴露吧,反正也没什么东西

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>    <!--为com.damionew.model.User设置别名 User 方便调用-->    <typeAliases>        <typeAlias alias="User" type="com.damionew.model.User"/>    </typeAliases></configuration>
忘记了最重要的pom.xml

如果报class not found,那怕是少了依赖了,反正在配置文件中,也不会红×提醒

<properties>        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>        <spring.version>4.3.0.RELEASE</spring.version>    </properties>    <dependencies>        <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>            <version>5.1.38</version>        </dependency>        <dependency>            <groupId>org.apache.logging.log4j</groupId>            <artifactId>log4j-core</artifactId>            <version>2.6.1</version>        </dependency>        <dependency>            <groupId>org.mybatis</groupId>            <artifactId>mybatis</artifactId>            <version>3.4.1</version>        </dependency>        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <version>4.10</version>        </dependency>        <!-- 添加Spring-core包 -->        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-core</artifactId>            <version>4.1.4.RELEASE</version>        </dependency>        <!-- 添加spring-context包 -->        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-context</artifactId>            <version>4.1.4.RELEASE</version>        </dependency>        <!-- 添加spring-tx包 -->        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-tx</artifactId>            <version>4.1.4.RELEASE</version>        </dependency>        <!-- 添加spring-jdbc包 -->        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-jdbc</artifactId>            <version>4.1.4.RELEASE</version>        </dependency>        <!-- 为了方便进行单元测试,添加spring-test包 -->        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-test</artifactId>            <version>4.1.4.RELEASE</version>        </dependency>        <!--添加spring-web包 -->        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-web</artifactId>            <version>4.1.4.RELEASE</version>        </dependency>        <!-- 添加spring-webmvc -->        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-webmvc</artifactId>            <version>4.1.4.RELEASE</version>        </dependency>            <!--添加aspectjweaver包 -->        <dependency>            <groupId>org.aspectj</groupId>            <artifactId>aspectjweaver</artifactId>            <version>1.8.5</version>        </dependency>        <!-- 添加mybatis与Spring整合的核心包 -->        <dependency>            <groupId>org.mybatis</groupId>            <artifactId>mybatis-spring</artifactId>            <version>1.3.0</version>        </dependency>        <!-- JSTL -->        <dependency>            <groupId>javax.servlet</groupId>            <artifactId>jstl</artifactId>            <version>1.2</version>        </dependency>        <!-- jackson -->        <dependency>            <groupId>com.fasterxml.jackson.core</groupId>            <artifactId>jackson-core</artifactId>            <version>2.5.2</version>        </dependency>        <dependency>            <groupId>com.fasterxml.jackson.core</groupId>            <artifactId>jackson-databind</artifactId>            <version>2.5.2</version>        </dependency>        <dependency>        <groupId>com.mchange</groupId>        <artifactId>c3p0</artifactId>        <version>0.9.5-pre8</version>        </dependency>    </dependencies>

深知代码不全给别人看得时候回带来多少烦恼,自己以为的,并不是别人认为的

controller->UserController

@Autowired自动装配,就不用在配置文件中再配置Bean

package com.damionew.controller;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import com.damionew.model.User;import com.damionew.service.UserService;@Controller@RequestMapping("/user")public class UserController {@Autowiredprivate UserService userService;public UserService getUserService() {return userService;}public void setUserService(UserService userService) {this.userService = userService;}@RequestMapping("/Info")public String userInfo(Model model) {List<User> list = userService.getUserInfo();System.out.println(list.get(0).getUsername());System.out.println(list.get(0).getUserpass());String username = list.get(0).getUsername();model.addAttribute("username", username);return "userInfo";}}
dao->UserDao

package com.damionew.dao;import java.util.List;import com.damionew.model.User;public interface UserDao {public List<User> selectUser();}
mapper->UserDao.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用于与DAO层的接口类进行绑定,这样我们无需实现DAO层的接口  类,其接口类就能够自动的找到相关的SQL语句进行绑定实现--><mapper namespace="com.damionew.dao.UserDao">    <!--select表示查询,它的id名称必须与DAO层接口的方法名相同,否则无法绑定-->    <select id="selectUser" parameterType="string" resultType="User">        select * from user     </select></mapper>

model->User

package com.damionew.model;public class User {private int id;private String username;private String userpass;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getUserpass() {return userpass;}public void setUserpass(String userpass) {this.userpass = userpass;}}
service->impl->UserServiceImpl

package com.damionew.service.impl;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.damionew.dao.UserDao;import com.damionew.model.User;import com.damionew.service.UserService;@Service("UserService")public class UserServiceImpl implements UserService {@AutowiredUserDao mapper;public List<User> getUserInfo() {List<User> userList= mapper.selectUser();return userList;}}
service->UserService 接口

package com.damionew.service;import java.util.List;import com.damionew.model.User;public interface UserService {public List<User> getUserInfo();}

因为想要把原来做的项目转为Mybatis,所以java代码部分写很多了,注释很少,配置多些,亦为自己以后快捷使用

已经放在码云上https://gitee.com/Damionew/MMVC,如果需要自取。

git地址:直接在eclipse中Import git 项目:https://gitee.com/Damionew/MMVC.git