Struts2+MyBatis3.1.0+Spring3.1.0整合之道二SqlSessionTemplate
相关框架搭建在Struts2+MyBatis3.1.0+Spring3.1.0整合之道一 数据映射接口,已经讲解的非常详细,这里就不在讲述SSI框架的搭建。
(1)、采用接口org.apache.ibatis.session.SqlSession的实现类org.mybatis.spring.SqlSessionTemplate。
在mybatis中, sessionFactory可由SqlSessionFactoryBuilder.来创建。
sping配置文件:
<?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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
"
>
<!-- 采用注释的方式配置bean -->
<context:annotation-config />
<!-- 配置要扫描的包 -->
<context:component-scan base-package="com.vixuan.skydrive"></context:component-scan>
<!--proxy-target-class="true"强制使用cglib代理 如果为false则spring会自动选择-->
<aop:aspectj-autoproxy proxy-target-class="true"/>
<!--数据源配置 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://127.0.0.1:3306/skydrive</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>123456</value>
</property>
<property name="maxIdle">
<value>40</value>
</property>
<property name="maxWait">
<value>40</value>
</property>
</bean>
<!--SqlSessionFactoryBean 配置 -->
<span style="color:#ff0000;"> <bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation">
<value>classpath:mybatis.xml</value>
</property>
<property name="dataSource">
<ref local="dataSource"></ref>
</property>
</span> </bean>
<span style="color:#ff0000;"><!-- 配置SqlSessionTemplate -->
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="SqlSessionFactory" />
</bean>
</span>
<!--配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref local="dataSource"></ref>
</property>
</bean>
<!-- 使用annotation注解方式配置事务 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="impl" class="com.vixuan.skydrive.daoimpl.UserDaoImpl" autowire="byName">
<span style="color:#ff0000;"><property name="sqlSessionTemplate" ref="sqlSessionTemplate"></property></span>
</bean>
<bean id="userService" class="com.vixuan.skydrive.serviceimpl.UserServiceImpl" autowire="byName" >
<property name="impl" ref="impl"></property>
</bean>
</beans>
MyBatis配置文件:
<?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 alias="user" type="com.vixuan.skydrive.model.User"/>
</typeAliases>
<mappers>
<mapper resource="com/vixuan/skydrive/sqlmap/user.xml" />
</mappers>
</configuration>
实体类映射文件user.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">
<mapper namespace="com.pdsu.edu.domain.User">
<resultMap type="com.vixuan.skydrive.model.User" id="userResult">
<result property="user" column="user"/>
<result property="pass" column="pass" />
<result property="xm" column="xm" />
<result property="email" column="email"/>
<result property="phone" column="phone" />
<result property="qq" column="qq" />
</resultMap>
<select id="selectAllUser" resultMap="userResult">
select * from t_user
</select>
<select id="findUserById" parameterType="String" resultMap="userResult">
select *
from t_user where user=#{user}
</select>
<insert id="insert" parameterType="user">
<![CDATA[
insert into
t_user(user,pass,xm,email,phone,qq) values(#{user},#{pass},#{xm},#{email},#{phone},#{qq})
]]>
</insert>
<update id="update" parameterType="user">
update t_user set
user=#{user},pass=#{pass} where xm=#{xm}
</update>
<delete id="delete" parameterType="String">
delete from t_user where
user=#{user}
</delete>
</mapper>
dao层接口和dao层实现(daoImpl)
UserDao
package com.vixuan.skydrive.dao;
import java.util.List;
import com.vixuan.skydrive.model.User;
public interface UserDao {
public abstract void insert(User dao);
public abstract void update(User dao);
public abstract void delte(User dao);
public abstract User findById(String Id);
public List<User> findAll();
}
UserDaoImpl
package com.vixuan.skydrive.daoimpl;
import java.util.List;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.vixuan.skydrive.dao.UserDao;
import com.vixuan.skydrive.model.User;
@Repository
public class UserDaoImpl implements UserDao {
//sql 标识符
private final String INSERT= "insert";
private final String UPDATE = "update";
private final String DELETE = "delete";
private final String FIND_USER_BYID = "findUserById";
private final String SELECT_ALL_USER = "selectAllUser";
//依赖注入
@Autowired
private SqlSessionTemplate sqlSessionTemplate;
//构造函数
public SqlSessionTemplate getSqlSessionTemplate() {
return sqlSessionTemplate;
}
//
public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
this.sqlSessionTemplate = sqlSessionTemplate;
}
public void insert(User dao) {
// TODO Auto-generated method stub
sqlSessionTemplate.insert(INSERT, dao);
}
public void update(User dao) {
// TODO Auto-generated method stub
sqlSessionTemplate.update(UPDATE, dao);
}
public void delte(User dao) {
// TODO Auto-generated method stub
sqlSessionTemplate.delete(DELETE, dao);
}
public User findById(String Id) {
// TODO Auto-generated method stub
return sqlSessionTemplate.selectOne(FIND_USER_BYID, Id);
}
public List<User> findAll() {
// TODO Auto-generated method stub
return sqlSessionTemplate.selectList(SELECT_ALL_USER);
}
}
server接口和serverimpl实现
UserServer:
package com.vixuan.skydrive.service;
import java.util.List;
import com.vixuan.skydrive.model.User;
public interface UserService {
public abstract void insert(User dao);
public abstract void update(User dao);
public abstract void delte(User dao);
public abstract User findById(String Id);
public List<User> findAll();
}
UserServerImpl
package com.vixuan.skydrive.serviceimpl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.vixuan.skydrive.daoimpl.UserDaoImpl;
import com.vixuan.skydrive.model.User;
import com.vixuan.skydrive.service.UserService;
@Service
@Transactional
public class UserServiceImpl implements UserService {
//dao
@Autowired
private UserDaoImpl impl;
public void insert(User dao) {
// TODO Auto-generated method stub
impl.insert(dao);
}
public void update(User dao) {
// TODO Auto-generated method stub
impl.update(dao);
}
public void delte(User dao) {
// TODO Auto-generated method stub
impl.delte(dao);
}
public UserDaoImpl getImpl() {
return impl;
}
//
public void setImpl(UserDaoImpl impl) {
this.impl = impl;
}
public User findById(String Id) {
// TODO Auto-generated method stub
User user=impl.findById(Id);
return user;
}
public List<User> findAll() {
// TODO Auto-generated method stub
List<User> list=impl.findAll();
return list;
}
}
逻辑层action
UserAction
package com.vixuan.skydrive.action;
import java.util.List;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import com.opensymphony.xwork2.ActionSupport;
import com.vixuan.skydrive.model.User;
import com.vixuan.skydrive.serviceimpl.UserServiceImpl;
@Controller
@Scope("prototype")
public class UserAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
private User user;
private List<User> userList;
private static UserServiceImpl userService;
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return null;
}
public static UserServiceImpl getUserService() {
return userService;
}
public static void setUserService(UserServiceImpl userService) {
UserAction.userService = userService;
}
public String add() {
userService.insert(user);
return SUCCESS;
}
public String delete() {
userService.delte(user);
return SUCCESS;
}
public String update() {
userService.update(user);
return SUCCESS;
}
//set 和 get
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public List<User> getUserList() {
return userList;
}
public void setUserList(List<User> userList) {
this.userList = userList;
}
}
相关页面:(add.jsp、update.jsp和delete.jsp)
add.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>添加新用户</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>
<body>
<center>
<h1>添加新用户</h1>
<s:form action="user_add" namespace="/user" method="post">
<s:textfield label="用户名" name="user.user"></s:textfield>
<s:password label="密码" name="user.pass"></s:password>
<s:textfield label="姓名" name="user.xm"></s:textfield>
<s:textfield label="邮箱" name="user.email"></s:textfield>
<s:textfield label="电话" name="user.phone"></s:textfield>
<s:textfield label="qq" name="user.qq"></s:textfield>
<s:submit value="提交"></s:submit>
</s:form>
</center>
</body>
</html>
delete.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>添加新用户</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>
<body>
<center>
<h1>添加新用户</h1>
<s:form action="user_delete" namespace="/user" method="post">
<s:textfield label="用户名" name="user.user"></s:textfield>
<s:submit value="提交"></s:submit>
</s:form>
</center>
</body>
</html>
update.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>修改用户</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>
<body>
<center>
<h1>修改用户</h1>
<s:form action="user_update" namespace="/user" method="post">
<s:hidden name="user.xm"></s:hidden>
<s:textfield label="用户名" name="user.user"></s:textfield>
<s:password label="密码" name="user.pass"></s:password>
<s:submit value="提交"></s:submit>
</s:form>
</center>
</body>
</html>
Struts.xml配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="authority" extends="struts-default">
<!-- 定义一个拦截器 -->
<interceptors>
<interceptor name="authority"
class="com.vixuan.skydrive.interceptot.LoginInterceptor">
</interceptor>
<!-- 拦截器栈 -->
<interceptor-stack name="mydefault">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="authority" />
</interceptor-stack>
</interceptors>
<!-- 定义全局Result -->
<global-results>
<!-- 当返回login视图名时,转入/login.jsp页面 -->
<result name="login">/login.jsp</result>
</global-results>
<action name="login" class="com.vixuan.skydrive.action.LoginAction">
<result name="success">/welcome.jsp</result>
<result name="error">/login.jsp</result>
<result name="input">/login.jsp</result>
</action>
<action name="show" class="com.vixuan.skydrive.action.ShowAction">
<result name="success">/show.jsp</result>
<!-- 使用此拦截器 -->
<interceptor-ref name="mydefault" />
</action>
</package>
<constant name="struts.i18n.encoding" value="UTF-8"/>
<!-- 指定默认编码集 ,作用于HttpServletRequest的setCharacterEncoding()和freemarker,vilocity的输出 -->
<constant name="struts.configuration.xmlreload" value="true"/>
<!-- 当struts配置文件修改时是否自动加载 -->
<constant name="struts.devMode" value="false"/>
<!-- 开发模式下打印详细的错误信息 -->
<constant name="struts.ui.theme" value="xhtml"/>
<package name="users" namespace="/user" extends="struts-default">
<action name="user_*" class="com.vixuan.skydrive.action.UserAction" method="{1}">
<result name="success">/index.jsp</result>
</action>
</package>
<package name="struts2.action" extends="struts-default">
<action name="loginUser" class="com.vixuan.skydrive.action.LoginActions">
</action>
</package>
</struts>
项目结构图:
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。