一、概述

    使用接口代理开发,可以不用写接口的实现类,而采用的是MapperFactoryBean代理的实现类。

     * 接口代理方式开发,遵循四大原则
     * 1.方法名 == mapper.xml的id名
     * 2.返回值类型 == mapper.xml文件的resultType,或resultMap
     * 3.形参 == mapper.xml的入参 parameterType
     * 4.接口名 == mapper.xml的namespace

 

二、文件概况

三、代码

  1.applicationContext.xml

  

<?xml version="1.0" encoding="UTF-8"?>
<beans 
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation=
    "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd 
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">



<!-- 数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
    <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/>
    <property name="username" value="scott"/>
    <property name="password" value="orcl"/>
</bean>

<!-- sqlSessionFactoryBean工厂 -->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="configLocation" value="sqlMapConfig.xml"/>
</bean>

<!-- DeptDao接口的代理类 -->
<bean id="deptDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
    <property name="mapperInterface" value="com.cissst.it.dept.dao.DeptDao"></property>
    <property name="sqlSessionFactory" ref="sqlSessionFactoryBean"/>
</bean>

<!-- EmpDao接口的代理类 -->
<bean id="empDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
    <property name="mapperInterface" value="com.cissst.it.emp.dao.EmpDao"></property>
    <property name="sqlSessionFactory" ref="sqlSessionFactoryBean"/>
</bean>

</beans>

  2.sqlMapConfig.xml

<?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>

<typeAliases>
    <typeAlias type="com.cissst.it.emp.entity.Emp" alias="Emp"/>
</typeAliases>
<mappers>
    <mapper resource="com/cissst/it/dept/dao/DeptDao.xml"/>
    <mapper resource="com/cissst/it/emp/dao/EmpDao.xml"/>
</mappers>
</configuration>

  3.接口.java

package com.cissst.it.emp.dao;

import java.util.List;

import com.cissst.it.emp.entity.Emp;

public interface EmpDao {

    public List<Emp> findEmpByDeptno(Integer deptno);
}

  4.mapper.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">


<mapper namespace="com.cissst.it.emp.dao.EmpDao">
    <select id="findEmpByDeptno" parameterType="Integer" resultType="Map">
        select * from Emp where deptno = #{id}
    </select>
</mapper>

  5.测试类

package com.cissst.it.test;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.cissst.it.dept.dao.DeptDao;
import com.cissst.it.dept.entity.Dept;
import com.cissst.it.emp.dao.EmpDao;
import com.cissst.it.emp.entity.Emp;
public class Main {
    @SuppressWarnings("resource")
    public static void main(String[] args) {
        
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        //查找10号部门信息
        DeptDao obj1 = (DeptDao) context.getBean("deptDao");
        Dept dept = obj1.findByDeptno(10);
        System.out.println(dept);
        
        
        //查询部门为10号的所有员工信息
        EmpDao obj2 = (EmpDao) context.getBean("empDao");
        List<Emp> list = obj2.findEmpByDeptno(10);
        System.out.println(list);
    }
}