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單元測試