这次的ssm整合比较详细,会从单独的mybatis连接数据库开始,基本会分为以下几个步骤:
1.单独使用mybatis
2.Mybatis整合spring - 有Mapper实现类
3.Mybatis整合spring – 没有Mapper实现类
4.Mybatis整合spring – mapper接口扫描
5.Mybatis 整合spring – 整合jdbc事务
6.整合springmvc
首先,对ssm整合有个大体的认识:
表现层:SpringMVC
包:SpringMVC的jar
配置文件:spring-mvc.xml
业务层:Spring
包:spring-ioc Spring-aop Spring-tx Spring-test
配置文件:applicationContext.xml
添加关于mybatis的配置
持久层:mybatis
包:mybatis自身核心包 Mysql数据库驱动包 C3p0连接池 Mybatis-spring的包
配置文件:sqlMapConfig.xml userMapperxml
一、单独使用mybatis
1.导入必须的包:
a)Mybatis自身核心jar:mybatis-3.4.4.jar
b)Log4j日志jar:log4j-1.2.17.jar
c)Oracle驱动jar:odbc14-10.2.0.4.0.jar
maven添加依赖jar包
org.mybatis
mybatis
3.4.4
log4j
log4j
1.2.17
com.oracle
ojdbc14
10.2.0.4.0
注意:ojdbc因为版权关系在maven远程仓库中只有目录没有jar包的,如果添加配置报错要手动下载相应jar包放在本地仓库的相应文件夹就好啦。
2.建立测试数据库表
create table da_user
(
user_id NUMBER,
user_name VARCHAR2(10),
sex Integer,
JOB VARCHAR2(64),
tel varchar2(32),
email varchar2(64),
hobby varchar2(64)
);
3.建立实体类
也可以直接用HashMap映射 对于比较简单的查询我比较习惯用这个
4.建立mapper接口UserMapper:
package com.ways.app.dao;
import java.util.Map;
public interface UserMapper {
public void saveUser(Map paramsMap);
}
5.建立sql映射文件userMapper.xml
insert into da_user
values (decode((select max(user_id) from da_user),null,1,(select max(user_id) + 1 from da_user)),
‘${userName}’,${sex},'${job}','${tel}','${email}','${hobby}')
6.建立sqlMapConfig.xml
7.编写测试类
package ssmTest;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import com.ways.app.dao.UserMapper;
public class MybatisTest {
@Test
public void test() throws IOException {
//1.创建SqlSessionFactoryBuilder
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
// 加载sqlMapConfig.xml文件
InputStream ins = Resources.getResourceAsStream("sqlMapConfig.xml");
//2.创建SqlSessionFactory
SqlSessionFactory factory = builder.build(ins);
//3.打开SqlSession
SqlSession sqlSession = factory.openSession();
//4.获取mapper接口的对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//操作
Map paramsMap = new HashMap();
paramsMap.put("userName", "zhaohy");
paramsMap.put("sex", 1);
paramsMap.put("job", "java软件工程师");
paramsMap.put("tel", "189xxxx0598");
paramsMap.put("email", "[email protected]");
paramsMap.put("hobby", "编程,运动");
userMapper.saveUser(paramsMap);
//6.提交事务
sqlSession.commit();
//7.关闭资源
sqlSession.close();
}
}
运行测试类插入成功
补充:maven pom.xml
4.0.0
com.ways
ssmTest
0.0.1-SNAPSHOT
war
junit
junit
4.12
test
org.apache.maven.plugins
maven-compiler-plugin
3.8.1
provided
org.apache.tomcat
tomcat-servlet-api
7.0.94
provided
org.apache.tomcat
tomcat-jsp-api
7.0.94
provided
org.ow2.asm
asm
7.1
provided
org.mybatis
mybatis
3.4.4
log4j
log4j
1.2.17
com.oracle
ojdbc14
10.2.0.4.0
org.apache.maven.plugins
maven-compiler-plugin
3.8.1
1.7
1.7
src\main\webapp\WEB-INF\lib
/home/zhaohy/software/jdk1.8.0_181/jre/lib/rt.jar
org.apache.tomcat.maven
tomcat7-maven-plugin
2.2
8080
/
org.apache.maven.plugins
maven-war-plugin
2.6
org.apache.maven.plugins
maven-jar-plugin
3.0.2
src/main/java
**/*.properties
**/*.xml
false
src/main/resources
**/*.properties
**/*.xml
false
UTF-8
UTF-8
web.xml
ssmTest
项目源码已上传github地址:
https://github.com/haiyong6/haiyongsRepository/tree/master/code/ssmTest
二、Mybatis整合spring - 有Mapper实现类
1.在上面的基础上导入必须的包:
Mybatis-spring
Spring自身的包:
spring-ioc
spring-aop
spring-tx
spring-context
c3p0数据库连接池的包
maven 配置:
org.mybatis
mybatis-spring
2.0.2
com.mchange
c3p0
0.9.5.4
org.springframework
spring-test
5.1.8.RELEASE
test
org.springframework
spring-aop
5.1.8.RELEASE
org.springframework
spring-context
5.1.8.RELEASE
org.springframework
spring-jdbc
5.1.8.RELEASE
org.springframework
spring-tx
5.1.8.RELEASE
2.编写Mapper的实现类:
package com.ways.app.dao.impl;
import java.util.Map;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import com.ways.app.dao.UserMapper;
public class UserMapperImpl extends SqlSessionDaoSupport implements UserMapper {
@Override
public void saveUser(Map paramsMap) {
this.getSqlSession().insert("com.ways.app.dao.UserMapper.saveUser", paramsMap);
//不需要事务提交 mybatis帮忙提交了
}
}
3.编写applicationContext.xml:
jdbc.properties文件:
jdbc.driverClassName=oracle.jdbc.OracleDriver
jdbc.url=jdbc\:oracle\:thin\:@127.0.0.1\:1521\:xe
jdbc.username=zhaohy
jdbc.password=oracle
修改sqlMapConfig.xml:
4.编写测试类MybatisSpringTest:
package ssmTest;
import java.util.HashMap;
import java.util.Map;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.ways.app.dao.UserMapper;
public class MybatisSpringTest {
@SuppressWarnings("resource")
@Test
public void test() {
//1.加载spring配置
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
//2.获取对象
UserMapper commonMapper = (UserMapper) ac.getBean("userMapper");
//3.调用方法
Map paramsMap = new HashMap();
paramsMap.put("userName", "zhaohy1");
paramsMap.put("sex", 1);
paramsMap.put("job", "java软件工程师");
paramsMap.put("tel", "189xxxx0598");
paramsMap.put("email", "[email protected]");
paramsMap.put("hobby", "编程,运动");
commonMapper.saveUser(paramsMap);
}
}
运行可以看到第二条已经插入成功!
项目源码已上传github:
https://github.com/haiyong6/haiyongsRepository/tree/master/code/ssmTest01
三、Mybatis整合spring - 没有Mapper
修改applicationContext.xml
项目源码已上传github地址:
https://github.com/haiyong6/haiyongsRepository/tree/master/code/ssmTest02
四、Mybatis整合spring – mapper接口
配置扫描 修改applicationContext.xml
项目源码已上传github地址:
https://github.com/haiyong6/haiyongsRepository/tree/master/code/ssmTest03
五、Mybatis 整合spring – 整合jdbc事务
1.修改applicationContext.xml
2.编写业务接口和实现方法,并在业务方法上添加注解@Transactional
UserService
package com.ways.app.service;
import java.util.Map;
public interface UserService {
public void saveUser(Map paramsMap);
}
UserServiceImpl
package com.ways.app.service.impl;
import java.util.Map;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.ways.app.dao.UserMapper;
import com.ways.app.service.UserService;
@Service("userService")
@Transactional
public class UserServiceImpl implements UserService {
//注入Mapper对象
@Resource
private UserMapper userMapper;
@Override
public void saveUser(Map paramsMap) {
userMapper.saveUser(paramsMap);
int i = 100/0;
userMapper.saveUser(paramsMap);
}
}
此处故意写了一个int i = 100/0的异常,为了测试事务是否生效,如果生效的话 这两次插入都不会被插入数据库
3.测试方法:
package ssmTest;
import java.util.HashMap;
import java.util.Map;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.ways.app.service.UserService;
public class MybatisSpringTest {
@Test
public void test1() {
//1.加载spring配置
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
//2.获取对象
UserService commonService = (UserService) ac.getBean("userService");
Map paramsMap = new HashMap();
paramsMap.put("userName", "zhaohy4");
paramsMap.put("sex", 1);
paramsMap.put("job", "java软件工程师");
paramsMap.put("tel", "189xxxx0598");
paramsMap.put("email", "[email protected]");
paramsMap.put("hobby", "编程,运动");
commonService.saveUser(paramsMap);
}
}
运行测试方法 junit报错,分母不能为0,通过数据库查表得知两条都没有插入成功,说明事务控制成功。事务注解可以对一个单一的方法也可以对整个类控制。
项目源码已上传github:
https://github.com/haiyong6/haiyongsRepository/tree/master/code/ssmTest04
六、整合SpringMVC
1.导入springMVC的包
2.配置web.xml
1)启动spring,加载applicationContext.xml
2)启动springmvc,加载spring-mvc.xml
maven配置:
org.springframework
spring-webmvc
5.1.8.RELEASE
com.alibaba
fastjson
1.2.58
commons-fileupload
commons-fileupload
1.4
commons-io
commons-io
2.6
web.xml:
ssmTest05
org.springframework.web.context.ContextLoaderListener
contextConfigLocation
classPath:applicationContext.xml
DispatcherServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classPath:spring-mvc.xml
DispatcherServlet
*.do
CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
utf-8
CharacterEncodingFilter
/*
配置spring-mvc.xml:
编写UserController:
package com.ways.app.web.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class UserController {
@RequestMapping("/user/test")
public String test() {
return "test";
}
}
在WEB-INF/pages/下编写test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
Insert title here
Hello SpringMVC!
请求/user/test.do接口,成功跳转到test.jsp,springmvc配置成功!
在controller写一个保存用户的方法 测试一下能不能插入数据:
package com.ways.app.web.controller;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.ways.app.service.UserService;
@Controller
public class UserController {
@Resource
public UserService userService;
@RequestMapping("/user/test")
public String test() {
return "test";
}
@RequestMapping("/user/saveUser")
public void saveUser() {
Map paramsMap = new HashMap();
paramsMap.put("userName", "zhaohy4");
paramsMap.put("sex", 1);
paramsMap.put("job", "java软件工程师");
paramsMap.put("tel", "189xxxx0598");
paramsMap.put("email", "[email protected]");
paramsMap.put("hobby", "编程,运动");
userService.saveUser(paramsMap);
}
}
运行tomcat 请求/user/saveUser.do
可以看到数据库里已经插入了一条信息
至此,一个完整的简单ssm项目就已经搭建完成啦~
项目源码已上传github:
https://github.com/haiyong6/haiyongsRepository/tree/master/code/ssmTest05