最近一直项目中一直在使用Spring+SpringMVC+Mybatis 框架,根据自己对这三个框架的了解搭建了一个这样的工程(工程测试可用),期间遇到不少问题,跟大家分享下(具体代码下载地址在文章最后)。
文章分成两大模块:
一、工程代码模块;
二、配置信息和自我理解模块。
项目的工程目录结构是:
一、工程代码模块:
UserController.class
package cn.zyy.ssm.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import cn.zyy.ssm.service.UserService;
@Controller
public class UserController {
@Autowired
private UserService userService;
public void setUserService(UserService userService) {
this.userService = userService;
}
@RequestMapping("/list")
public String getList(ModelMap map){
map.addAttribute("list", userService.getList());
return "/list.jsp";
}
}
package cn.zyy.ssm.service;
import java.util.List;
import cn.zyy.ssm.vo.User;
public interface UserService {
public List getList();
}
UserServiceImpl.class
package cn.zyy.ssm.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import cn.zyy.ssm.dao.UserDao;
import cn.zyy.ssm.service.UserService;
import cn.zyy.ssm.vo.User;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao useDao;
@Override
public List getList() {
return useDao.getList();
}
}
package cn.zyy.ssm.dao;
import java.util.List;
import org.springframework.stereotype.Repository;
import cn.zyy.ssm.vo.User;
@Repository("userDao")
public interface UserDao {
public List getList();
}
package cn.zyy.ssm.vo;
public class User {
private int id;
private String name;
private String pwd;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
jdbc.driverClass = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/test
jdbc.username = root
jdbc.password = 553226
ssmTest
contextConfigLocation
classpath:applicationContext.xml
org.springframework.web.context.ContextLoaderListener
springDispatcherServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:springmvc.xml
1
springDispatcherServlet
/
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Insert title here
id
姓名
密码
${bean.id }
${bean.name }
${bean.pwd }
二、配置信息和自我理解模块
SSM整合的配置文件大概可分为三个:web.xml 、applicationContext.xml、SpringMvc.xml文件:web.xml主要用于加载前端控制器、加载各种配置文件和设置过滤器等;applicationContext.xml主要负责整合mybatis和spring的相关配置、SpringMvc.xml文件主要负责Springmvc的相关配置。
这里我重点说明下applicationContext.xml文件中的相关配置:
1、 关于MapperFactoryBean,我们知道在Mybatis的所有操作都是基于一个SqlSession的,而SqlSession是由SqlSessionFactory来产生的,SqlSessionFactory又是由SqlSessionFactoryBuilder来生成的。但是Mybatis-Spring是基于SqlSessionFactoryBean的。在使用Mybatis-Spring的时候,我们也需要SqlSession,而且这个SqlSession是内嵌在程序中的,一般不需要我们直接访问。SqlSession也是由SqlSessionFactory来产生的,但是Mybatis-Spring给我们封装了一个SqlSessionFactoryBean,在这个bean里面还是通过SqlSessionFactoryBuilder来建立对应的SqlSessionFactory,进而获取到对应的SqlSession。通过SqlSessionFactoryBean我们可以通过对其指定一些属性来提供Mybatis的一些配置信息。所以接下来我们需要在Spring的applicationContext配置文件中定义一个SqlSessionFactoryBean。
接下来就是在Spring的applicationContext文件中定义我们想要的Mapper对象对应的MapperScannerConfigurer了,通过这个类Mybatis-Spring会自动为我们注册Mapper对应的MapperFactoryBean对象,如果我们需要使用MapperScannerConfigurer来帮我们自动扫描和注册Mapper接口的话我们需要在Spring的applicationContext配置文件中定义一个MapperScannerConfigurer对应的bean。对于MapperScannerConfigurer而言有一个属性是我们必须指定的,那就是basePackage。basePackage是用来指定Mapper接口文件所在的基包的,在这个基包或其所有子包下面的Mapper接口都将被搜索到。:
这样MapperScannerConfigurer就会扫描指定基包下面的所有接口,并把它们注册为一个个MapperFactoryBean对象。
2、在SSM搭建过程中遇到的一些问题:
(1)web.xml文件中:
contextConfigLocation
classpath:applicationContext.xml
(2)user.xml文件中:
(3)在VO类User类中,最开始的时候,我除了类成员变量的setter和getter方法外,还添加了一个类构造方法,一直报错,最后去掉这个构造方法,工程就可以正常运行了。
这是我在搭建工程中自己的总结,最后的遇到的问题,我只是解决了,但是暂时还不知道原理,我会进一步学习,当然如果有高手指点下,我会很感激的。
工程代码下载地址是:http://download.csdn.net/detail/u011991249/9677262。
最后,提供几个我认为比较好的链接:
http://blog.csdn.net/zmx729618/article/details/51907416
http://blog.csdn.net/qh_java/article/details/44559005
https://my.oschina.net/u/1020238/blog/509159
http://www.2cto.com/database/201403/286289.html
http://m.blog.csdn.net/article/details?id=50136303