Struts2+Spring+MyBatis开发步骤

ssm(struts2+spring+mybatis)开发步骤

一、环境搭建

  1. 新建JavaWeb项目

  2. 导入相关jar包

  3. 引入相关配置文件

    applicationContext.xml/struts.xml/mapper.xml
    

二、初始化配置

  1. 在web.xml中配置struts2核心过滤器
	<filter>
    	<filter-name>Struts2</filter-name>
    	<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
 	</filter>
  	<filter-mapping>
    	<filter-name>Struts2</filter-name>
   		<url-pattern>/*</url-pattern>
 	</filter-mapping>
  1. 在web.xml中配置Spring工厂监听器
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <!-- spring配置文件 -->
    <param-value>classpath:/applicationContext.xml</param-value>
  </context-param>

三、DAO

  1. 创建表(table)
create table t_admin(
id integer primary key,
username varchar2(100),
password varchar2(100),
realName varchar2(100),
sex varchar2(2)
);
  1. 创建实体 (entity)
package com.xpf.entity;

import java.io.Serializable;

public class Admin implements Serializable{
	private Integer id;
	private String username;
	private String password;
	private String realName;
	private String sex;
	public Admin() {
		super();
	}
	public Admin(Integer id, String username, String password, String realName,
			String sex) {
		super();
		this.id = id;
		this.username = username;
		this.password = password;
		this.realName = realName;
		this.sex = sex;
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getRealName() {
		return realName;
	}
	public void setRealName(String realName) {
		this.realName = realName;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}	
}

  1. 定义DAO接口
    1. 定义基础接口(所有DAO都可以继承)

      package com.xpf.dao;
      
      import java.util.List;
      
      public interface BaseDAO<T> {
      	
      	public void insert(T t);
      	
      	public void delete(Integer id);
      	
      	public void update(T t);
      	
      	public List<T> queryAll();
      	
      	public T queryOne(Integer id);
      }
      
      
    2. DAO接口

      package com.xpf.dao;
      
      import org.apache.ibatis.annotations.Param;
      
      import com.xpf.entity.Admin;
      
      public interface AdminDAO extends BaseDAO<Admin> {
      	/*
      	 * 登录功能
      	 */
      	public Admin queryAdminByUsernameAndPassword(@Param("username")String username,@Param("password")String password);
      }
      
  2. Mapper文件实现DAO接口
<?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.xpf.dao.AdminDAO">

	<!-- 注册 -->
	<insert id="insert">
		<!-- 主键 -->
		<selectKey keyProperty="id" order="BEFORE" resultType="int">
			select seq_user.nextval from dual
		</selectKey>
		insert into t_admin (id,username,password,realName,sex) values(#{id},#{username},#{password},#{realName},#{sex})
	</insert>
	
	<!-- 登录 -->
	<select id="queryAdminByUsernameAndPassword" resultType="Admin">
		select id,username,password,realName,sex from t_admin where username=#{username} and password=#{password}
	</select>
</mapper>

  1. Spring的配置文件进行配置(在applicationContext.xml中)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
		xmlns:context="http://www.springframework.org/schema/context" 
		xmlns:tx="http://www.springframework.org/schema/tx" 
		xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
                           http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
                           http://www.springframework.org/schema/context 
                           http://www.springframework.org/schema/context/spring-context-3.2.xsd
                           http://www.springframework.org/schema/tx 
                           http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
                           http://www.springframework.org/schema/aop 
                           http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
                           ">
      
      	<!-- 注解的扫描 -->            <!-- 对所有的包都进行扫描 -->
      	<context:component-scan base-package="*"></context:component-scan>
      	
      	<!-- 引入数据库连接的配置文件 -->
		<context:property-placeholder location="classpath:com/xpf/config/db.properties"/> 
		  
		<!-- 连接数据库 配置数据源 -->				<!-- 采用第三方连接池dbcp -->
		<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
			<!-- 配置连接数据库运行的相关参数 -->
			<property name="driverClassName" value="${driver}"/>
			<property name="url" value="${url}"/>
			<property name="username" value="${name}"/>
			<property name="password" value="${password}"/>
		</bean>   
		
		<!-- 创建SqlSessionFactory对象 -->
		<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
			<!-- 属性  -->
			<property name="dataSource">
				<!-- 为属性做依赖注入 -->
				<ref local="dataSource"/>
			</property>
			<!-- 给实体类起别名 -->
			<property name="typeAliasesPackage" value="com.xpf.entity"/>
			<!-- Mapper文件的注册 -->
			<property name="mapperLocations">
				<list>
					<value>classpath:com/xpf/mapper/*Mapper.xml</value>
				</list>
			</property>
		</bean>
		
		<!-- Spring自动创建DAO实现类对象 -->
		<bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
			<!-- 指定给哪一个包下的DAO接口创建实现类对象 -->
			<property name="basePackage" value="com.xpf.dao"/>
		</bean>
		
		
		
		<!-- service层的事务控制 -->
		
		<!-- 引出Spring的控制事务的额外功能类 -->
		<bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
			<!-- 控制事务需要连接 创建连接必须要有连接数据库的相关参数 -->
			<property name="dataSource">
				<ref local="dataSource"/>
			</property>
		</bean>
		
		<!-- 激活@Transactional -->		
		<tx:annotation-driven transaction-manager="dataSourceTransactionManager"/>
</beans>

四、Service

  1. service接口
package com.xpf.service;

import com.xpf.entity.Admin;

public interface AdminService {
	//登录
	public Admin login(String username,String password);
	//注册
	public void register(Admin admin);
}

  1. service实现类
package com.xpf.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.xpf.dao.AdminDAO;
import com.xpf.entity.Admin;
import com.xpf.service.AdminService;

//创建service的实现类对象
@Service

/*
 * @Transactional 使用前在applicationContext.xml中激活
 * 事务控制(为service中的所有方法添加对应的事务控制,但局部优先)
 * 增删改 @Transactional中属性默认
 */
@Transactional
public class AdminServiceImpl implements AdminService {
	/*
	 * @Autowired注解 书写在成员变量上面,会直接通过反射为成员变
                      量赋值,而忽略set get. 书写在set方法上面,调用set方法完成赋
                      值
	 */
	@Autowired
	private AdminDAO adminDAO;
	
	public AdminDAO getAdminDAO() {
		return adminDAO;
	}

	public void setAdminDAO(AdminDAO adminDAO) {
		this.adminDAO = adminDAO;
	}

	@Override
	
	/*
	 *	@Transactional 
	 *	查询方法,为了提高查询效率,设置属性
	 */
	@Transactional(propagation=Propagation.SUPPORTS,readOnly=true)
	public Admin login(String username, String password) {
		return adminDAO.queryAdminByUsernameAndPassword(username, password);
	}

	@Override
	public void register(Admin admin) {
		adminDAO.insert(admin);
	}

}

五、Controller

  1. 创建Action
package com.xpf.action;

import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.util.ValueStack;
import com.xpf.entity.Admin;
import com.xpf.service.AdminService;
/*
 * @Contorller 创建Action对象
 */
@Controller

/*
 * @Scope 控制创建对象的次数
 * 默认为singleton:单例
 */
@Scope(value="prototype")

public class AdminAction extends ActionSupport{
	
	/*
	 * 为Action中的service成员变量自动注入
	 */
	@Autowired
	private AdminService adminService;
	
	private Admin admin;
	
	public Admin getAdmin() {
		return admin;
	}

	public void setAdmin(Admin admin) {
		this.admin = admin;
	}

	public AdminService getAdminService() {
		return adminService;
	}

	public void setAdminService(AdminService adminService) {
		this.adminService = adminService;
	}
	//注册
	public String register(){
		adminService.register(admin);
		ValueStack valueStack = ActionContext.getContext().getValueStack();
		valueStack.setValue("#session.admin", admin);
		return "showAll";
	}
	//登录
	public String login(){
		Admin ad = adminService.login(admin.getUsername(), admin.getPassword());
		if(ad!=null){
			ValueStack valueStack = ActionContext.getContext().getValueStack();
			valueStack.setValue("#session.admin", ad);
			return "showAll";
		}else{
			return "login";
		}
	}
	//退出
	public String exit(){
		HttpSession session = ServletActionContext.getRequest().getSession();
		session.invalidate();
		return "login";
	}
}

  1. 配置Struts的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "struts-2.3.dtd" >
<struts>
	<package name="admin" extends="struts-default" namespace="/admin">
	
		<!-- class:因为action中注解@Controller 无需Action的全限定名,Action类名首字母小写即可 -->
		<action name="admin_*" class="adminAction" method="{1}">
			<result name="showAll" type="redirectAction">
				<param name="namespace">/employee</param>
				<param name="actionName">employee_showAll</param>
			</result>
			<result name="login" type="redirect">/login.jsp</result>			
		</action>
	</package>
</struts>

六、其他

  1. 关于DAO的测试
package com.xpf.test;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.xpf.dao.AdminDAO;
import com.xpf.entity.Admin;

public class TestAdminDAO {
	//拿到工厂
	private ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
	/*
	 * 通过DAO接口名首字母小写,拿到DAO接口实现类对象
	 */
	private AdminDAO adminDAO =(AdminDAO) ac.getBean("adminDAO");
	
	@Test
	public void testRegister(){
		adminDAO.insert(new Admin(null,"xpf","123456","xpf","m"));
	}
	
	@Test
	public void testLogin(){
		Admin admin = adminDAO.queryAdminByUsernameAndPassword("xpf", "123456");
		System.out.println(admin);
	}
}

  1. 相关jar包和配置文件
    ssm的jar和相关配置文件下载
    密码:oosm
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zarathusa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值