博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springmvc+spring+mybatis整合实例【转】
阅读量:6683 次
发布时间:2019-06-25

本文共 11601 字,大约阅读时间需要 38 分钟。

  hot3.png

开发环境:

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

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

 

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

 

org.springframework.web.context.ContextLoaderListener
contextConfigLocation
classpath:applicationContext-*.xml
spmvc
org.springframework.web.servlet.DispatcherServlet
spmvc
*.do
CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
utf-8
CharacterEncodingFilter
/*
index.jsp

 

 

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

 

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

classpath:com/hoo/mapper/*.xml

 

上面的配置最先配置的是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
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

username, password
insert into account(account_id, status, username, password) values(#{accountId}, #{status}, #{username}, #{password})
select cast(random() * 10000 as Integer) a from #Tab
insert into account(account_id, status, username, password) values(#{accountId}, #{status}, #{username}, #{password})
update account set status = #{status}, username = #{username}, password = #{password} where account_id = #{accountId}
delete from account where account_id = #{id}

 

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

 

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

8、 在src目录中添加mybatis.xml,内容如下:

 
 
 

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

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

public interface AccountDao
{ public boolean addAccount(T entity) throws DataAccessException; public T getAccount(Integer id) throws DataAccessException; public List
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
implements AccountDao
{ @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
getList() throws DataAccessException { return (List
)mapper.getAllAccount(); }}

 

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

接口:

public interface AccountBiz
{ public boolean addAccount(T entity) throws DataAccessException; public T getAccount(Integer id) throws DataAccessException; public List
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
implements AccountBiz
{ @Autowired @Qualifier("accountDaoImpl") private AccountDao
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
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

     

整合springmvc3.2+spring+mybatis3.2

查询所有
添加
查询

 

List.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"  %>           My JSP 'list.jsp' starting page        
id:${data.accountId }--name:${data.username }--password: ${data.password }

 

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中加入如下配置:

 

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

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

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

 框架/平台构成:

Maven+Springmvc + Mybatis + Shiro(权限)+ Tiles(模板) +ActiveMQ(消息队列) + Rest(服务) + WebService(服务)+ EHcache(缓存) + Quartz(定时调度)+ Html5(支持PC、IOS、Android)

用户权限系统:

组织结构:角色、用户、用户组、组织机构;权限点:页面、方法、按钮、数据权限、分级授权
项目管理新体验:
快速出原型系统、组件树、版本控制、模块移植、协同开发、实时监控、发布管理
可持续集成:
所有组件可移植、可定制、可扩充,开发成果不断积累,形成可持续发展的良性循环
支持平台平台: 
Windows XP、Windows 7 、Windows 10 、 Linux 、 Unix
服务器容器:
Tomcat 5/6/7 、Jetty、JBoss、WebSphere 8.5 

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

 

JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客

转载于:https://my.oschina.net/grthrj/blog/750913

你可能感兴趣的文章
002-利润计算
查看>>
Tensorflow实现CNN
查看>>
543. Diameter of Binary Tree(两节点的最长路径)
查看>>
数字证书算法概念
查看>>
Git 分支(分布式版本控制系统)
查看>>
iOS - Card Identification 银行卡号识别
查看>>
COCOS2D-X 无法编译到Android平台的解决办法
查看>>
SVN
查看>>
Microsoft SQL - 指令
查看>>
一个复杂的SQL语句
查看>>
跟随我在oracle学习php(23)
查看>>
MongoDB的使用
查看>>
【BZOJ】3036: 绿豆蛙的归宿
查看>>
RvmTranslator for Linux
查看>>
百度面试经历
查看>>
玩叠骰子
查看>>
TOJ 4383: n % ( pow( p , 2) ) ===0
查看>>
oracle数据库学习
查看>>
C语言程序,找出一个二维数组的鞍点。
查看>>
微信公众号开发——入门
查看>>