此案例是用Java Web创建,是Struts2+Ibatis+Spring的基础案例,是基础的整合。登录页面login.jsp提交后有UserAction控制,调用Service,Service调用DAO层,Dao中会调用Ibtis的Mapper类。
Spring核心配置
applicationContext.xml
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
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/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
<!--上面的配置引用文件不能写错-->
<!-- AOP配置-->
<aop:aspectj-autoproxy />
<!---<context:annotation-config /> 来方便地、一次性的声明者四个 BeanPostProcessor。--->
<context:annotation-config />
<!---使用此配置可以省去<context:annotation-config />配置--->
<context:component-scan base-package="com.sms" />
<!---数据源的配置--->
<bean id="myDataSources"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/lease?useUnicode=true&characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="Sun_1024" />
</bean>
<!---SqlSessionFactory配置--->
<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="myDataSources" />
</bean>
<!---Ibatis的mapper映射文件配置---->
<bean id="mapper" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactory" ref="sessionFactory" />
<property name="basePackage" value="com.sms.model.mapper" />
</bean>
</beans>
控制层
package com.sms.web.action;
import javax.annotation.Resource;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.springframework.stereotype.Controller;
import com.opensymphony.xwork2.ActionSupport;
import com.sms.model.entity.User;
import com.sms.service.UserService;
@Controller
@Results( { @Result(name = "success", location = "/index.jsp"),
@Result(name = "input", location = "/login.jsp") })
public class UserAction extends ActionSupport{
private User logUser;
@Resource
private UserService userService;
// 登录验证
public String checkLogin() {
boolean flag = userService.validateUserLogin(logUser);
if (flag) {
return SUCCESS;
}
return INPUT;
}
public User getLogUser() {
return logUser;
}
public void setLogUser(User logUser) {
this.logUser = logUser;
}
}
//Service层
//创建接口
package com.sms.service;
import com.sms.model.entity.User;
public interface UserService {
// 登录验证
public boolean validateUserLogin(User user);
}
//实现接口
package com.sms.service.impl;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.sms.dao.UserDao;
import com.sms.model.entity.User;
import com.sms.service.UserService;
@Service
public class UserServiceImpl implements UserService {
@Resource
private UserDao userDao;
public boolean validateUserLogin(User user) {
String password = userDao.loginValidate(user.getUserName());
if(password.equals(user.getUserPassword())){
return true;
}
return false;
}
}
//Aop的类
package com.sms.service;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
@Component
@Aspect
public class Scrutiny {
@Pointcut("execution(* com.sms.dao.impl.UserDaoImpl.*(..))")
public void display(){
}
@Before("display()")
public void before(){
System.out.println("之前执行");
}
@AfterReturning("display()")
public void afterReturning(){
System.out.println("之后执行");
}
}
//Ibatis的类
package com.sms.model.mapper;
import org.apache.ibatis.annotations.Select;
public interface UserMapper {
String sqlLoginValidate = "select userPwd from userinfo where userName=#{name}";
@Select(sqlLoginValidate)
String findPwdByName(String name);
}
//实体类的创建
package com.sms.model.entity;
public class User {
private String userName;
private String userPassword;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPassword() {
return userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
}
//DAO层
//创建接口
package com.sms.dao;
public interface UserDao {
//登录验证,根据帐号查询密码
public String loginValidate(String userName);
}
//实现接口
package com.sms.dao.impl;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.sms.dao.UserDao;
import com.sms.model.mapper.UserMapper;
@Repository
public class UserDaoImpl implements UserDao{
@Resource
private UserMapper userMapper;
//登录验证,根据帐号查询密码
public String loginValidate(String userName) {
System.out.println("数据持久层"+userName);
String userPassword = userMapper.findPwdByName(userName);
return userPassword;
}
}
//login.jsp文件
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'login.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<form action="user!checkLogin.action">
帐号:<input name="logUser.userName">
密码:<input type="password" name="logUser.userPassword">
<input type="submit" value="登录">
</form>
</body>
</html>