1. 程式人生 > >SSM整合(Spring、SpringMVC、Mybatis)

SSM整合(Spring、SpringMVC、Mybatis)

SSM整合
為什麼整合?方便web的開發
Spring:管理我們在專案中的物件,比如service、dao、工具類物件。
SpringMVC:主要做web應用的開發,接收請求,返回處理結果。
Mybatis:完成資料庫的操作,完成資料庫的增刪改查。
以註解方式為主,配置檔案為輔。
SSM : 一個容器, SpringMVC容器管理整個專案中的所有物件。

SSM: SSM整合開發,在一個專案中使用springmvc + spring + mybatis
SSM 也有的叫SSI(IBatis)

SSM整合的思路:把檢視層的物件交給SpringMVC容器管理, 把Service和Dao層物件交給Spring容器管理

把檢視層的物件定義在SpringMVC的配置檔案中:
1.處理器物件, 使用註解@Controller建立, 宣告元件掃描器
2.檢視解析器
3.註解驅動mvc:annotation-driven

把Service和Dao物件定義Spring的配置檔案中:
1.Service層物件,使用註解@Service, 宣告元件掃描器
2.資料來源DataSource(druid, dbcp)
3.SqlSesisonFactory
4.MyBatis的動態代理技術,建立Dao物件
5.工具類和其他類

SpringMVC容器和Spring容器的關係:在理解上, SpringMVC容器是Spring容器的子容器,
那麼在子容器中可以訪問父容器中的物件,也就是Controller可以Service,
反過來Service不能Controller。

SpringMVC容器和Spring容器關係的建立是通過SpringMVC容器物件中的屬性 parent實現的。
parent屬性值是Spring的容器物件。

SpringMVC – parent – Spring

SSM整合的步驟:
1.使用springdb的資料庫, student表
2.新建的web應用
匯入jar:
1)spring的核心jar:spring-beans.jar,spring-core.jar,spring-context.jar,spring-expression.jar
2)spring-aop.jar
3)資料庫和事務相關的:spring-jdbc.jar,spring-tx.jar
4)web相關的jar:spring-web.jar, spring-webmvc.jar
5)mybatis的核心jar:mybatis-3.4.5.jar
6)mybatis和spring整合的jar: mybatis-spring-1.3.1.jar
7)資料庫的連線池 druid.jar
8) mysql的驅動,日誌commons-logging.jar , log4j.jar
9)json的工具庫jar:Jackson
3.修改web.xml

1)註冊Spring的監聽器,ContextLoaderListener, 建立spring的容器物件。 載入spring的配置檔案
2)註冊SpringMVC的中央排程器,建立SpringMVC的容器物件,加入SpringMVC配置檔案
3)註冊字符集過濾器,解決post請求亂碼的問題
4.定義程式中包的結構, 實體beans, Dao包, Service包, Controller包
5.編寫配置檔案
1)springmvc的配置檔案
2)spring的配置檔案
3)定義資料庫的屬性配置檔案
4)mybatis主配置檔案
6.編寫程式碼:定義實體類, Dao介面和sql對映檔案, Service介面和實現類, Controller類
7.定義檢視檔案(jsp)

/*web.xml/

<?xml version="1.0" encoding="UTF-8"?> 25-SSM index.html index.htm index.jsp default.html default.htm default.jsp contextConfigLocation classpath:conf/applicationContext.xml org.springframework.web.context.ContextLoaderListener dispatcherServlet org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:conf/dispatcherServlet.xml 1 dispatcherServlet *.do characterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding utf-8 forceRequestEncoding true forceResponseEncoding true characterEncodingFilter /*

/SpringMVC的配置檔案/

<?xml version="1.0" encoding="UTF-8"?>

<!-- springmvc的配置檔案 -->

<!-- 宣告元件掃描器,指定Controller註解所在的包名 -->
<context:component-scan base-package="com.bjpowernode.controllers" />

<!-- 宣告檢視解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<property name="prefix" value="/WEB-INF/views/" />
	<property name="suffix" value=".jsp" />
</bean>

<!-- 宣告註解驅動 -->
<mvc:annotation-driven />
/**Spring的配置檔案**/
<?xml version="1.0" encoding="UTF-8"?>

<!-- spring的配置檔案: Dao物件,Service物件,其他的工具類物件 -->

<!-- 宣告元件掃描器,指定@Service註解所在的包名 -->
<context:component-scan base-package="com.bjpowernode.service" />

<context:property-placeholder location="classpath:conf/jdbc.properties"/>

<!-- 宣告資料來源(druid,dbcp) -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
	<property name="url" value="${jdbc.url}" />
	<property name="username" value="${jdbc.username}" />
	<property name="password" value="${jdbc.password}" />
</bean>


<!-- 宣告SqlSessionFactoryBean,建立SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	<property name="dataSource" ref="dataSource" />
	<property name="configLocation" value="classpath:conf/mybatis.xml" />
</bean>


<!-- 宣告MyBatis的掃描器, 建立Dao介面的實現類物件 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
	<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
	<property name="basePackage" value="com.bjpowernode.dao" />
</bean>

/jdbc.properties/

jdbc.url=jdbc:mysql://localhost:3306/springdb
jdbc.username=root
jdbc.password=root

/mybatis.xml*/

<?xml version="1.0" encoding="UTF-8" ?>
<!-- 配置別名 -->
<typeAliases>
	<package name="com.bjpowernode.beans"/>
</typeAliases>

<!-- 配置sql對映檔案 -->
<mappers>
	<package name="com.bjpowernode.dao"/>
</mappers>

/beans*/
package com.bjpowernode.beans;

public class Student {

private Integer id;
private String name;
private Integer age;

public Integer getId() {
	return id;
}
public void setId(Integer id) {
	this.id = id;
}
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
public Integer getAge() {
	return age;
}
public void setAge(Integer age) {
	this.age = age;
}
@Override
public String toString() {
	return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
}

}

/*controllers/
package com.bjpowernode.controllers;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping(“jump”)
public class JumpController {

/**
 * 定義處理器方法,跳轉到一個檢視頁面
 */
@RequestMapping("tojsp.do")
public String toJsp(String target){
	return target; //邏輯名稱
}

}

package com.bjpowernode.controllers;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.bjpowernode.beans.Student;
import com.bjpowernode.service.StudentService;

@Controller
@RequestMapping(“student”)
public class StudentController {

/**
 * 引用型別 @Autowired ,@Resource
 * byName, byType
 */
//byType
@Autowired
private StudentService studentService;

//學生的註冊,新增功能
@RequestMapping("addStudent.do")
public ModelAndView addStudent(Student student){
	ModelAndView mv  = new ModelAndView();
	
	//呼叫Service處理註冊功能
	int rows  = studentService.addStudent(student);
	
	if( rows > 0 ){
		mv.addObject("msg", "註冊成功!!!");
		mv.setViewName("success");
	} else {
		mv.addObject("msg", "註冊失敗!!!");
		mv.setViewName("fail");
	}
	
	return mv;
}


//查詢學生
@ResponseBody
@RequestMapping("queryStudent.do")
public List<Student> queryStudents(){
	List<Student> students = studentService.queryStudents();
	//對查詢結果做處理
	if( students  == null ){
		students = new ArrayList<>();
	}
	return students; // [{},{}]   []
}

}

/dao*/
package com.bjpowernode.dao;

import java.util.List;

import com.bjpowernode.beans.Student;

public interface StudentDao {

int insertStudent(Student student);
List<Student> selectStudents();

}

<?xml version="1.0" encoding="UTF-8" ?> insert into student(name,age) values(#{name},#{age})
<select id="selectStudents" resultType="Student">
	select id,name,age from student order by id desc
</select>

/service*/
package com.bjpowernode.service;

import java.util.List;

import com.bjpowernode.beans.Student;

public interface StudentService {

int addStudent(Student student);
List<Student> queryStudents();

}
package com.bjpowernode.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.bjpowernode.beans.Student;
import com.bjpowernode.dao.StudentDao;
import com.bjpowernode.service.StudentService;

@Service
public class StudentServiceImpl implements StudentService {

/**
 * 引用型別 @Autowired ,@Resource
 * byName, byType
 */
//byType
@Autowired
private StudentDao stuDao;

@Override
public int addStudent(Student student) {
	int rows  = stuDao.insertStudent(student);
	return rows;
}

@Override
public List<Student> queryStudents() {
	List<Student> students = stuDao.selectStudents();
	return students;
}

}
/*addStudent.jsp/
<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>

Insert title here

addStudent.jsp

		<tr>
			<td>年齡:</td>
			<td><input type="text" name="age" /></td>
		</tr>
		
		<tr>
			<td></td>
			<td><input type="submit" value="註冊功能" /></td>
		</tr>
	
	</table>

</form>
姓名:

/success.jsp*/
<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>

Insert title here success.jsp : ${msg }

/*index.jsp/
<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>

Insert title here

SSM整合的例子

圖形不能顯示
學生註冊 學生瀏覽

${pageContext.request.contextPath }在jsp中相當於base標籤