您的位置:首页 > 编程语言 > Java开发

Spring集成SpringMVC与Ibatis

2016-04-11 15:49 676 查看
一、web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 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></display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/spring-ibatis.xml,/WEB-INF/classes/spring-task.xml,/WEB-INF/classes/spring-servlet.xml</param-value>
</context-param>

<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet>
<description>spring mvc servlet</description>
<servlet-name>springMvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<description>spring mvc 配置</description>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/spring-servlet.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>

<filter>
<description>字符集过滤器</description>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<description>字符集编码</description>
<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>

<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

</web-app>


二、spring-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<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:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
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/aop http://www.springframework.org/schema/aop/spring-aop-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/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
">

<!-- 把标记了@Controller注解的类转换为bean -->
<context:component-scan base-package="com.x.*" />

<!-- 可通过注解控制事务 -->
<tx:annotation-driven />

<mvc:annotation-driven/>

<!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />

<!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 -->
<bean id="defaultViewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:order="3">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="contentType" value="text/html" />
<property name="prefix" value="/" />
<property name="suffix" value=".jsp" />
</bean>

<!-- 处理Mutipart文件上次的bean -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
p:defaultEncoding="utf-8" />

</beans>
三、spring-ibatis.xml

<?xml version="1.0" encoding="UTF-8"?>
<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:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-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/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
">

<!-- 引入属性文件 -->
<context:property-placeholder location="classpath:dbConfig.properties" />
<!-- 配置数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>

<!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>

<!-- 创建SqlSessionFactory,同时指定数据源 -->
<!--   SqlMap setup for iBATIS Database Layer   -->
<bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor"
lazy-init="true" />

<bean id="oracleLobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler" lazy-init="true">
<property name="nativeJdbcExtractor">
<ref local="nativeJdbcExtractor" />
</property>
</bean>

<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>

<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation">
<value>classpath:/com/x/dao/ibatis/sqlMap/sql-map-config.xml</value>
</property>
<property name="dataSource" ref="dataSource"/>
<property name="lobHandler">
<ref local="oracleLobHandler" />
</property>
</bean>

</beans>
四、sql-map-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">

<sqlMapConfig>
<settings cacheModelsEnabled="true" lazyLoadingEnabled="true" errorTracingEnabled="true" enhancementEnabled="true" maxRequests="2048" maxSessions="1024" maxTransactions="512" useStatementNamespaces="false"/>

<typeHandler jdbcType="CLOB" javaType="java.lang.String"
callback="org.springframework.orm.ibatis.support.ClobStringTypeHandler" />
<sqlMap resource="com/x/dao/ibatis/sql/UserSql.xml"/>
</sqlMapConfig>
五、UserSql.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">

<sqlMap namespace="UserSQL">

<typeAlias alias="user" typ
4000
e="com.kysis.model.User"/>

<resultMap id="userResult" class="user">
<result property="id" column="id"/>
<result property="username" column="USER_ID"/>
<result property="password" column="password"/>
<result property="CHName" column="CHS_NAME"/>
<result property="depID" column="DEP_ID"/>
<result property="memo" column="memo"/>
<result property="homePhone" column="phone"/>
<result property="email" column="email"/>
<result property="phoneNumber" column="MSISDN"/>
<result property="passwordHint" column="password_hint"/>
<result property="version" column="version"/>
<result property="site" column="SITE"/>
<result property="accountExpired" column="account_expired"/>
<result property="enabled" column="IS_USABLE"/>
<result property="accountLocked" column="account_locked"/>
<result property="credentialsExpired" column="credentials_expired"/>
<result property="updatepwd" column="uppwd_date"/>
<result property="outUse" column="OUT_USE"/>
<result property="lastCanuseDate" column="LAST_CANUSE_DATE"/>
</resultMap>

<select id="User.getLoginUser" parameterClass="user" resultMap="userResult">
select *  from user_info
where USER_ID = #username#
and PASSWORD = #password#
and IS_USABLE=1
</select>

<select id="User.getValideLoginUser" parameterClass="user" resultMap="userResult">
select u.*  from user_info u
where u.USER_ID = #username#
and u.PASSWORD = #password#
and IS_USABLE=1
</select>

<select id="getUserRolesId" parameterClass="java.lang.Long" resultClass="string">
<![CDATA[
select r.id from user_rol r, user_role_ref ur
where (ur.role_id = r.id) and ur.user_id=#id#
]]>
</select>

<update id="updatePassword" parameterClass="user" >
<![CDATA[
UPDATE USER_INFO u SET u.PASSWORD = #password# WHERE u.USER_ID=#username#
]]>
</update>

</sqlMap>
六、UserLoginController

package com.x.controller.web;

import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.x.service.UserService;
import com.x.util.InputstreamUtil;
import com.x.util.json.CreateRespJson;
/**
*	用户登录
*/
@Controller
public class UserLoginController {

protected final static Logger logger = LogManager.getLogger(UserLoginController.class);
@Autowired
private UserService userService;

@RequestMapping(value = "userLogin",method = RequestMethod.POST,produces = "application/json; charset=UTF-8")
@ResponseBody
public Object validateUserLogin(HttpServletRequest request, HttpServletResponse response){

//String reqJson = request.getParameter("param");
String reqJson = null;
try {
reqJson = InputstreamUtil.Inputstr2Str_byteArr(request.getInputStream(), "UTF-8");
} catch (IOException e) {
logger.error("接受 用户登录 请求json失败!");
return CreateRespJson.parseJsonFailed();
}

String retJson = userService.validateUserLogin(reqJson);

return retJson;

}

}
七、UserService.java

package com.x.service;

import com.x.model.User;
/**
* Business Service Interface to handle communication between web and
* persistence layer.
*
* <p><a href="UserManager.java.html"><i>View Source</i></a></p>
*
* @author <a href="mailto:matt@raibledesigns.com">Matt Raible</a>
*  Modified by <a href="mailto:departureAirportName@getrolling.com">departureAirportName Kibler </a>
*/
public interface UserService {

public String validateUserLogin(String reqJson);

}

八、UserServiceImpl.java

package com.x.service.impl;
import org.acegisecurity.providers.encoding.Md5PasswordEncoder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
* Implementation of UserManager interface.</p>
*
* <p>
* <a href="UserManagerImpl.java.html"><i>View Source</i></a>
* </p>
*
*/
@Service("userService")
@Transactional
public class UserServiceImpl  implements UserService {

@Autowired
private UserDao userDao;

@Override
public String validateUserLogin(String reqJson) {

}

}

九、UserDao.java

package com.x.dao;

import com.x.model.User;
/**
* User Data Access Object (Dao) interface.
*
* <p>
* <a href="UserDao.java.html"><i>View Source</i></a>
* </p>
*
* @author <a href="mailto:matt@raibledesigns.com">Matt Raible</a>
*/
public interface UserDao{

}


十、UserDaoImpl.java

package com.x.dao.impl;

import java.util.HashSet;
import java.util.List;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import org.springframework.stereotype.Repository;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.x.dao.UserDao;
import com.x.model.User;

/**
* This class interacts with iBatis's SQL Maps to save and retrieve User
* related objects.
*
* <p><a href="UserDaoiBatis.java.html"><i>View Source</i></a></p>
*
* @author <a href="mailto:matt@raibledesigns.com">Matt Raible</a>
*/
@Repository(value = "userDao")
public class UserDaoImpl extends SqlMapClientDaoSupport implements UserDao{

@Autowired
public void setMySqlMapClient(SqlMapClient mySqlMapClient) {
super.setSqlMapClient(mySqlMapClient);
}
}

十一、changePassword.jsp

<%@ page pageEncoding="UTF-8"%>
<!doctype html>
<html class="no-js">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="description" content="">
<meta name="keywords" content="">
<meta name="viewport"
content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<title>修改密码</title>

<!-- Set render engine for 360 browser -->
<meta name="renderer" content="webkit">

<!-- No Baidu Siteapp-->
<meta http-equiv="Cache-Control" content="no-siteapp"/>

<link rel="icon" type="image/png" href="../../assets/i/favicon.png">

<!-- Add to homescreen for Chrome on Android -->
<meta name="mobile-web-app-capable" content="yes">
<link rel="icon" sizes="192x192" href="../../assets/i/favicon.png">

<!-- Add to homescreen for Safari on iOS -->
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="apple-mobile-web-app-title" content="Amaze UI"/>
<link rel="apple-touch-icon-precomposed" href="../../assets/i/favicon.png">

<!-- Tile icon for Win8 (144x144 + tile color) -->
<meta name="msapplication-TileImage" content="../../assets/i/favicon.png">
<meta name="msapplication-TileColor" content="#0e90d2">

<!-- SEO: If your mobile URL is different from the desktop URL, add a canonical link to the desktop page https://developers.google.com/webmasters/smartphone-sites/feature-phones -->
<!--
<link rel="canonical" href="http://www.example.com/">
-->
<link rel="alternate icon" type="image/png" href="../../assets/i/favicon.png">
<link rel="stylesheet" href="../../assets/css/amazeui.min.css"/>
<link rel="stylesheet" href="../../assets/css/app.css">
<!--[if (gte IE 9)|!(IE)]><!-->
<script src="../../assets/js/jquery.min.js"></script>
<!--<![endif]-->
<script src="../../assets/js/amazeui.min.js"></script>
<style>
.header {
text-align: center;
}
.header h1 {
font-size: 200%;
color: #333;
margin-top: 30px;
}
.header p {
font-size: 14px;
}
</style>

</head>
<body >
<!--[if lte IE 9]>
<p class="browsehappy">你正在使用<strong>过时</strong>的浏览器,Amaze UI 暂不支持。 请 <a
href="http://browsehappy.com/" target="_blank">升级浏览器</a>
以获得更好的体验!</p>
<![endif]-->
<script type="text/javascript">

var browser = {
versions: function() {
var u = navigator.userAgent, app = navigator.appVersion;
return {//移动终端浏览器版本信息
trident: u.indexOf('Trident') > -1, //IE内核
presto: u.indexOf('Presto') > -1, //opera内核
webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核
gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, //火狐内核
mobile: !!u.match(/AppleWebKit.*Mobile.*/) || !!u.match(/AppleWebKit/), //是否为移动终端
ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端
android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android终端或者uc浏览器
iPhone: u.indexOf('iPhone') > -1 || u.indexOf('Mac') > -1, //是否为iPhone或者QQHD浏览器
iPad: u.indexOf('iPad') > -1, //是否iPad
webApp: u.indexOf('Safari') == -1 //是否web应该程序,没有头部与底部
};
}(),
language: (navigator.browserLanguage || navigator.language).toLowerCase()
}

$(function(){
if('${param.msg}' == '成功。'){
if (browser.versions.ios || browser.versions.iPhone || browser.versions.iPad) {
var url="app:"+"1";
window.location = url;
addSubView('view');
native.calculateForJS("2");
}else if (browser.versions.android) {
window.key.jsMethod('1');
}
}else if('${param.msg}' != ''){
$(".am-modal-bd").append('${param.msg}');
$("#retMsg").click();
}
$("#oldPassword").val('${param.oldPassword}');
$("#newPassword").val('${param.newPassword}');
$("#confirmPassword").val('${param.confirmPassword}');

});
var submitCommit = function(){
var progress = $.AMUI.progress;
progress.start();
$("#submitBtn").button("loading");
}
</script>
<div class="am-g">
<div class="am-u-lg-6 am-u-md-8 am-u-sm-centered">
<hr>
<h2 align="center" >修改密码</h2>
<hr/>
<form method="post" class="am-form" id="changePassword" action="${pageContext.request.contextPath}/changePassword.do" name="changePassword" onSubmit="return submitCommit();" >

<input type="hidden" name="userName" id="userName" placeholder="用户名不能为空"  value="${param.userName}" required>

<span class="am-icon-lock"></span>
<label for="password">旧密码:</label>
<input type="password" name="oldPassword" id="oldPassword" placeholder="旧密码不能为空"  value="" required>
<hr>

<span class="am-icon-lock"></span>
<label for="password">新密码:</label>
<input type="password" name="newPassword" id="newPassword" minlength="8" maxlength="20" placeholder="输入的密码必须是字母加数字且8位以上"
pattern="^[A-Za-z]+[0-9]+[A-Za-z0-9]*|[0-9]+[A-Za-z]+[A-Za-z0-9]*$" value="" required>

<span class="am-icon-lock"></span>
<label for="password">确认密码:</label>
<input type="password" name="confirmPassword" class="am-icon-lock" id="confirmPassword" minlength="8" maxlength="20" placeholder="输入的密码必须是字母加数字且8位以上"
pattern="^[A-Za-z]+[0-9]+[A-Za-z0-9]*|[0-9]+[A-Za-z]+[A-Za-z0-9]*$" value="" required>
<hr>

<div class="am-cf">
<input type="submit" id="submitBtn" value="确认修改" class="am-btn am-btn-primary am-btn-sm am-center am-round" data-am-loading="{loadingText: '努力加载中...'}">
</div>
</form>
</div>
</div>
<button
id="retMsg"
type="button"
style="display:none;"
class="am-btn am-btn-primary"
data-am-modal="{target: '#my-alert'}">
</button>
<div class="am-modal am-modal-alert" tabindex="-1" id="my-alert">
<div class="am-modal-dialog">
<div class="am-modal-hd am-btn-primary am-btn-sm am-center">提示</div>
<div class="am-modal-bd">
</div>
<div class="am-modal-footer">
<span class="am-modal-btn">确定</span>
</div>
</div>
</div>
<!--[if lt IE 9]>
<script src="http://libs.baidu.com/jquery/1.11.1/jquery.min.js"></script>
<script src="http://cdn.staticfile.org/modernizr/2.8.3/modernizr.js"></script>
<script src="../../assets/js/amazeui.ie8polyfill.min.js"></script>
<![endif]-->
</body>

</html>

十二、UserLoginTest.java

package com.x.test;

import java.io.IOException;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;

public class UserLoginTest {
/**
* @param args
*/
public static void main(String[] args) {
try {
String param = "{\"req_source\":\"IOS\",\"userId\":\"username\",\"password\":\"password\",\"sign\":\"ac59075b964b0715\"}";
String url = "http://x.x.x.x:8081/x/userLogin.do";
PostMethod method = new PostMethod(url);
method.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8");
HttpClient client = new HttpClient();
client.getHttpConnectionManager().getParams()
.setConnectionTimeout(5000);
//method.setParameter("param", param);
method.setRequestBody(param);
int status = client.executeMethod(method);
method.getURI();
String ret = method.getResponseBodyAsString();
System.out.println("status="+status+" ret="+ret);
} catch (HttpException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: