利用struts2,mybatis,spring,三大框架写的一个简单的查询程序

本文介绍了一个使用Spring、MyBatis和Struts2(SSM)三大框架搭建的小型应用程序案例,详细展示了从项目结构、配置文件到各层具体实现的过程,并通过一个学生信息管理系统作为实例,讲解了如何进行增删查改等基本操作。
摘要由CSDN通过智能技术生成

我们现在开发都是用框架技术,用框架比较方便.可以节省我们很多时间.我用了三大框架写了一个程序,使用maven导的包.大家可以一起学习学习,指点指点.

只是项目结构:


使用框架技术,我们首先就要导包.我是用的是maven导的包 pom.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:aop="http://www.springframework.org/schema/aop" 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"

	xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
         http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
         http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd">

	<context:annotation-config />
	<!-- 包名 -->
	<context:component-scan base-package="com.yc" />
	


	<!-- 使用spring自带的属性文件读取类完成读取配置文件的操作 -->
	<bean id="pphc"
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations" value="classpath:db.properties" />
	</bean>

	<!-- 配置dbcp数据源... 数据库联接池 ( jndi-> tomcat的数据库联接池 ) / c3p0 -->
	<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}" />

		<property name="maxActive" value="${jdbc.maxActive}" />
		<property name="minIdle" value="${jdbc.minIdle}" />
		<property name="maxIdle" value="${jdbc.maxIdle}" />

	</bean>
	
	
	
	<!-- 针对 mybaits的整合配置 -->
	<!-- 配置  sqlsessionorg.mybatis.spring.SqlSessionFactoryBean.class -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"></property>
		
		<property name="mapperLocations" value="classpath*:com/yc/ssm/dao/*.xml"></property>
		
		
	</bean>
	
	
	<!-- 配置扫描器  用于扫描所有的  mpper文件-->
	
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<!-- 配置要扫描的映射文件对应的接口目录 -->
		<property name="basePackage" value="com.yc.ssm.dao"></property>
		<!-- 指定  这个  scaaner所使用的   session工厂-->
		<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>	
	
	
	</bean>
	
	
	<!--  事务管理器 ->jdbc-->
	
		<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
 		</bean>
 		
 		
 		<!-- 配置增强 -->
	<tx:advice id="txAdvice" transaction-manager="txManager">
		<!-- 切入点: 这里要加入的就是切入点表达式 -->
		<tx:attributes>
			<!-- 查询的方法上配置只读事务.. -->
			
			<!--其它的方法上加入事务.. -->
			<tx:method name="get*"  rollback-for="true"/>
			<tx:method name="find*" rollback-for="true"/>
			<tx:method name="load*" rollback-for="true" />
			<tx:method name="datagrid*"  rollback-for="true" />
			
			
			<tx:method name="get*"  propagation="REQUIRED"/>
			<tx:method name="del*"  propagation="REQUIRED"/>
			<tx:method name="update*"  propagation="REQUIRED"/>
			<tx:method name="modify*"  propagation="REQUIRED"/>
			<tx:method name="save*"  propagation="REQUIRED"/>
			<tx:method name="remove*"  propagation="REQUIRED"/>
			<tx:method name="repair*"  propagation="REQUIRED"/>
			<tx:method name="insert*"  propagation="REQUIRED"/>
		</tx:attributes>
	</tx:advice>

	<!-- 配置切面 -->
	<aop:config>
		<aop:pointcut id="service"
			expression="execution(* com.yc.ssm.biz.impl.*.*(..))" />
		<aop:advisor advice-ref="txAdvice" pointcut-ref="service" />
	</aop:config>
 		




</beans> 



这个是数据库的脚本

create database ssm;

use ssm;

drop table if exists student;

create table student(
	id char(40) primary key,
	sname varchar(100) not null,
	age int


)engine=innodb default charset=utf8;

insert into student values('1','掌声',22);




jdnc的连接 

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc\:mysql\://localhost\:3306/ssm?useUnicode\=true&characterEncoding\=UTF-8
jdbc.username=root
jdbc.password=a
jdbc.maxActive=150
jdbc.minIdle=5
jdbc.maxIdle=20



beans.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:aop="http://www.springframework.org/schema/aop" 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"

	xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
         http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
         http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd">

	<context:annotation-config />
	<!-- 包名 -->
	<context:component-scan base-package="com.yc" />
	


	<!-- 使用spring自带的属性文件读取类完成读取配置文件的操作 -->
	<bean id="pphc"
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations" value="classpath:db.properties" />
	</bean>

	<!-- 配置dbcp数据源... 数据库联接池 ( jndi-> tomcat的数据库联接池 ) / c3p0 -->
	<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}" />

		<property name="maxActive" value="${jdbc.maxActive}" />
		<property name="minIdle" value="${jdbc.minIdle}" />
		<property name="maxIdle" value="${jdbc.maxIdle}" />

	</bean>
	
	
	
	<!-- 针对 mybaits的整合配置 -->
	<!-- 配置  sqlsessionorg.mybatis.spring.SqlSessionFactoryBean.class -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"></property>
		
		<property name="mapperLocations" value="classpath*:com/yc/ssm/dao/*.xml"></property>
		
		
	</bean>
	
	
	<!-- 配置扫描器  用于扫描所有的  mpper文件-->
	
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<!-- 配置要扫描的映射文件对应的接口目录 -->
		<property name="basePackage" value="com.yc.ssm.dao"></property>
		<!-- 指定  这个  scaaner所使用的   session工厂-->
		<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>	
	
	
	</bean>
	
	
	<!--  事务管理器 ->jdbc-->
	
		<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
 		</bean>
 		
 		
 		<!-- 配置增强 -->
	<tx:advice id="txAdvice" transaction-manager="txManager">
		<!-- 切入点: 这里要加入的就是切入点表达式 -->
		<tx:attributes>
			<!-- 查询的方法上配置只读事务.. -->
			
			<!--其它的方法上加入事务.. -->
			<tx:method name="get*"  rollback-for="true"/>
			<tx:method name="find*" rollback-for="true"/>
			<tx:method name="load*" rollback-for="true" />
			<tx:method name="datagrid*"  rollback-for="true" />
			
			
			<tx:method name="get*"  propagation="REQUIRED"/>
			<tx:method name="del*"  propagation="REQUIRED"/>
			<tx:method name="update*"  propagation="REQUIRED"/>
			<tx:method name="modify*"  propagation="REQUIRED"/>
			<tx:method name="save*"  propagation="REQUIRED"/>
			<tx:method name="remove*"  propagation="REQUIRED"/>
			<tx:method name="repair*"  propagation="REQUIRED"/>
			<tx:method name="insert*"  propagation="REQUIRED"/>
		</tx:attributes>
	</tx:advice>

	<!-- 配置切面 -->
	<aop:config>
		<aop:pointcut id="service"
			expression="execution(* com.yc.ssm.biz.impl.*.*(..))" />
		<aop:advisor advice-ref="txAdvice" pointcut-ref="service" />
	</aop:config>
 		
</beans> 
</pre><pre name="code" class="html">
</pre><pre name="code" class="html">

beans-web.xml 是web层的配置

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" 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"

	xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
         http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
         http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd">
         
        <!-- 配置action  bean的id就是 action的class名字 -->
        
        <bean id="StudentAction" class="com.yc.ssm.web.action.StudentAction"
         scope="prototype">
        	<property name="studentBiz" ref="studentBiz"></property>
        
        </bean> 
         
</beans>
struts.xml是struts的控制层

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />
	<constant name="struts.objectFactory" value="spring"/>
    <package name="default" namespace="/" extends="struts-default">
		<action name="student_*" class="StudentAction" method="{1}">
			<result name="add_success">
				/add_success.jsp
			</result>
		</action>
    </package>
</struts>

student 类
package com.yc.ssm.bean;

import java.io.Serializable;

public class Student implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = -8480199388973683250L;
	private String id;
	private String sname;
	private Integer age;
	@Override
	public String toString() {
		return "Student [id=" + id + ", sname=" + sname + ", age=" + age + "]";
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getSname() {
		return sname;
	}
	public void setSname(String sname) {
		this.sname = sname;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public Student(String id, String sname, Integer age) {
		super();
		this.id = id;
		this.sname = sname;
		this.age = age;
	}
	public Student() {
		super();
	}
	
	

}
StdeuntBiz接口

package com.yc.ssm.biz;

import com.sun.tools.javac.util.List;
import com.yc.ssm.bean.Student;

public interface StudentBiz {
	
	public int delete(String id);
	public void update(Student student);
	
	public Student findById(String id);
	
	public int add(Student student);
	
	public List<Student> findAll();
	
	
	

}
接口的实现类

package com.yc.ssm.biz.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.sun.tools.javac.util.List;
import com.yc.ssm.bean.Student;
import com.yc.ssm.biz.StudentBiz;
import com.yc.ssm.dao.StudentDao;

//使用注解注入
@Service("studentBiz")
public class StudentBizImpl implements StudentBiz{
	
	@Autowired
	public StudentDao studentDao;

	@Override
	public int delete(String id) {
		return studentDao.delete(id);
	}

	public void setStudentDao(StudentDao studentDao) {
		this.studentDao = studentDao;
	}

	@Override
	public void update(Student student) {
		studentDao.update(student);
		
	}

	@Override
	public Student findById(String id) {
		return studentDao.findById(id);
	}

	@Override
	public int add(Student student) {
		return studentDao.add(student);
	}

	@Override
	public List<Student> findAll() {
		return null;
	}
	

}
StudentDao类

package com.yc.ssm.dao;

import com.yc.ssm.bean.Student;

public interface StudentDao {
	
	public int delete(String id);
	public void update(Student student);
	
	public Student findById(String id);
	
	public int add(Student student);
	
	

}

StudentDao.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.yc.ssm.dao.StudentDao">

		<resultMap type="com.yc.ssm.bean.Student" id="BaseResultMap">
			
			<id column="id" property="id" jdbcType="CHAR"/>
			<result column="sname" property="sname" jdbcType="VARCHAR"/>
			<result column="age" property="age" jdbcType="INTEGER"/>
				
			
		
		</resultMap>
		
		<delete id="delete" parameterType="java.lang.String">
			delete from student where id=#{id}
		
		</delete>

		<insert id="add" parameterType="com.yc.ssm.bean.Student">
			insert into student(id,sname,age) values (#{id},#{sname},#{age})
		
		</insert>
		
		<update id="update"  parameterType="com.yc.ssm.bean.Student">
			update student set sname=#{sname},age=#{age} where id=#{id}  
		
		</update>
		
		<select id="findById" resultMap="BaseResultMap" parameterType="java.lang.String">
			select * from student where id=#{id}
		
		</select>
	
	
	
	 
	
</mapper>

StudentAction类

package com.yc.ssm.web.action;

import java.util.ArrayList;
import java.util.Map;
import java.util.UUID;

import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.sun.tools.javac.util.List;
import com.yc.ssm.bean.Student;
import com.yc.ssm.biz.StudentBiz;

public class StudentAction extends ActionSupport implements ModelDriven<Student>,SessionAware {
	
	
	private static final long serialVersionUID = -6376764196089300549L;
	private StudentBiz studentBiz;
	private Student student;
	
	private Map<String,Object> session;
	
	
	public void setStudent(Student student) {
		this.student = student;
	}
	public Student getModel() {
		student =new Student();
		return student;
	}
	public String doAdd(){
		student.setId(UUID.randomUUID().toString());
		System.out.println(student.toString());
		System.out.println(studentBiz);
		studentBiz.add(student);
		return "add_success";
		
	}
	public String doUpdate(){
		this.studentBiz.update(student);
		return super.SUCCESS;
		
	}
	public String del(){
		this.studentBiz.delete(student.getId());
		return super.SUCCESS;
		
		
	}
	public String findAll(){
		List<Student> list=this.studentBiz.findAll();
		this.session.put("list", list);
		
		return super.SUCCESS;
		
		
	}
	
	public void setStudentBiz(StudentBiz studentBiz){
		this.studentBiz=studentBiz;
	}
	public void setSession(Map<String,Object> arg0){
		this.session=arg0;
		
	}
	
	

}

测试类  我只测试了  添加 和  使用id 查询的的方法  

package com.yc.ssmTest;

import static org.junit.Assert.*;

import java.util.UUID;

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

import com.yc.ssm.bean.Student;
import com.yc.ssm.biz.StudentBiz;

public class test {

	
	private StudentBiz studentBiz;
	
	
	@Before
	public void before(){
		
		
		ApplicationContext ac=new ClassPathXmlApplicationContext("beans.xml");
		
		studentBiz=(StudentBiz) ac.getBean("studentBiz");
	}

	@Test
	public void TestAdd(){
		
		Student s=new Student();
		s.setId(UUID.randomUUID().toString());
		s.setAge(22);
		s.setSname("得分");
		studentBiz.add(s);
		
	}
	
	@Test
	public void TestfindById(){
		
		studentBiz.findById("1");
		
	}
	
	
	
}

add.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="utf-8"%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    
    
   
	<meta http-equiv="content-type" content="text/html; charset=UTF-8">
	<title>添加</title>
  </head>
  
  <body>
  		<center>
  			<h1>添加学生</h1>
  			<hr />
  			<form name="myform" action="student_doAdd.action" method="post">
  				学生名:<input type="text" name="sname" /><br />
  				年龄:<input type="text" name="age" /><br />
  				
  				<input type="submit" value="添加" />
  				
  			</form>
  		
  		</center>
   
  </body>
</html>





add_success.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="utf-8"%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    
    
   
	<meta http-equiv="content-type" content="text/html; charset=UTF-8">
	<title>添加成功</title>
  </head>
  
  
  <body>
    添加成功<br>
  </body>
</html>

这个就是简单的利用三大框架写的小程序,我们要记住配置是由于编码的.在使用框架的时候,大家可以一起讨论讨论







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值