1.搭建开发环境,导入相关jar包,40个jar包的百度云(http://pan.baidu.com/s/1cAK4W2)
包含mybatis核心包和mybatis依赖包
mybatis与spring整合包
spring的jar包(包括springmvc的jar包)
数据库驱动包
第三方数据库连接池
2.配置文件
mybatis/SqlMapConfig.xml---mybatis全局配置文件
spring/ applicationContext- dao.xml---spring和mybatis整合的配置(SqlSessionFactory、mapper配置)(dao层)
spring/ applicationContext-service.xml---配置业务接口(service层)
spring/applicationContext.xml---spring配置文件(配置公用内容:数据源)
spring/springmvc.xml----------springmvc的全局配置文件
db.properties—数据库连接参数
log4j.properties---日志 配置文件
3.工程结构
4.整合的思路以及步骤
整合步骤:
1、 整合持久层
Mybatis和spring整合
整合目标:
加载数据库参数,数据库连接池交给spring创建,在applicationContext.xml中配置
sqlSessionFactoryBean和xxxdao交给spring创建,在applicationContext-dao.xml配置
SqlMapConfig.xml只需要加载po的映射文件
2、 整合业务层
Spring管理service
整合目标:
Service通过spring调用dao,在applicationContext-service.xml中配置
3、 整合控制层
因为springmvc是spring一个模块,只要加入jar包,配置springmvc.xml和web.xml即可。
整合目标:action中通过spring调用service
5.整合持久层
dao交给spring管理
配置数据源
applicationContext.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd "> <!-- 加载数据库参数,用户 密码 等等 --> <context:property-placeholder location="classpath:db.properties"/> <!-- 使用第三方的数据库连接池dbcp --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <!-- 这里用set方法进行注入 --> <property name="driverClassName" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <!-- 开发阶段数据库最大连接数建议设置小一点够用即可,设置为3 --> <property name="maxActive" value="${jdbc.maxActive}" /> <property name="maxIdle" value="${jdbc.maxIdle}" /> </bean> </beans>db.properties
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mybatis jdbc.username=root jdbc.password=root jdbc.maxActive=3 jdbc.maxIdle=1
SqlMapConfig.xml
这里默认已经创建了User.java
<?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> <!-- 配置映射文件 --> <mappers> <mapper resource="sqlmap/User.xml"/> </mappers> </configuration>User.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
让spring管理SqlSessionFactory
applicationContext-dao.xml
<!-- 配置SqlSessionFactory --> <bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 数据源 --> <property name="dataSource" ref="dataSource"/> <!-- 配置SqlMapConfig.xml --> <property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml"/> </bean> <!-- 配置dao --> <bean id="userDao" class="com.mo.dao.UserDaoImpl"> <!-- 注入会话工厂 上面 sqlSessionFactoryBean已经注入容器--> <property name="sqlSessionFactory" ref="sqlSessionFactoryBean"/> </bean>
9.开发dao层
写dao接口和dao实现类
编写dao的实现类,继承SqlSessionDaoSupport
UserDaoImpl.java
/** * * 在这里继承 SqlSessionDaoSupport,SqlSessionDaoSupport中很多东西 * 例如sqlSession等,UserDaoImpl都可以使用,比较方便 * */ public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao{ public User findById(int id) { //创建SqlSession SqlSession sqlSession = this.getSqlSession(); User user = (User)sqlSession.selectOne("test.findUserById", id); return user; } }
定义User.xml
<mapper namespace="test"> <select id="findUserById" parameterType="int" resultType="com.mo.po.User"> SELECT * FROM USER WHERE id = #{id} </select> </mapper>
SqlMapConfig.xml中配置User.xml
<?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> <!-- 配置映射文件 --> <mappers> <mapper resource="sqlmap/User.xml"/> </mappers> </configuration>
在applicationContext-dao.xml配置dao:
<!-- 配置dao --> <bean id="userDao" class="com.mo.dao.UserDaoImpl"> <!-- 注入会话工厂 上面 sqlSessionFactoryBean已经注入容器--> <property name="sqlSessionFactory" ref="sqlSessionFactoryBean"/> </bean>测试dao层
public class TestDao { @Test public void test(){ ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{ "spring/applicationContext.xml", "spring/applicationContext-dao.xml" }); UserDao userDao = (UserDao)context.getBean("userDao"); User user = (User)userDao.findById(1); System.out.println(user); } }
10.整理业务层
Spring管理service
整合目标:
Service通过spring调用dao,在applicationContext-service.xml中配置
写service接口和service实现类
public class UserServiceImpl implements UserService{ @Resource(name="userDao") //这里需要在applicationContext-service.xml中启动注解的驱动 private UserDao userDao; public User findUserById(int id){ return userDao.findById(id); } }将service讲给spring管理,在applicationContext-service.xml中配置
<!-- 启动注解的驱动 --> <context:annotation-config/> <!-- 这是service层 --> <bean id="userService" class="com.mo.service.UserServiceImpl"></bean>
测试service层,这时候需要加载3个配置文件
public class TestService { @Test public void test(){ ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{ "spring/applicationContext.xml", "spring/applicationContext-dao.xml", "spring/applicationContext-service.xml" }); UserService userService = (UserService)context.getBean("userService"); User user = (User)userService.findUserById(1); System.out.println(user); } }
11整合控制层
整合目标:action中通过spring调用service
配置springmvc.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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd "> <!-- Action控制器 ,扫描 com.mo.action包中有注解的类 并使它成为一个控制器--> <context:component-scan base-package="com.mo.action"/> <!-- 基于注解的映射器(可选) --> <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/> <!-- 基于注解的适配器(可选) --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/> <!-- 视图解析器(可选) --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/> </beans>在web.xml中配置前端控制器,同时加载spring容器
<?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"> <!-- 加载spring容器 --> <context-param> <param-name>contextConfigLocation</param-name> <!-- 这里使用了通配符 --> <param-value>/WEB-INF/classes/spring/applicationContext.xml,/WEB-INF/classes/spring/applicationContext-*.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 注册springmvc框架核心控制器 --> <servlet> <servlet-name>DispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <!-- 自定义加载配置文件--> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/springmvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>DispatcherServlet</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping> </web-app>
编写action类
目标:通过调用userService取出用户信息,在页面显示。
UserAction.java
@Controller//注意:这里需要在springmvc.xml中配置context:component-scan,启动注解自动扫描 public class UserAction { @Autowired//注入UserService,spring容器中已经装配了 private UserService userService; @RequestMapping(value="queryUser") public String queryUser(Model model){ User user = (User) userService.findUserById(1); model.addAttribute("user", user); model.addAttribute("message", "ssm整合"); return "/jsp/1.jsp"; } }编写页面
1.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>ssm整合</title> </head> <body> ${user.username} ${message} </body> </html>
最后tomcat部署访问
http://localhost:8080/ssm/queryUser.action
从数据库读取了数据
ssm整合完成
