Mybatis基于Mapper的动态代理机制

简介

		基于xml文件的mybatis,SQL语句常存储于一个XML文件中,而在mybatis的配置文件会使用mappers标签
来找到所有存储SQL的XML文件。
		如今dao层只是简单的调用一个SqlSession类的方法去执行持久层操作,而SqlSession类是框架中的。
实际dao层不在处理实际操作,故而可以把dao层变为接口,把这非实际的简单传递操作给予代理去执行,
保留dao层保持MVC的完整性

基本原理

	dao层方法只是传递一个参数给SqlSession方法,而SqlSession去找一个SQLID号,从而去执行持久层
操作。
	参数可以通过dao层接口抽象方法的参数去反射解析获取,
	SQLID底层会按照 接口全名+dao层接口的抽象方法名去获取。如 com.zwei.student.insertOne
	 所以这里需要我们日常保持一个Mapper文件(即存储SQL语句的XML文件)的namespace命名空间值为
对应model的类全名,每个Mapper文件也就对应每个model类信息的处理(即每个Mapper文件对应一个
数据库表),而Mapper中的每一个SQLid需保持与dao层的方法名一致
<?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.zwei.User">
	<!--namespace的值为对应dao层类全名-->
    <delete id="deleteOne">
    <!--SQL语句的id值为对应的方法名-->
        -- DELETE FROM 表名称 WHERE 列名称 = 值
        delete from user where user_id = #{user_id};
    </delete>
</mapper>

具体使用

	在Service层直接给dao赋值一个SqlSession.getMapper(参数);即可,参数为需要代理的类
上一篇:阿里终面:优秀的代码都是如何分层的?


下一篇:ssm使用全注解实现增删改查案例——EmpMapperImpl