首先导入必备的包
在src目录下新建applicationContext.xml文件作为Spring配置文件
里面放有数据源的信息,mybatis工厂bean及mybatis文件
指定mybatis Mapper扫描的包
注意放上数据库的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
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-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- dbcp数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="maxActive" value="10" />
<property name="maxIdle" value="5" />
</bean>
<!-- mybatis的工厂 -->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<!-- 核心配置文件的位置 -->
<property name="configLocation" value="classpath:SqlMapConfig.xml"></property>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 指定基本包 -->
<property name="basePackage" value="cn.edu.hbue.mapper"></property>
</bean>
</beans>
接下来在srsc目录新建springmvc.xml文件作为springmvc的配置文件
主要用来指定扫描Controller和Service,拦截器也放在里面
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc" 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-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
<!-- 扫描@Controller @Service -->
<context:component-scan base-package="cn.edu.hbue"></context:component-scan>
<!-- springmvc拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean class="cn.edu.hbue.interceptor.Inteceptor1"></bean>
</mvc:interceptor>
</mvc:interceptors>
<!-- 注解驱动 -->
<!-- 默认的处理器映射器和处理器适配器已经过期,需要配置新的,用如下语句可代替 -->
<mvc:annotation-driven />
</beans>
新建SqlMapConfig.xml文件作为mybatis配置文件,主要放mybatis pojo的别名
<?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 type="xyz.db361.mybatis.pojo.User" alias="User"/> -->
<!-- User user 都对 -->
<package name="cn.edu.hbue.pojo"/>
</typeAliases>
</configuration>
mybatis的 Mapper可以通过逆向工程生成
最终项目的目录结构如下
样例Controller层代码
package cn.edu.hbue.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import cn.edu.hbue.pojo.User;
import cn.edu.hbue.service.UserService;
import cn.edu.hbue.utils.MD5Utils;
@Controller
@RequestMapping(value = "/user")
public class UserController {
@Autowired
private UserService us;
@RequestMapping(value = "/login.action")
public String login(User u, Model model, HttpSession session) {
u.setUser_pw(MD5Utils.md5(u.getUser_pw()));
User existU = us.login(u);
if (existU == null) {
model.addAttribute("error", "用户名或密码错误");
return "/login.jsp";
} else {
if (existU.getIs_first().equals("1")) {
existU.setIs_first("0");
us.changeFirst(existU);
session.setAttribute("user", existU);
return "redirect:/info.jsp";
} else {
session.setAttribute("user", existU);
return "redirect:/index.jsp";
}
}
}
@RequestMapping(value = "/changePw.action")
public String changePw(String user_pw, String old_pw, HttpSession session, Model model) {
User u = (User) session.getAttribute("user");
// 原密码正确
if (u.getUser_pw().equals(MD5Utils.md5(old_pw))) {
u.setUser_pw(MD5Utils.md5(user_pw));
us.changePw(u);
session.invalidate();
// 0代表修改成功
model.addAttribute("message", "0");
} else {
// 原密码错误
// 1代表修改
model.addAttribute("message", "1");
}
return "/changepwms.jsp";
}
@RequestMapping(value = "/logout.action")
public String logout(HttpSession session) {
session.invalidate();
return "/login.jsp";
}
}
样例Service层代码,面向接口编程,先写接口,再写实现类
package cn.edu.hbue.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import cn.edu.hbue.mapper.UserMapper;
import cn.edu.hbue.pojo.User;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper um;
public User login(User u) {
return um.login(u);
}
@Override
public void changeFirst(User u) {
um.chageFirst(u);
}
@Override
public void changePw(User u) {
um.changePw(u);
}
}