Struts2+MyBatis3.1.0+Spring3.1.0整合之道二SqlSessionTemplate解析

你猜 阅读:218 2021-03-31 22:57:46 评论:0

相关框架搭建在Struts2+MyBatis3.1.0+Spring3.1.0整合之道一 数据映射接口,已经讲解的非常详细,这里就不在讲述SSI框架的搭建。

 

(1)、采用接口org.apache.ibatis.session.SqlSession的实现类org.mybatis.spring.SqlSessionTemplate。
               在mybatis中, sessionFactory可由SqlSessionFactoryBuilder.来创建。

                而在MyBatis-Spring 中,使用了SqlSessionFactoryBean来替代。
                SqlSessionFactoryBean有一个必须属性dataSource(数据源), 另外其还有一个通用属性configLocation(用来指定mybatis的xml配置文件路径)。

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.作者投稿可能会经我们编辑修改或补充。

发表评论
搜索
排行榜
KIKK导航

KIKK导航

关注我们