一、基于SpringMVC和MyBatis技术开发的主要步骤如下:
1、创建工程,搭建SpringMVC和MyBatis技术环境
(1)、创建一个Web工程
(2)、添加Mybatis相关技术环境
A、引入数据库驱动包和Mybatis开发包
B、引入dbcp连接池开发包
(3)、添加SpringMVC相关技术环境
A、引入Spring ioc,jdbc,tx等支持的开发包
B、引入Spring web mvc支持的开发包
C、在src下添加applicationContext.xml配置文件
D、在web.xml中配置DispatchcherServlet主控制器
(4)、引入Mybatis和Spring整合开发包mybatis-spring.jar
2、基于MapperScannerConfigurer方式整合Mybatis的Mapper接口(推荐)
(1)、根据数据表编写实体类
(2)、编写Mapper映射文件,在XML中添加SQL操作的定义
(3)、编写Mapper接口,定义SQL操作方法
(4)、在Spring配置文件中定义以下Bean
A、DataSource
B、SqlSessionFactoryBean
C、MapperScannerConfigurer
(5)、测试Spring容器的DAO组件
3、编写和配置SpringMVC的主要组件,例如Controller,HandlerMapping,ViewResolver等
(1)、编写Controller和请求处理方法
(2)、配置<mvc:annotation-driven/>,支持@RequestMapping
(3)、配置Controller组件
A、开启组件扫描,将Controller扫描到Spring容器
B、需要DAO时采用注入方式使用
C、在请求方法上使用@RequestMapping指定对应的请求
(4)、配置ViewResolver组件
4、编写JSP视图组件,利用标签和表达式显示模型数据
(1)、JSP可以使用JSTL标签库,需要引入开发包
(2)、JSP可以使用EL表达式
(3)、JSP可以使用SpringMVC的表单标签
二、代码介绍
1、web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>cloud_note</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>cloud_note</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
2、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:context="http://www.springframework.org/schema/context"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
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/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-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/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd">
<!-- 配置数据库源 -->
<bean id="dbcp" class="org.apache.commons.dbcp.BasicDataSource">
<property name="username" value="root"></property>
<property name="password" value="1234"></property>
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql:///cloud_note?useUnicode=true&characterEncoding=utf8"></property>
</bean>
<bean id="ssf" class="org.mybatis.spring.SqlSessionFactoryBean" >
<!-- 引用数据库源 -->
<property name="dataSource" ref="dbcp"></property>
<!-- mapper.xml文件位置 -->
<property name="mapperLocations" value="classpath:org/gongqiao/note/sql/*.xml"></property>
</bean>
<bean id="" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="org.gongqiao.note.dao"></property>
<!-- 自动注入sqlsessionfactory -->
</bean>
<!-- 开启组件扫描 -->
<context:component-scan base-package="org.gongqiao.note"></context:component-scan>
<!-- handlerMapping,支持@RequestMapping,@ResponseBody-->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 配置事务管理组件 -->
<bean id="txManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dbcp"></property>
</bean>
<!-- 开启事物注解标记@Transactional-->
<!-- 当调用@Transactional标记的方法时,将txManager事物管理功能切入进去 -->
<tx:annotation-driven transaction-manager="txManager"/>
<!-- AOP列子 -->
<bean id="noteLogger" class="org.gongqiao.note.controller.aspect.NoteLogger"></bean>
<aop:config>
<!-- 将notelogger定义为切面组件 -->
<aop:aspect ref="noteLogger">
<!-- 什么时候用,给哪些方法用 -->
<aop:before method="clogger" pointcut="within(org.gongqiao.note.controller..*)"/>
</aop:aspect>
</aop:config>
<!-- 开启AOP注解支持,@Aspect,@通知标记 -->
<aop:aspectj-autoproxy/>
</beans>
3、Usercontroller
package org.gongqiao.note.controller.user;
import javax.annotation.Resource;
import org.gongqiao.note.entity.NoteResult;
import org.gongqiao.note.service.UserService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller //扫描控制组件
@RequestMapping("/user")
public class LoginController {
@Resource
private UserService userService;//注入
@RequestMapping("/login.do")
@ResponseBody //将返回值NoteResult转成json输出
public NoteResult execute(String name,String password) throws Exception{
NoteResult result = userService.checkLogin(name, password);
return result;
}
}
4、Userservice
package org.gongqiao.note.service;
import org.gongqiao.note.entity.NoteResult;
public interface UserService {
/**
* 用户登录
*/
public NoteResult checkLogin(String name,String password)throws Exception;
/**
* 用户名注册
*/
public NoteResult regist(String name,String password,String nickname) throws Exception;
}
5、UserServiceImpl
package org.gongqiao.note.service;
import javax.annotation.Resource;
import org.gongqiao.note.dao.UserDao;
import org.gongqiao.note.entity.NoteResult;
import org.gongqiao.note.entity.User;
import org.gongqiao.note.util.NoteUtil;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service //扫描Service组件
public class UserServiceImpl implements UserService {
@Resource
private UserDao userDao;
public NoteResult checkLogin(String name, String password) throws Exception {
NoteResult result=new NoteResult();
User user = userDao.findByName(name);
if(user==null){
result.setStatus(1);
result.setMsg("用戶名不存在");
return result;
}
String pwd = NoteUtil.md5(password);
if(!user.getCn_user_password().equals(pwd)){
result.setStatus(2);
result.setMsg("密码不正确");
return result;
}
result.setStatus(0);
result.setMsg("用户名和密码都正确");
result.setData(user.getCn_user_id());//返回用户id
return result;
}
}
6、UserDao
package org.gongqiao.note.dao;
import org.gongqiao.note.entity.User;
public interface UserDao {
//根据用户名查询
public User findByName(String name);
//添加用户
public int save(User user);
}
7、UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="org.gongqiao.note.dao.UserDao">
<insert id="save" parameterType="org.gongqiao.note.entity.User">
insert into cn_user
(cn_user_id,cn_user_name,cn_user_password,cn_user_token,cn_user_nick)
values
(#{cn_user_id},#{cn_user_name},#{cn_user_password},#{cn_user_token},#{cn_user_nick})
</insert>
<select id="findByName" parameterType="string" resultType="org.gongqiao.note.entity.User">
select * from cn_user where cn_user_name=#{name}
</select>
</mapper>
8、NoteUtil
package org.gongqiao.note.util;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
public class NoteUtil {
public static String createId(){
UUID uuid = UUID.randomUUID();
return uuid.toString();
}
public static String md5(String msg) throws NoSuchAlgorithmException{
//利用md5对msg处理
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] input = msg.getBytes();//要加密的字节
byte[] output = md.digest(input);//加密后生成等长度数组
//采用Base64算法将字节数组装换成字符串(没有乱码)
String ret_msg = Base64.encode(output);
return ret_msg;
}
public static void main(String[] args) throws NoSuchAlgorithmException {
System.out.println(md5("1234"));
//System.out.println(createId());
}
public static Long convertDateStringToLong(String dateString) throws ParseException{
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse(dateString);
return date.getTime();
}
}
9、统一返回状态
package org.gongqiao.note.entity;
import java.io.Serializable;
@SuppressWarnings("serial")
public class NoteResult implements Serializable{
private int status;//转态
private String msg;//消息
private Object data;//数据
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}