1. 程式人生 > >spring+springMVC+myBatis——小案例

spring+springMVC+myBatis——小案例

通過SSM框架簡單的實現一個對學生類的增刪改查

一、主要步驟

1.建立名為showstudents的Web專案,匯入相應的jar包

2.在包下建立實體類Student

3.dao層建立StudentDAO,建立StudentDAO.xml

4.配置檔案log4j.properties,spring.xml

5.建立檔案sqlMapConfig.xml

6.配置web.xml

7.檢視層

二、詳細流程

建立web專案工程之後,在WEB-INF下的lib資料夾下匯入相應的jar包。

1.log4j.properties日誌檔案

log4j.debug=true   
log4j.rootLogger=DEBUG,CON  
 
log4j.appender.CON=org.apache.log4j.ConsoleAppender  
log4j.appender.CON.layout=org.apache.log4j.PatternLayout  
log4j.appender.CON.layout.ConversionPattern=%d{MM-ddHH\:mm\:ss}[%c-%L][%t][%-4r] - %m%n  

2.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">
  <display-name></display-name>	
  
  <!-- 配置spring -->
  <context-param>
  	<param-name>contextConfigLocation</param-name>
  	<param-value>classpath:spring.xml</param-value>
  </context-param>
  <context-param>
  	<param-name>log4jConfigLocation</param-name>
  	<param-value>classpath:log4j.properties</param-value>
  </context-param>
  
  <!-- 配置spring容器啟動監聽器 -->
  <listener>
  	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

3.spring.xml中

配置資料庫連線池

注意:要根據自己的資料庫修改相應的url、username、password

<!--  Druid 資料庫連線池 -->
	<!-- mybatis要依賴資料庫連線池的bean,所以id要對應 -->
	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
		init-method="init" destroy-method="close">
		<!-- 基本屬性 url、user、password name屬性要和類裡的屬性對應-->
		<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:xe" />
		<property name="username" value="scott" />
		<property name="password" value="tiger" />
	
		<!-- 配置初始化大小、最小、最大 --> 
		<property name="initialSize" value="1" /><!-- 最初的資料庫連線,預設是1 -->
		<property name="minIdle" value="1" /><!-- 空閒時保留的最小連線數1  -->
		<property name="maxActive" value="20" /><!-- 最大活動連線數20 -->
	</bean>

配置mybatis的會話工廠

<!-- 建立SqlSessionFactory,同時指定資料來源           配置mybatis的會話工廠-->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	    <property name="dataSource" ref="dataSource" /> <!-- ref是引用 ,ref中的dataSource是引用的配置資料庫連線池,dataSource是資料庫連線池的id-->
	    <!-- 指定sqlMapConfig總配置檔案,訂製的environment在spring容器中不在生效  在這裡指定mybatis的總的配置檔案-->
	    <property  name="configLocation"  value="classpath:sqlMapConfig.xml"/>
	</bean>


配置會話模板類,注入到StudentDAO中

------引用資料庫連線池,獲取資料庫連線
------指定mybatis總的配置檔案位置和名稱
------配置會話模板類,注入到StudentDAO類中

<!-- 配置怎樣生成一個會話,配置會話模板類,注入到StudentDAO類中 -->
	<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> 
      <constructor-arg index="0" ref="sqlSessionFactory" /> 
	</bean>
	<!-- constructor-arg index="0" ref="sqlSessionFactory"第一個引數,引用sqlSessionFactory會話工廠物件 -->
	
	<!-- 得到DAO物件, StudentDAO就可以直接執行sql語句-->
	<bean id="studentDAO" class="com.sict.dao.StudentDAO">
	 	<property name="sqlSession" ref="sqlSessionTemplate" /> 
	</bean>


看一下完整的spring.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"
	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"
	>
	
	<!--  Druid 資料庫連線池 -->
	<!-- mybatis要依賴資料庫連線池的bean,所以id要對應 -->
	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
		init-method="init" destroy-method="close">
		<!-- 基本屬性 url、user、password name屬性要和類裡的屬性對應-->
		<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:xe" />
		<property name="username" value="scott" />
		<property name="password" value="tiger" />
	
		<!-- 配置初始化大小、最小、最大 --> 
		<property name="initialSize" value="1" /><!-- 最初的資料庫連線,預設是1 -->
		<property name="minIdle" value="1" /><!-- 空閒時保留的最小連線數1  -->
		<property name="maxActive" value="20" /><!-- 最大活動連線數20 -->
	</bean>
	 	
    <!-- 建立SqlSessionFactory,同時指定資料來源           配置mybatis的會話工廠-->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	    <property name="dataSource" ref="dataSource" /> <!-- ref是引用 ,ref中的dataSource是引用的配置資料庫連線池,dataSource是資料庫連線池的id-->
	    <!-- 指定sqlMapConfig總配置檔案,訂製的environment在spring容器中不在生效  在這裡指定mybatis的總的配置檔案-->
	    <property  name="configLocation"  value="classpath:sqlMapConfig.xml"/>
	</bean>
	
	<!-- 配置怎樣生成一個會話,配置會話模板類,注入到StudentDAO類中 -->
	<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> 
      <constructor-arg index="0" ref="sqlSessionFactory" /> 
	</bean>
	<!-- constructor-arg index="0" ref="sqlSessionFactory"第一個引數,引用sqlSessionFactory會話工廠物件 -->
	
	<!-- 得到DAO物件, StudentDAO就可以直接執行sql語句-->
	<bean id="studentDAO" class="com.sict.dao.StudentDAO">
	 	<property name="sqlSession" ref="sqlSessionTemplate" /> 
	</bean>
</beans>

4.配置sqlMapConfig.xml

sqlMapConfig.xml是mybatis的總的控制檔案,在這裡可以進行別名的配置,指定對映的路徑等。

<?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>
 <settings>
  <!-- 這個配置使全域性的對映器啟用或禁用快取 -->
  <setting name="cacheEnabled" value="true" />
  <!-- 允許 JDBC 支援生成的鍵。需要適合的驅動。如果設定為 true 則這個設定強制生成的鍵被使用,儘管一些驅動拒絕相容但仍然有效(比如 Derby) -->
  <setting name="useGeneratedKeys" value="true" />
  <!-- 配置預設的執行器。SIMPLE 執行器沒有什麼特別之處。REUSE 執行器重用預處理語句。BATCH 執行器重用語句和批量更新  -->
  <setting name="defaultExecutorType" value="REUSE" />
  <!-- 全域性啟用或禁用延遲載入。當禁用時,所有關聯物件都會即時載入。 -->
  <setting name="lazyLoadingEnabled" value="true"/>
  <!-- 設定超時時間,它決定驅動等待一個數據庫響應的時間。  -->
  <setting name="defaultStatementTimeout" value="25000"/> 
 </settings>
  
 <!-- 為實體類配置別名,這樣在StudentDAO.xml中可通過別名來代替類名,簡化書寫 -->
 <typeAliases>
 	<typeAlias type="com.sict.model.Student" alias="Student" />
 </typeAliases>
 <!-- 指定對映器的路徑       引入配置檔案 -->
 <mappers>
 	<mapper resource="com/sict/dao/StudentDAO.xml"/>
 </mappers>
 </configuration>

這樣基本的配置檔案配置好後,就可以寫實現相應的增刪改查功能了。

1.model中寫相應的實體類

public class Student {
	private Integer id;
	private String stuNo;
	private String name;
	private String mobilePhone;
	private String homePhone;
	private String email;
	private String QQ;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getStuNo() {
		return stuNo;
	}
	public void setStuNo(String stuNo) {
		this.stuNo = stuNo;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getMobilePhone() {
		return mobilePhone;
	}
	public void setMobilePhone(String mobilePhone) {
		this.mobilePhone = mobilePhone;
	}
	public String getHomePhone() {
		return homePhone;
	}
	public void setHomePhone(String homePhone) {
		this.homePhone = homePhone;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getQQ() {
		return QQ;
	}
	public void setQQ(String qQ) {
		QQ = qQ;
	}
	@Override
	public String toString() {
		return "Student [id=" + id + ", stuNo=" + stuNo + ", name=" + name
				+ ", mobilePhone=" + mobilePhone + ", homePhone=" + homePhone
				+ ", email=" + email + ", QQ=" + QQ + "]";
	}
	
}

 

2.StudentDAO.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">
    <!-- namespace是名稱空間,resultMap是結果對映,
    resultMap中的property是實體類中類的屬性(大小寫必須規範),column是資料庫中表的欄位(並不區分大小寫) -->
<mapper namespace="com.sict.dao.StudentMapper">
	<resultMap id="StudentResult" type="Student">
		<id property="id" column="id" />
		<result property="stuNo" column="s_no" />
		<result property="name" column="s_name" />
		<result property="mobilePhone" column="m_phone" />
		<result property="homePhone" column="h_phone" />
		<result property="email" column="email" />
		<result property="QQ" column="qq" />
	</resultMap>
<!--以下是增刪查改的sql語句-->
 	<select id="selectAllStudents" resultMap="StudentResult">
  		<![CDATA[SELECT id,s_no,s_name,m_phone,h_phone,email,qq FROM students]]>
 	</select>
 	
 	<select id="searchAllStudents" parameterType="string" resultMap="StudentResult">
  		<![CDATA[
  		SELECT id,s_no,s_name,m_phone,h_phone,email,qq FROM students 
  		WHERE s_no like #{keyWord} OR
  		      s_name like #{keyWord} OR
  		      m_phone like #{keyWord} OR
  		      h_phone like #{keyWord} OR
  		      email like #{keyWord} OR
  		      qq like #{keyWord} 
  		]]>
 	</select>
 	
 	<select id="selectStudentById" parameterType="int" resultMap="StudentResult">
  		<![CDATA[SELECT id,s_no,s_name,m_phone,h_phone,email,qq FROM students WHERE id = #{id}]]>
 	</select>
 	
 	 <select id="selectCount" resultType="int">
  		<![CDATA[SELECT count(*) c FROM students]]>
 	</select>
 	
 	<delete id="deleteStudent" parameterType="int">
        <![CDATA[ 
           DELETE FROM students WHERE id = #{id}
        ]]>
	</delete>
	
 	<insert id="insertStudent" parameterType="Student">
        <![CDATA[ 
        	INSERT INTO students values(students_seq.NEXTVAL,#{stuNo},#{name},#{mobilePhone},#{homePhone},#{email},#{QQ},sysdate)
        ]]>
	</insert>

	<update id="updateStudent" parameterType="Student">
        <![CDATA[ 
           UPDATE students SET 
           s_no = #{stuNo},
           s_name = #{name},
           m_phone = #{mobilePhone},
           h_phone = #{homePhone},
           email = #{email},
           qq = #{QQ},
           birthdate = sysdate
           WHERE id = #{id}
        ]]>
	</update>

</mapper> 

3.StudentDAO.java

import java.util.ArrayList;
import java.util.List;
import org.mybatis.spring.SqlSessionTemplate;
import com.sict.model.Student;

public class StudentDAO {
	//得到會話模板
	private SqlSessionTemplate sqlSession;
	//建構函式
	public StudentDAO(){
	}
	
	public SqlSessionTemplate getSqlSession() {
		return sqlSession;
	}

	public void setSqlSession(SqlSessionTemplate sqlSession) {
		this.sqlSession = sqlSession;
	}
	//學生的個數
	public int getCount(){
		Integer c = (Integer)sqlSession.selectOne("com.sict.dao.StudentMapper.selectCount");
		return c.intValue();
	}
	//通過id查詢獲取學生
	public Student getStudent(int id){
		return (Student)sqlSession.selectOne("com.sict.dao.StudentMapper.selectStudentById",id);
	}
	//獲取所有學生
	public List<Student> getStudents(){
		List<Object> stus = sqlSession.selectList("com.sict.dao.StudentMapper.selectAllStudents");
		List<Student> li = new ArrayList<Student>();
		for(Object s : stus){
			li.add((Student)s);
		}
		return li;
	}
	//新增學生
	public int insertStudent(Student s){
		return sqlSession.insert("com.sict.dao.StudentMapper.insertStudent",s);
	}
	//通過id刪除學生
	public int deleteStudent(int id){
		return sqlSession.delete("com.sict.dao.StudentMapper.deleteStudent",new Integer(id));
	}
	//修改學生資訊
	public int updateStudent(Student s){
		return sqlSession.insert("com.sict.dao.StudentMapper.updateStudent",s);
	}
	//模糊查詢,通過關鍵字查詢學生
	public List<Student> searchStudents(String keyWord){
		List<Student> li = new ArrayList<Student>();
		keyWord = "%"+keyWord+"%";
		List<Object> stus = sqlSession.selectList("com.sict.dao.StudentMapper.searchAllStudents",keyWord);
		
		for(Object s : stus){
			li.add((Student)s);
		}
		return li;
	}
}

檢視index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="com.sict.model.*"%>
<%@ page import="com.sict.dao.*"%>
<%@ page import="org.springframework.web.context.*"%>
<%@ page import="org.springframework.web.context.support.*"%>

<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
</head>

<body>
	<%
		ServletContext servletContext = request.getSession()
				.getServletContext();
		WebApplicationContext wac = WebApplicationContextUtils
				.getWebApplicationContext(servletContext);
		StudentDAO dao = (StudentDAO) wac.getBean("studentDAO");
	%>
	刪除email為[email protected]的學生:
	<br>
	<%
		List<Student> stus = dao.searchStudents("[email protected]");
		for (Student s : stus) {
			out.println("刪除---:"+s + "<br>");
			dao.deleteStudent(s.getId());
		}
	%>
	
	新增學生[email protected]:
	<br>
	<%
		Student sNew = new Student();
		sNew.setEmail("[email protected]");
		sNew.setName("new");
		sNew.setStuNo("999");
		sNew.setQQ("0000");
		sNew.setHomePhone("053133334444");
		sNew.setMobilePhone("053133334444");
		dao.insertStudent(sNew);
	%>
	
	獲取所有學生:
	<br>
	<%
		stus = dao.getStudents();
		for (Student s : stus) {
			out.println(s + "<br>");
		}
	%>
	獲取i學生總數:
	<br>
	<%
		out.println(dao.getCount() + "<br>");
	%>
	獲取id為0的學生:
	<br>
	<%
		out.println(dao.getStudent(0) + "<br>");
	%>
	
	查詢含郭字的學生:
	<br>
	<%
		stus = dao.searchStudents("郭");
		for (Student s : stus) {
			out.println(s + "<br>");
		}
	%>
</body>
</html>






相關推薦

spring+springMVC+myBatis——案例

通過SSM框架簡單的實現一個對學生類的增刪改查 一、主要步驟 1.建立名為showstudents的Web專案,匯入相應的jar包 2.在包下建立實體類Student 3.dao層建立StudentDAO,建立StudentDAO.xml 4.配置檔案log4j.prope

spring+springMvc+Mybatis簡單案例超詳細

上一篇文章介紹了spring+springMvc+Mybatis的搭建,地址https://blog.csdn.net/niqinge/article/details/79280204現在來仔細介紹一個簡單的案例。在搭建完ssm框架之後,不懂搭建的朋友可以先看看我的上一篇文章

練習:Spring + SpringMVC + Mybatis 整合

注:將涉及的類(包、模組)交給Spring容器管理後,可在開發過程中注入需要的東西,通過Spring容器的管理,避免了各種類及其屬性的額外宣告使用,簡化開發流程 web.xml中,可以通過<context-param>批量把各種xml裡配置好的Bean一起載入到Spring容器中

spring+springmvc+mybatis+jQuery easyUI案例

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/cor

Spring+SpringMVc+Mybatis實現數據庫查詢

java代碼 格式 jdb web.xml配置 set ransac load idle name 大家好,本篇博客小Y將會給大家帶來一篇SSM框架實現數據查詢的Demo,使用的數據庫是Mysql,Server是TomCat.現在的SSM整合非常流行,因為springm

整合 Spring + SpringMVC + MyBatis

provide star 實現 per ng- 獲取自增 check fas manage < 一 > POM 配置文件 ( 如果出現 JAR 包 引入錯誤, 請自行下載 ) <project xmlns="http://maven.apach

Spring+SpringMVC+MyBatis深入學習及搭建(三)——MyBatis全局配置文件解析

保持 nbsp 延遲加載 行為 span 方便 doc ima actor 轉載請註明出處:http://www.cnblogs.com/Joanna-Yan/p/6874672.html 前面有寫到Spring+SpringMVC+MyBatis深入學習及搭建(二)&

多工程:基於Maven的SSM(Spring,SpringMvc,Mybatis)整合的web工程(中)

png 開始 版本 war mage ont 右鍵 調用 web工程 上篇用了單工程創建了SSM整合的web工程(http://www.cnblogs.com/yuanjava/p/6748956.html),這次我們把上篇的單工程改造成為多模塊工程 一:創建

Spring+SpringMVC+MyBatis深入學習及搭建(四)——MyBatis輸入映射與輸出映射

指定 2.6 face 生成 shm hashmap ace and 包裝 轉載請註明出處:http://www.cnblogs.com/Joanna-Yan/p/6878529.html 前面有講到Spring+SpringMVC+MyBatis深入學習及搭建(三)&

Spring+SpringMVC+MyBatis深入學習及搭建(八)——MyBatis查詢緩存

idt rtu void spring 寫到 查詢緩存 修改 針對 target 轉載請註明出處:http://www.cnblogs.com/Joanna-Yan/p/6956206.html 前面講到:Spring+SpringMVC+MyBatis深入學習及搭建(

Spring+SpringMVC+MyBatis深入學習及搭建(十)——MyBatis逆向工程

cat springmvc blank 不為 tex llc root from ssi 轉載請註明出處:http://www.cnblogs.com/Joanna-Yan/p/6973266.html 前面講到:Spring+SpringMVC+MyBatis深入學習及

Spring+SpringMVC+MyBatis深入學習及搭建(十一)——SpringMVC架構

框架 ppi spring框架 edit 不同的 com get request html 轉載請註明出處:http://www.cnblogs.com/Joanna-Yan/p/6985816.html 前面講到:Spring+SpringMVC+MyBatis深入學習

Spring+SpringMVC+MyBatis深入學習及搭建(十四)——SpringMVCMyBatis整合

文件拷貝 conf lips glib ide doc from ive body 轉載請註明出處:http://www.cnblogs.com/Joanna-Yan/p/7010363.html 前面講到:Spring+SpringMVC+MyBatis深入學習及搭建(

SSM:spring+springmvc+mybatis框架中的XML配置文件功能詳細解釋

con initial -m and 整理 .get 尺寸 internal 頁面 SSM:spring+springmvc+mybatis框架中的XML配置文件功能詳細解釋 2016-04-14 23:40 13030人閱讀 評論(2) 收藏 舉報

spring+springmvc+mybatis詳細運轉流程

har pop color bits overflow one tom common jdbc spring+springmvc+mybatis詳細運轉流程 2016-04-14 23:38 1892人閱讀 評論(0) 收藏 舉報 分類: SSM

Spring+SpringMVC+MyBatis深入學習及搭建(二)——MyBatis原始Dao開發和mapper代理開發

oid 方法註入 內部 需要 com 配置文件信息 lec lang auth 前面有寫到Spring+SpringMVC+MyBatis深入學習及搭建(一)——MyBatis的基礎知識。MybatisFirst中存在大量重復的代碼。這次簡化下代碼: 使用MyBatis開發

Spring+SpringMVC+MyBatis深入學習及搭建(四)——MyBatis輸入映射與輸出映射(轉發同上)

resultmap 根據 except 就會 ash 用戶名 mvc html like 原地址:http://www.cnblogs.com/shanheyongmu/p/7121556.html 1. 輸入映射 通過parameterType指定輸入參數的類型,類型可

SSM框架Spring+SpringMVC+MyBatis——詳細整合教程

servle aps files framework l數據庫 建立 blank onf pin 摘要: 包括SQL Maps和Data Access Objects(DAO)MyBatis 消除了幾乎所有的JDBC代碼和參數的手工設置以及結果集的... 摘要:

Spring-SpringMVC-Mybatis整合的步驟

read oot exceptio img gda gif force system 緩存 1.導入jar包   1.1 spring面向切面jar包     com.springsource.net.sf.cglib-2.2.0.jar     com.spring

4.IDEA用maven新建spring+springmvc+mybatis的web工程

測試 center -m 支持 書寫 size poj web 訪問 4.IDEA新建maven+springmvc的web工程 1.新建web工程 2.導入框支持 3.配置web.xml 4.配置spring.xml 5.配置spring-mvc.xml 6.配置spri