Spring MVC整合Mybatis例項
阿新 • • 發佈:2019-02-03
(1) 匯入相關包,包結構如下圖所示:
(2) 修改src/applicationContext.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:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" 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.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <!-- 引入jdbc配置檔案 --> <context:property-placeholder location="classpath:jdbc.properties" /> <!--建立jdbc資料來源 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> </bean> <!-- (事務管理)transaction manager, use JtaTransactionManager for global tx --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- 建立SqlSessionFactory,同時指定資料來源 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> </bean> <!-- 可通過註解控制事務 --> <tx:annotation-driven /> <!-- Mapper介面所在包名,Spring會自動查詢其下的Mapper --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.geloin.spring.mapper" /> </bean> </beans>
(3) 在src下新增jdbc.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/ruisystem
username=root
password=root
(4) 在com.geloin.spring.entity包下新增實體類,實體類對應於資料表,其屬性與資料表相同或多於資料表。
/** * * @author geloin * @date 2012-5-5 上午10:24:43 */ package com.geloin.spring.entity; /** * * @author geloin * @date 2012-5-5 上午10:24:43 */ public class Menu { /** * 惟一標識 */ private Integer id; /** * 父ID */ private Integer parentId; /** * 名稱 */ private String name; /** * 對應的地址 */ private String url; /** * 是否顯示在左側 */ private Integer isShowLeft; /** * * @author geloin * @date 2012-5-5 上午10:26:19 * @return the id */ public Integer getId() { return id; } /** * * @author geloin * @date 2012-5-5 上午10:26:19 * @param id * the id to set */ public void setId(Integer id) { this.id = id; } /** * * @author geloin * @date 2012-5-5 上午10:26:19 * @return the parentId */ public Integer getParentId() { return parentId; } /** * * @author geloin * @date 2012-5-5 上午10:26:19 * @param parentId * the parentId to set */ public void setParentId(Integer parentId) { this.parentId = parentId; } /** * * @author geloin * @date 2012-5-5 上午10:26:19 * @return the name */ public String getName() { return name; } /** * * @author geloin * @date 2012-5-5 上午10:26:19 * @param name * the name to set */ public void setName(String name) { this.name = name; } /** * * @author geloin * @date 2012-5-5 上午10:26:19 * @return the url */ public String getUrl() { return url; } /** * * @author geloin * @date 2012-5-5 上午10:26:19 * @param url * the url to set */ public void setUrl(String url) { this.url = url; } /** * * @author geloin * @date 2012-5-5 上午10:26:19 * @return the isShowLeft */ public Integer getIsShowLeft() { return isShowLeft; } /** * * @author geloin * @date 2012-5-5 上午10:26:19 * @param isShowLeft * the isShowLeft to set */ public void setIsShowLeft(Integer isShowLeft) { this.isShowLeft = isShowLeft; } }
(5) 在com.geloin.spring.mapper下新增實體類與資料表的對映關係(com.geloin.spring.mapper與applicationContext.xml中的配置一致)。
/** * * @author geloin * @date 2012-5-5 上午10:26:34 */ package com.geloin.spring.mapper; import java.util.List; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Result; import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Repository; import com.geloin.spring.entity.Menu; /** * * @author geloin * @date 2012-5-5 上午10:26:34 */ @Repository(value = "menuMapper") public interface MenuMapper { @Select(value = "${sql}") @Results(value = { @Result(id = true, property = "id", column = "id"), @Result(property = "parentId", column = "c_parent_id"), @Result(property = "url", column = "c_url"), @Result(property = "isShowLeft", column = "c_is_show_left"), @Result(property = "name", column = "c_name") }) List<Menu> operateReturnBeans(@Param(value = "sql") String sql); }
其中,@Repository表示這是一個被Spring管理的資源,資源名稱為menuMapper;@Select表示operateReturnBeans方法為一個select方法;@Results表示返回結果,@Result將返回結果中的欄位名與實體類關聯;@Param表示String sql這個變數是用於Mybatis的一個變數,其名稱為sql(value值),該變數在@Select中呼叫(通過${sql}呼叫)。
(6) 在com.geloin.spring.service中新增MenuService介面
/**
*
* @author geloin
* @date 2012-5-5 上午10:28:42
*/
package com.geloin.spring.service;
import java.util.List;
import com.geloin.spring.entity.Menu;
/**
*
* @author geloin
* @date 2012-5-5 上午10:28:42
*/
public interface MenuService {
/**
* 查詢所有
*
* @author geloin
* @date 2012-5-5 上午10:28:55
* @return
*/
List<Menu> find();
}
(7) 在com.geloin.spring.service.impl中新增MenuServiceImpl作為MenuService介面的實現
/**
*
* @author geloin
* @date 2012-5-5 上午10:29:22
*/
package com.geloin.spring.service.impl;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import com.geloin.spring.entity.Menu;
import com.geloin.spring.mapper.MenuMapper;
import com.geloin.spring.service.MenuService;
/**
*
* @author geloin
* @date 2012-5-5 上午10:29:22
*/
@Repository(value = "menuService")
@Transactional
public class MenuServiceImpl implements MenuService {
@Resource(name = "menuMapper")
private MenuMapper menuMapper;
/*
* (non-Javadoc)
*
* @see com.geloin.spring.service.MenuService#find()
*/
@Override
public List<Menu> find() {
String sql = "select * from tb_system_menu";
return this.menuMapper.operateReturnBeans(sql);
}
}
其中,@Transactional表示該類被Spring作為管理事務的類,@Resource引入一個Spring定義的資源,資源名為menuMapper(name值),即為第七步定義的對映類。
(8) 修改控制器LoginController
/**
*
* @author geloin
* @date 2012-5-5 上午9:31:52
*/
package com.geloin.spring.controller;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.geloin.spring.entity.Menu;
import com.geloin.spring.service.MenuService;
/**
*
* @author geloin
* @date 2012-5-5 上午9:31:52
*/
@Controller
@RequestMapping(value = "background")
public class LoginController {
@Resource(name = "menuService")
private MenuService menuService;
/**
*
*
* @author geloin
* @date 2012-5-5 上午9:33:22
* @return
*/
@RequestMapping(value = "to_login")
public ModelAndView toLogin(HttpServletResponse response) throws Exception {
Map<String, Object> map = new HashMap<String, Object>();
List<Menu> result = this.menuService.find();
map.put("result", result);
return new ModelAndView("background/menu", map);
}
}
通過map將從資料庫中獲取的值傳遞到jsp頁面,"background/menu"值經context-dispatcher.xml轉化後,變為/WEB-INF/pages/background/menu.jsp,即,方法toLogin的含義為:從資料庫中獲取選單資訊,然後將之儲存到map中,通過map把選單列表傳遞到/WEB-INF/pages/background/menu.jsp頁面用於顯示。
(9) 編寫/WEB-INF/pages/background/menu.jsp頁面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Insert title here</title>
</head>
<body>
<c:forEach items="${result }" var="item">
${item.id }--${item.name }--${item.parentId }--${item.url }--${item.isShowLeft }<br />
</c:forEach>
</body>
</html>
(10) 顯示結果