使用的版本:jdk6、struts-2.3.16.3、spring-4.1.2、mybatis-3.2.8
先贴一个项目结构图:
web.xml :
<display-name>ssm</display-name>
<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>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
applicationContext.xml :
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 采用注释的方式配置bean -->
<context:annotation-config />
<!-- 该 BeanPostProcessor 将自动对标注 @Autowired 的 Bean 进行注入 -->
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
<!-- 配置要扫描的包 -->
<context:component-scan base-package="com.ssm" />
<!-- 配置DataSource数据源 -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://127.0.0.1:3306/demo</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>123456</value>
</property>
</bean>
<!--创建sqlSessionFactory -->
<!--configLocation属性指定mybatis的核心配置文件-->
<!--所有配置的mapper文件 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:Configuration.xml" />
<property name="mapperLocations" value="classpath*:com/ssm/mybatis/mapper/*.xml" />
</bean>
<!-- 配置扫描器 -->
<!-- 通过mybatis接口映射-->
<!-- 扫描com.ssm.inter这个包以及它的子包下的所有映射接口类 -->
<!--
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.ssm.mybatis.inter" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
-->
<!-- mybatis模版 -->
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory" />
<!-- <constructor-arg index="1" value="BATCH" /> 如果想要进行批量操作可加入这个属性 -->
</bean>
<!-- 事务相关控制 -->
<bean name="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 基于注解的声明式事务管理配置 -->
<!--
<tx:annotation-driven transaction-manager="transactionManager" />
-->
<!-- 通知 -->
<tx:advice id="tx"
transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="insert*" propagation="REQUIRED" />
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="find*" read-only="true" />
<tx:method name="get*" read-only="true" />
<tx:method name="select*" read-only="true" />
</tx:attributes>
</tx:advice>
<!--把事务控制在Service层-->
<aop:config>
<aop:pointcut id="pc" expression="execution(* com.ssm.mybatis.service.*.*(..))" />
<aop:advisor pointcut-ref="pc" advice-ref="tx" />
</aop:config>
</beans>
Configuration.xml (mybatis):
<configuration>
<typeAliases>
<typeAlias alias="User" type="com.ssm.mybatis.model.User"/>
</typeAliases>
<!--
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/demo"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
-->
<!--
<mappers>
<mapper resource="com/ssm/mybatis/mapper/User.xml"/>
</mappers>
-->
</configuration>
struts.xml :
<struts>
<constant name="struts.devMode" value="true" />
<constant name="struts.configuration.xml.reload" value="true" />
<!-- 将Action的创建交给spring来管理 -->
<constant name="struts.objectFactory" value="spring" />
<!-- 更改struts2请求Action的后缀名,默认为action。若想去掉后缀,设为","即可 -->
<constant name="struts.action.extension" value=","></constant>
<package name="default" namespace="/" extends="struts-default">
<action name="login" method="login" class="loginAction">
<result name="success">/helloworld.jsp</result>
<result name="input">/index.jsp</result>
</action>
<action name="add" method="add" class="loginAction">
<result name="success">/index.jsp</result>
</action>
</package>
</struts>
User.xml :
<mapper namespace="com.ssm.mybatis.inter.UserMapper">
<select id="getUser" parameterType="User" resultType="User">
select * from user where username=#{username} and password=#{password}
</select>
<insert id="addUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
insert into user(username,password) values (#{username},#{password})
</insert>
</mapper>
下面是Java代码,路径可以对照第一张项目结构图(所有的文件路径都可以对照第一张图片中的结构):
public class User {
private String username;
private String password;
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 interface UserMapper {
public User getUser(User user);
public void addUser(User user);
}
/*************************************************************************/
public interface UserDao {
public User getUser(User user);
public void addUser(User user);
}
/*************************************************************************/
@Repository("userDao")
public class UserDaoImpl implements UserDao {
@Resource
private SqlSessionTemplate sqlSessionTemplate;
@Override
public User getUser(User user) {
return (User)sqlSessionTemplate.selectOne("com.ssm.mybatis.inter.UserMapper.getUser", user);
}
@Override
public void addUser(User user) {
int i = sqlSessionTemplate.insert("com.ssm.mybatis.inter.UserMapper.addUser", user);
System.out.println(i);
}
}
/*************************************************************************/
public interface UserService {
public User getUser(User user);
public void addUser(User user);
}
/*************************************************************************/
@Service("userService")
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
//private UserMapper userMapper;
@Override
public User getUser(User user) {
return userDao.getUser(user);
}
@Override
public void addUser(User user) {
userDao.addUser(user);
}
}
/*************************************************************************/
public class SsmActionSupport extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
// private static SqlSessionFactory sqlSessionFactory;
//
// private static Reader reader;
//
// static{
// try{
// reader = Resources.getResourceAsReader("Configuration.xml");
// sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
// }catch(Exception e){
// e.printStackTrace();
// }
// }
//
// public static SqlSessionFactory getSessionFactory(){
// return sqlSessionFactory;
// }
//
// public static SqlSession getSession(){
// return getSessionFactory().openSession();
// }
}
/*************************************************************************/
@Controller
public class LoginAction extends SsmActionSupport {
private static final long serialVersionUID = 4919811123886413565L;
@Autowired
private UserService userService;
public String login(){
System.out.println("username:"+getUsername());
System.out.println("password:"+getPassword());
User user = new User();
user.setUsername(getUsername());
user.setPassword(getPassword());
User user2 = userService.getUser(user);
if(null == user2){
return INPUT;
}
return SUCCESS;
}
public String add(){
System.out.println("username:"+getUsername());
System.out.println("password:"+getPassword());
User user = new User();
user.setUsername(getUsername());
user.setPassword(getPassword());
userService.addUser(user);
return SUCCESS;
}
private String username;
private String password;
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;
}
}
下面是用到的两个简单的jsp文件:
index.jsp------>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
</head>
<body>
<form action="login" method="post">
<div>
<label>用户名</label>
<input type="text" name="username"/>
</div>
<div>
<label>密 码</label>
<input type="password" name="password"/>
</div>
<div>
<input type="submit" value="提交"/>
</div>
</form>
</body>
</html>
helloworld.jsp----->
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<div>
Hello,World!
</div>
<div>
<form action="add" method="post">
<div>
<label>用户名</label>
<input type="text" name="username"/>
</div>
<div>
<label>密 码</label>
<input type="password" name="password"/>
</div>
<div>
<input type="submit" value="提交"/>
</div>
</form>
</div>
</body>
</html>
sql(mysql数据库):
CREATE DATABASE IF NOT EXISTS demo CHARACTER SET utf8;
CREATE TABLE IF NOT EXISTS user(
id INT(4) NOT NULL AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(25) NOT NULL,
password VARCHAR(50) NOT NULL
)ENGINE=InnoDB AUTO_INCREMENT=1 CHARACTER SET utf8;
INSERT INTO user (username,password) VALUES ('zs','123456');