简介
基于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(参数);即可,参数为需要代理的类