springmvc+spring+mybatis整合项目

开发环境:

System:Windows server 2003

WebBrowser:IE6+、Firefox3+

JavaEE Server:tomcat5.

IDE:eclipse、MyEclipse 6.5

Database:MySQL

开发依赖库:

JavaEE5、Spring 3.0.5、Mybatis 3.0.2、myBatis-spring-1.0.0-rc2

参考百度文库:http://wenku.baidu.com/view/34559702a6c30c2259019e4e.html

源码下载:http://download.csdn.net/detail/nosi79998/6486219

1、 首先新建一个WebProject 命名为ssi,新建项目时,使用JavaEE5的lib库。然后手动添加需要的jar包,所需jar包如下:

2、 添加spring的监听及springMVC的核心Servlet,web.xml内容,内容如下:

<!-- 加载Spring容器配置 -->
  <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <!-- 设置Spring容器加载配置文件路径 -->
  <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:applicationContext-*.xml</param-value>
  </context-param>
  <!--配置Springmvc核心控制器-->
  <servlet>
        <servlet-name>spmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

  </servlet>
  <!--为DispatcherServlet建立映射 -->
  <servlet-mapping>
        <servlet-name>spmvc</servlet-name>
        <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  <!-- 解决工程编码过滤器 -->
  <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>
 </filter>
 <filter-mapping>
     <filter-name>CharacterEncodingFilter</filter-name>
     <url-pattern>/*</url-pattern>
 </filter-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>

3、 在WEB-INF目录中添加spmvc-servlet.xml,内容如下:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    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">
    <!--注解控测器-->
    <context:component-scan base-package="com.hoo" />

    <!--  annotation默认的方法映射适配器 -->
    <bean id="handlerMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
    <bean id="handlerAdapter" class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />

</beans>

4、 在src目录下添加applicationContext-common.xml,内容如下:

<!-- 配置DataSource数据源 -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
       <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
       <property name="url" value="jdbc:mysql://192.168.1.36:3306/test"/>
       <property name="username" value="fssykj"/>
       <property name="password" value="fssykj"/>
    </bean>
    <!-- 配置SqlSessionFactoryBean -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
       <property name="dataSource" ref="dataSource"/>
       <property name="configLocation" value="classpath:mybatis.xml"/>
       <!-- mapper和resultmap配置路径 -->
       <property name="mapperLocations">
            <list>
            <!-- 表示在com.hoo.resultmap包或以下所有目录中,以-resultmap.xml结尾所有文件 -->
             <value> classpath:com/hoo/mapper/*.xml</value >
            </list>
       </property>
    </bean>
    <!-- 通过扫描的模式,扫描目录在com/hoo/mapper目录下 -->
    <bean  class="org.mybatis.spring.annotation.MapperScannerPostProcessor">
       <property name="basePackage" value="com.hoo.mapper"/>
       <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
    </bean>

上面的配置最先配置的是DataSource,这里采用的是jdbc的DataSource;

然后是SqlSessionFactoryBean,这个配置比较关键。SqlSessionFactoryBean需要注入DataSource数据源,其次还要设置configLocation也就是mybatis的xml配置文件路径,完成一些关于mybatis的配置,如settings、mappers、plugin等;

如果使用MapperScannerPostProcessor模式,会自动将basePackage中配置的包路径下的所有带有@Mapper标注的Mapper(dao)层的接口生成代理,替代原来我们的Mapper实现。

5、AccountMapper接口内容如下:

@Mapper("mapper")
public interface AccountMapper extends SqlMapper {
    public List<Account> getAllAccount();
    public Account getAccount();
    public Account getAccountById(String id);
    public Account getAccountByNames(String spring);
    @Select("select * from account where username = #{name}")
    public Account getAccountByName(String name);
    public void addAccount(Account account);
    public void editAccount(Account account);
    public void removeAccount(int id);
}

6、 实体类和account-resultmap.xml

private static final long serialVersionUID = -7970848646314840509L;
    private Integer accountId;
    private Integer status;
    private String username;
    private String password;
    private String salt;
    private String email;
    private Integer roleId;
    //getter、setter
    @Override
    public String toString()
    {
        return this.accountId + "#" + this.status + "#" + this.username +  "#" +
        this.password +  "#" + this.email +  "#" + this.salt + "#" + this.roleId;
    }

account-resultmap.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接口对应,并实现其中的方法 -->
<mapper namespace="com.hoo.mapper.AccountMapper">
   <resultMap type="com.hoo.entity.Account" id="accountResultMap">
        <id property="accountId" column="account_id" />
        <result property="username" column="username" />
        <result property="password" column="password" />
        <result property="status" column="status" />
   </resultMap>
   <!-- id和mapper接口中的方法名对应,resultType使用mybatis.xml中的别名 -->
   <select id="getAccount" resultType="account">
         <![CDATA[
              select * from account limit 1
         ]]>
   </select>
   <select id="getAllAccount" resultType="list" resultMap="accountResultMap">
         <![CDATA[
              select * from account
         ]]>
   </select>
         <!-- accountResultMap是account-resultmap.xml中定义的resultmap -->
             <select id="getAccountById" parameterType="string" resultType="com.hoo.entity.Account" resultMap="accountResultMap">
         <![CDATA[
             select * from account where account_id = #{id}
         ]]>
   </select>
   <!-- accountMap.accountResultMap是account-resultmap.xml中定义的resultmap,通过namespace.id找到 -->
   <select id="getAccountByNames" parameterType="string" resultMap="accountResultMap">
         <![CDATA[
             select * from account where username = #{name}
         ]]>    </select>
   <sql id="user_name_pwd">
         username, password
   </sql>
   <!-- 自动生成id策略 -->
   <insert id="addAccount" useGeneratedKeys="true" keyProperty="account_id" parameterType="account">
         insert into account(account_id, status, username, password)
         values(#{accountId}, #{status}, #{username}, #{password})
   </insert>
   <!-- 根据selectKey语句生成主键 -->
   <insert id="addAccount4Key" parameterType="account">
        <selectKey keyProperty="account_id" order="BEFORE" resultType="int">
          select cast(random() * 10000 as Integer) a from #Tab
        </selectKey>
        insert into account(account_id, status, username, password)
        values(#{accountId}, #{status}, #{username}, #{password})
   </insert>
   <update id="editAccount" parameterType="account">
        update account set
        status = #{status},
        username = #{username},
        password = #{password}
        where account_id = #{accountId}
   </update>
   <delete id="removeAccount" parameterType="int">
        delete from account where account_id = #{id}
   </delete>
</mapper>

7、 在src目录中添加applicationContext-beans.xml内容如下:

<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/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
    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">
   <!-- 注解探测器 , 在JUnit测试的时候需要-->
   <context:component-scan base-package="com.hoo"/>
 </beans>

这里配置bean对象,一些不能用annotation注解的对象就可以配置在这里

8、 在src目录中添加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">
<configuration>
    <!-- 别名 -->
    <typeAliases>
        <typeAlias type="com.hoo.entity.Account" alias="account"/>
    </typeAliases>
</configuration>

在这个文件放置一些全局性的配置,如handler、objectFactory、plugin、以及mappers的映射路径(由于在applicationContext-common中的SqlSessionFactoryBean有配置mapper的location,这里就不需要配置)等

9、 定义AccountDao接口及实现代码,代码如下:

public interface AccountDao<T> {
    public boolean addAccount(T entity) throws DataAccessException;
    public T getAccount(Integer id) throws DataAccessException;
    public List<T> getList() throws DataAccessException;

}

接口实现

import java.util.List;
import javax.inject.Inject;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Repository;
import org.springframework.beans.factory.annotation.Autowired;
import com.hoo.dao.AccountDao;
import com.hoo.entity.*;
import com.hoo.mapper.*;
import org.springframework.beans.factory.annotation.Qualifier;
@SuppressWarnings("unchecked")
@Repository("accountDaoImpl")
public class AccountDaoImpl<T extends Account> implements AccountDao<T> {

    @Autowired(required=false)
    @Qualifier("mapper")
    private AccountMapper mapper;
    public boolean addAccount(T entity) throws DataAccessException {
         boolean flag=false;
         try{
             mapper.addAccount(entity);
             flag=true;
         }
         catch(DataAccessException e)
         {
             flag=false;
             throw e;
         }
         return flag;
    }
    public T getAccount(Integer id) throws DataAccessException {
        T entity = null;
       try
       {
           entity = (T)mapper.getAccountById(String.valueOf(id));
       }
       catch(DataAccessException e)
       { throw e;      }
       return entity;
    }
    public List<T> getList() throws DataAccessException {
        return (List<T> )mapper.getAllAccount();
    }

}

10、 服务层AccountBiz接口及实现代码

接口:

public interface AccountBiz<T> {
   public boolean addAccount(T entity) throws DataAccessException;
   public T getAccount(Integer id) throws DataAccessException;
   public List<T> getList() throws DataAccessException;
}

实现代码:

package com.hoo.biz.impl;

import java.util.List;

import org.springframework.dao.DataAccessException;

import com.hoo.biz.AccountBiz;
import com.hoo.entity.*;
import javax.inject.Inject;
import com.hoo.dao.*;
import org.springframework.stereotype.Service;
import com.hoo.exception.BizException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
@Service("accountBizImpl")
public class AccountBizImpl<T extends Account> implements AccountBiz<T> {

    @Autowired
    @Qualifier("accountDaoImpl")
    private AccountDao<T> dao;
    public boolean addAccount(T entity) throws DataAccessException {
        if(entity==null){
            throw new BizException(Account.class.getName()+"对象参数为empty!");

        }
        return dao.addAccount(entity);
    }

    public T getAccount(Integer id) throws DataAccessException {
         return dao.getAccount(id);
    }

    public List getList() throws DataAccessException {
        return dao.getList();
    }

}

11、 springMVC的控制器,AccountController代码如下:

package com.hoo.controller;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.beans.factory.annotation.Autowired;
import com.hoo.biz.AccountBiz;
import com.hoo.entity.Account;
import org.springframework.beans.factory.annotation.Qualifier;
@Controller("accountController")
@RequestMapping("/account")
public class AccountController {
   @Autowired
   @Qualifier("accountBizImpl")
   private AccountBiz<Account> biz;

   @RequestMapping("/add")
   public String add(@RequestParam String username, @RequestParam String password, @RequestParam String status)
   {
       Integer stat=Integer.valueOf(status);
       Account acc=new Account(username,password,stat);

       System.out.println(acc);
       biz.addAccount(acc);
       return "redirect:/account/list.do";
   }
   @RequestMapping("/get")
   public String get(Integer id,Model model)
   {
       System.out.println("###ID:"+id);
       model.addAttribute(biz.getAccount(id));
       return "/show.jsp";
   }
   @RequestMapping("/list")
   public String list(Model model)
   {
       model.addAttribute("list",biz.getList());
       return "/list.jsp";
   }
   @ExceptionHandler(Exception.class)
   public String exception(Exception e,HttpServletRequest request)
   {
       request.setAttribute("exception", e);
       return "/error.jsp";
   }
}

12、 基本页面代码

index.jsp

<body>
     <h3>整合springmvc3.2+spring+mybatis3.2</h3>
     <a href="account/list.do">查询所有</a><br/>
     <a href="account/add.do?username=abcdef&password=123132&status=2">添加</a><br>
     <a href="account/get.do?id=2">查询</a><br>
  </body>

List.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"  %> 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>

    <title>My JSP ‘list.jsp‘ starting page</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>

  <body>
    <c:forEach items="${list}" var="data">
    id:${data.accountId }--name:${data.username }--password:
    ${data.password }<hr/>
    </c:forEach>
  </body>
</html>

show.jsp

<body>
    ${account }<br>
    ${account.username }#${account.accountId }
  </body>

error.jsp

<body>
    <h2>Exception:${exception }</h2>
    <a href="javascript:document.getElementById(‘show‘).style.display=‘block‘;void(0);">详细信息</a>
    <div id="show" style="color:red;display:none;">
      <% Exception ex=(Exception)request.getAttribute("exception"); %>
      <%ex.printStackTrace(new PrintWriter(out)); %>
    </div>
  </body>

13、 以上就基本上完成了整个Spring+SpringMVC+MyBatis的整合了。如果你想添加事务管理,得在applicationContext-common.xml中加入如下配置:

<!-- 配置事务管理器,注意这里的dataSource和SqlSessionFactoryBean的dataSource要一致,不然事务就没有作用了 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
</bean>

同时还需要加入aspectjweaver.jar这个jar包;

注意的是:Jdbc的TransactionManager不支持事务隔离级别,我在整个地方加入其它的TransactionManager,增加对transaction的隔离级别都尝试失败!

也许可以用于jpa、jdo、jta这方面的东西。

下载地址:http://download.csdn.net/detail/nosi79998/6486219

经测试可以运行,欢迎下载学习

时间: 09-05

springmvc+spring+mybatis整合项目的相关文章

SpringMVC+Spring+Mybatis整合,使用druid连接池,声明式事务,maven配置

一直对springmvc和mybatis挺怀念的,最近想自己再搭建下框架,然后写点什么. 暂时没有整合缓存,druid也没有做ip地址的过滤.Spring的AOP简单配置了下,也还没具体弄,不知道能不能用,log也不知道能不能用,`(*∩_∩*)′哈哈,有点不负责任...... 直接上代码: 使用的eclipse和eclipse自带的maven,参考了网上的资料,有些代码是拷贝的,不过都自己测试过了.嗯,可以跑起来... 先上项目结构: 新建maven项目,选择web,然后配置pom: <pro

springmvc+spring+mybatis+maven项目构建

1.首先在myeclipse10中安装maven的插件,将插件放入D:\Program Files (x86)\myEclipse10\MyEclipse Blue Edition 10\dropins\maven中, 2. 新建文件:maven.link填入如下内容:path=D:/Program Files (x86)/myEclipse10/MyEclipse Blue Edition 10/dropins/maven 3.重启myeclipse插件安装成功. 4.在myeclipse10

SSM(springmvc+spring+mybatis)整合过程

问题?SSM(springmvc+spring+mybatis)整合过程 一.SSM框架比较S2SH框架的优缺点比较 站在个人使用这两个框架的观点儿上来说的话,我觉得这个不能定死的说,常用的S2SH,SpringMVC等,还可以考虑jFinal. 首先说S2SH,这个是用的比较多的,特别是在中小型项目中,针对大型项目就不行了,是Struts和hibernate过于庞大,过于重量级,项目大了之后配置文件多的也是麻烦事,配置文件多了之后一方面不好操作,另外比较蛋疼的是没法断点调试,特别是对底层数据库

ztree使用系列三(ztree与springmvc+spring+mybatis整合实现增删改查)

在springmvc+spring+mybatis里整合ztree实现增删改查,上一篇已经写了demo,下面就只贴出各层实现功能的代码: Jsp页面实现功能的js代码如下: <script> //用于捕获分类编辑按钮的 click 事件,并且根据返回值确定是否允许进入名称编辑状态 function beforeEditName(treeId, treeNode) { var zTree = $.fn.zTree.getZTreeObj("treeDemo"); zTree.

springmvc+spring+mybatis 整合

1.其实我也是菜鸟一枚,以前ssm不会,所以花了一段时间,学习了mybatis spring又进行了整合,后来又学习springmvc算是都看了看,今天就把整个搭建好的框架整理一下,和大家分享,如果错误希望指正…… 2.整个项目的目录结构: 3.有了整体结构之后我们一步一步整合来实现,整合步骤: (1).配置前端控制器,web.xml配置 (2).创建处理映射器 springmvc-server.xml 配置 (3).创建控制层 (4).业务逻辑层 (5).dao层 (6).sqlmapper

SpringMVC+Spring+Mybatis+Mysql项目搭建

眼下俺在搭建一个自己的个人站点玩玩.一边练习.一边把用到的技术总结一下,日后好复习. 站点框架大致例如以下图所看到的: 眼下仅仅用到了SpringMVC+Spring+Mybatis+Mysql.把它弄到了自己的server上来玩耍. 后台结构图: 眼下主要分为: view–controller层与前台交互,登陆拦截器 utils–工具类.一些经常使用的工具类. interceptor–拦截器.页面请求地址拦截和预防XSS漏洞拦截. impl–接口类,Service层-进行业务处理. excep

SpringMVC+Spring+MyBatis 整合与图片上传简单示例

一.思路: (一) Dao层: 1. SqlMapConfig.xml,空文件即可.需要文件头.2. applicationContext_dao.xml. a) 数据库连接池b) SqlSessionFactory对象,需要spring和mybatis整合包下的.c) 配置mapper文件扫描器. (二)Service层: 1.applicationContext_service.xml包扫描器,扫描@service注解的类.2.applicationContext_trans.xml配置事务

SpringMVC+Spring+MyBatis整合完整版Web实例(附数据)

最近段时间正在学习Spring MVC和MyBatis的一些知识.自己也在网络上面找了一些例子来练习.但是都不是很完整.所以,今天,自己也抽空写了个完成的关于Spring MVC + Spring + MyBatis(简称 SSM)的一个CRUD的完整Web 演示例子.如果你也是刚好学习这几个框架的新手,或许我做的这个例子对你刚好有所帮助哦! 演示工程的目录结构 添加数据页面 修改数据的页面 查询出的数据列表 下面来说下这个演示的小例子.首先,我是使用MyEclipse工具做的这个例子,整合了S

JAVA springmvc+spring+mybatis整合

一.springmvc---controller  spring----service  mybatiss---dao pring(包括springmvc).mybatis.mybatis-spring整合包.数据库驱动.第三方连接池. 因为springmvc和spring属于同一个公司不需要整合包,而mybaits和spring需要整合包. 二.jar包列表 pom文件依赖: 1 <dependencies> 2 <dependency> 3 <groupId>org