mybatis面向接口編程

mybtis的面向接口編程的作用就是將所有的數據庫操作交由mapper的配置來完成,而不需要人工的在dao層寫數據庫操作的代碼;

步驟:

一、編寫javaBean對象

package com.hsk.mybatis.bean;

public class DeptBean {

	private String deptCode;
	private String deptName;
	private String cmpyCode;
	public String getDeptCode() {
		return deptCode;
	}
	public void setDeptCode(String deptCode) {
		this.deptCode = deptCode;
	}
	public String getDeptName() {
		return deptName;
	}
	public void setDeptName(String deptName) {
		this.deptName = deptName;
	}
	public String getCmpyCode() {
		return cmpyCode;
	}
	public void setCmpyCode(String cmpyCode) {
		this.cmpyCode = cmpyCode;
	}
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return deptName+"["+deptCode+"]"+cmpyCode;
	}
}

二、編寫dao層的部門接口方法

package com.hsk.mybatis.dao;

import java.util.List;

import com.hsk.mybatis.bean.DeptBean;

public interface DeptDao {

	//添加部門
	public void addDept(DeptBean deptBean);
	//獲取部門
	public List<DeptBean> getDeptList();
	//根據部門編碼獲取指定部門
	public DeptBean getDeptByCode(String deptCode);
	//根據部門名稱模糊查詢部門信息
	public List<DeptBean> getDeptByName(String deptName);
	//更新部門信息
	public void updateDept(DeptBean deptBean);
}

三、配置deptMapper.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命名空間對sql分類化管理,隔離不同表的sql語句 -->
<mapper namespace="com.hsk.mybatis.dao.DeptDao">

	<!-- 配置結果集字段和javabean字段對應關係 -->
	<resultMap id="deptMap" type="com.hsk.mybatis.bean.DeptBean">
        <id property="deptCode" column="DEPT_CODE" />
        <result property="deptName" column="DEPT_NAME"/>
        <result property="cmpyCode" column="CMPY_CODE"/>
    </resultMap>
	<!--
	 統一命名空間下id唯一 
	parameterType輸入參數類型可以是java簡單的數據類型也可以是java對象,這裏指定string
	#{}表示佔位符
	#{userCode}其中userCode爲輸入參數,參數名稱爲userCode
	resultMap指定sql輸出結果所映射的java對象,注意resultMap要配置java對象屬性與數據庫字段對應關係
	resultType指定sql輸出結果單條記錄所映射的java對象,注意resultType配置的java類的屬性需要與數據庫字段名稱一致
	-->
   <select id="getDeptByCode" parameterType="String" resultMap="deptMap">
       SELECT DEPT_CODE,DEPT_NAME,CMPY_CODE FROM SY_ORG_DEPT WHERE DEPT_CODE=#{deptCode}
   </select>
   
   <!-- 
   	根據用戶名稱查找對應的用戶集合
   	${}表示拼接sql串,將傳參不加修飾的拼接在sql中,value表示簡單類型的傳參值
   	${}會引起sql注入,如傳入 ' OR 1=1 OR '
   	#{}佔位符,{}中可以寫value或者其他值。根據傳參類型修飾傳參後拼接在sql中,如傳入整型結果就是a=1,字符串就是a='1'
   	${value}:接收輸入的傳參內容,如果是簡單的傳參類型則${}中只能用value
   	#{},${}通過OGNL讀取對象的屬性值,通過  屬性.屬性.屬性.....方式獲取對象屬性值
   	一般不推薦使用${}方式獲取屬性值
      注意:#{}會將傳參拼接程指定的sql語法如a=#{name}會被轉換成a='zhangda'
      ${}會將傳參原封不動的塞進sql語句如a=${name}會被轉換成a=zhangda
    -->
   <select id="getDeptByName" parameterType="String" resultType="com.hsk.mybatis.bean.DeptBean">
   		SELECT DEPT_NAME,DEPT_CODE,CMPY_CODE FROM SY_ORG_DEPT WHERE DEPT_NAME LIKE '%${_parameter}%'
   </select>
<!--注意OGNL表達式獲取簡單類型和字符串值時傳參名必須爲_parameter否則會報錯-->
   
   <!-- 
   parameterType爲pojo(java對象)類型參數
   #{}佔位符中指定pojo屬性,接收到pojo對象屬性值後mybatis通過OGNL獲取對象屬性值
    -->
   <insert id="addDept" parameterType="com.hsk.mybatis.bean.DeptBean">
   	    insert into sy_org_dept (dept_code,dept_name,CMPY_CODE) values (#{deptCode},#{deptName},#{cmpyCode})
   </insert>
   
   <delete id="updateDept" parameterType="com.hsk.mybatis.bean.DeptBean">
   	   update sy_org_dept set dept_name=#{deptName} where dept_code=#{deptCode}
   </delete>
</mapper>

 四、mybatis核心配置文件引入deptMapper.xml

 

五、編寫測試類

package com.hsk.mybatis.test;

import java.io.Reader;
import java.util.List;

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.hsk.mybatis.bean.DeptBean;
import com.hsk.mybatis.dao.DeptDao;

public class DeptDaoTest {

	@Test
	public void testDeptDao(){
		try {
			Reader reader = Resources.getResourceAsReader("config/mybatis.xml");
			SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
			SqlSession session = factory.openSession();
			DeptDao deptDao = session.getMapper(DeptDao.class);
			System.out.println("deptdao-----"+deptDao);
			DeptBean deptBean = deptDao.getDeptByCode("24");
			System.out.println(deptBean.toString());
			List<DeptBean> dList = deptDao.getDeptByName("北京首創股份有限公司");
			System.out.println(dList.size());

			System.out.println("---add dept----");
			DeptBean dBean = new DeptBean();
			dBean.setDeptCode("000");
			dBean.setDeptName("測試部門");
			dBean.setCmpyCode("2");
			deptDao.addDept(dBean);
			dBean.setDeptName("33333");
			deptDao.updateDept(dBean);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
}

六、junit單元測試

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章