开发环境:
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" ?>
<!--CRLF-->
<! DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd" >
<!--CRLF-->
< configuration >
<!--CRLF-->
<!-- 别名 -->
<!--CRLF-->
< typeAliases >
<!--CRLF-->
< typeAlias type ="com.hoo.entity.Account" alias ="account" />
<!--CRLF-->
</ typeAliases >
<!--CRLF-->
</ configuration >
<!--CRLF-->
在这个文件放置一些全局性的配置,如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要一致,不然事务就没有作用了 -->
<!--CRLF-->
< bean id ="transactionManager" class ="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
<!--CRLF-->
< property name ="dataSource" ref ="dataSource" />
<!--CRLF-->
</ bean >
<!--CRLF-->
同时还需要加入aspectjweaver.jar这个jar包;
注意的是:Jdbc的TransactionManager不支持事务隔离级别,我在整个地方加入其它的TransactionManager,增加对transaction的隔离级别都尝试失败!
也许可以用于jpa、jdo、jta这方面的东西。
下载地址:http://download.csdn.net/detail/nosi79998/6486219
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com