开始学习SSM,现在来整理一下SSM框架整合。
SSM框架,Spring mvc + Spring + mybatis,先大概概括一下这三个框架。
关于这个SSM框架整合的学习,我是从一篇博客上学习的,现在是基于机子的理解写的。Spring mvc 4.2.5.RELEASE
MVC框架,与Strusts2相比,首先比较好的一点就是能与Spring完美整合。除了学习用法,我个人觉得最重要的就是学习这个MVC框架的设计思想。
主要就是IoC(依赖注入),AOP(面向切面),目前我对于此也是一知半解,就不说什么了
轻量级ORM框架
图为完整目录结构。
在src/mian/resources目录下,一共有3个配置文件,spring-mybatis.xml包含spring,mybatis的配置,dispatcherServlet-servlet.xml为spring-mvc的配置,log4j2.xml为log4j2的配置,一个资源文件jdbc.properteis,包含关于基本的jdbc连接和数据源的属性
4.0.0
MyWebDemo
MyWebDemo
0.0.1-SNAPSHOT
war
MyWebDemo
UTF-8
4.2.5.RELEASE
3.3.0
2.5
javax
javaee-api
7.0
provided
org.glassfish.web
javax.servlet.jsp.jstl
1.2.2
org.springframework
spring-context
${spring.version}
org.springframework
spring-webmvc
${spring.version}
org.springframework
spring-jdbc
${spring.version}
org.springframework
spring-test
${spring.version}
org.mybatis
mybatis
${mybatis.version}
org.mybatis
mybatis-spring
1.2.2
mysql
mysql-connector-java
5.1.38
commons-dbcp
commons-dbcp
1.2.2
org.apache.logging.log4j
log4j-api
${log4j.version}
org.apache.logging.log4j
log4j-core
${log4j.version}
com.alibaba
fastjson
1.1.41
com.fasterxml.jackson.core
jackson-databind
2.2.0
junit
junit
4.11
test
maven-compiler-plugin
2.3.2
maven-war-plugin
2.2
3.1
false
用于配置jdbc的基本属性,和数据源的属性
spring与mybatis的完美整合
为了方便调试,一般会使用日志记录,输出信息。
log4j的配置基本上是通用的。
这里用的是log4j2,我开始打算用properties配置的,但是貌似并不能。
当然也可以用1.x的版本。
测试一下spring与mybatis的整合效果。
日后在开发中,完成相关的模块的工作,也应该先调试。
数据库表
pojo类
package com.example.pojo;
public class User {
private String userId;
private String userName;
private String password;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
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;
}
@Override
public String toString() {
return "User [userId=" + userId + ", userName=" + userName
+ ", password=" + password + "]";
}
}
接下来编写mybatis的mapper接口
package com.example.dao;
import java.util.List;
import org.apache.ibatis.annotations.Select;
import com.example.pojo.User;
/**
* mybaits的mapper接口
*
*/
public interface IUserDao {
//每个方法对应相应的sql语句
@Select("SELECT * FROM user WHERE userid = #{userid}")
public User selectOneUserByUserId(String userid);
@Select("SELECT * FROM user")
public List selectUserList();
}
业务层接口
package com.example.service;
import java.util.List;
import com.example.pojo.User;
public interface IUserService {
public User getUserByUserId(String userid);
public List getAllUsers();
}
业务层实现类
package com.example.service.impl;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.example.dao.IUserDao;
import com.example.pojo.User;
//Service对应业务层实现类,而且名字必须为"userService"
@Service("userService")
public class UserServiceImpl implements IUserService {
//控制反转,使用该注释后,由spring容器获得该属性的实例化控制权
@Resource
private IUserDao userDao;
@Override
public User getUserByUserId(String userid) {
// TODO Auto-generated method stub
return this.userDao.selectOneUserByUserId(userid);
}
@Override
public List getAllUsers() {
// TODO Auto-generated method stub
return this.userDao.selectUserList();
}
}
测试
package myTest;
import javax.annotation.Resource;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.alibaba.fastjson.JSON;
import com.example.pojo.User;
import com.example.service.IUserService;
//表示继承了SpringJUnit4ClassRunner类
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:spring-mybatis.xml" })
public class TestMyBatis {
private static Logger logger = LogManager.getLogger(TestMyBatis.class);
@Resource
private IUserService userService;
@Test
public void test() {
User user = userService.getUserByUserId("141542254");
logger.info(JSON.toJSONString(user));
}
}
测试结果
说一下,这里因为方便没有对密码做相关处理,实际开发中,最低限度都要用MD5处理密码,再存入数据库。不然明文存储密码,会被人打死。
配置dispathcerServlet-servlet.xml
text/html;charset=UTF-8
web.xml配置
MyWebDemo
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
org.springframework.web.context.ContextLoaderListener
contextConfigLocation
classpath:spring-mybatis.xml
dispatcherServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:dispatcherServlet-servlet.xml
1
true
dispatcherServlet
/
encodingFilter
org.springframework.web.filter.CharacterEncodingFilter
true
encoding
UTF-8
encodingFilter
/*
页面控制器的代码
package com.example.controller;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.example.pojo.User;
import com.example.service.IUserService;
@Controller
@RequestMapping("/user")
public class UserController {
@Resource
private IUserService userService;
@RequestMapping("/showUser")
public String toIndex(Model model) {
List users = userService.getAllUsers();
model.addAttribute("users", users);
//返回的是视图(一般为jsp)的名称
return "showUser";
}
}
View,jsp页面
<%@ page="" language="java" import="java.util.*" pageencoding="utf-8">
<%@ taglib="" uri="http://java.sun.com/jsp/jstl/core" prefix="c">
${user}
测试结果
SSM框架的整合,基本上到此完成了,最后贴上一个简单的Spring mvc的工作流程图,加深理解,在配置时也更得心应手。