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单元测试