MyBatis基于Mapper(代理对象)的执行方式

MyBatis提供了SqlSession对象	
		普通方式
			dao普通类中一个普通方法---->Mapper文件(SQL)
			通过SqlSession对象执行

			dao方法中的参数通常不是自己的  (上一个层次传递过来的)
			dao方法中的执行过程不用自己写  而需要一个SqlSession执行
			

		基于Mapper(代理对象)的执行方式


			这个过程中发现Dao层次不做实质的事情
			层次是否可以省略???---->不好	保留这个层次
			给Dao配一个小弟 去完成原来Dao该做的事情(找SqlSession干活)
			
			(你们)Service业务层
				负责处理逻辑 判断 比较
			()Dao持久层----------(看代码就感觉是一个传话的人)
				我的小弟会自动的去做我之前的事情
				负责读写数据库
				(艾薇)读写数据库需要SqlSession对象
			数据库


		Service--->Dao(保留 不做事 抽象)--->Dao的小弟(Mapper代理)-->找寻SqlSession做事


		=========================================================================


		如果想要基于Mapper的方式执行
		1.Dao层次保留  Dao中的方法结构 参数 返回值 均不动 
			只是将原有的具体方法变成抽象方法  Dao具体类变成接口
		2.在Service层中获取Dao的方式发生改变
			StudentDao dao = new StudentDao();
			dao执行的过程  调用SqlSession做事("sqlid",参数);

			StudentDao dao = sqlSession.getMapper(StudentDao.class);
			dao的代理 执行过程???
			dao的代理 需要调用SqlSession做事("sqlid",参数);
			代理可以找到参数 代理相当于是原来Dao的子类 可能会有方法重写。。。
			代理如何找到sql的呢?----映射文件名字的规则
				namespace	dao的类全名一致
				标签中的id	dao的方法名字一致


public class StudentService {

    //业务层   数据处理
    //属性
    private StudentDao dao = MyUtil.getSqlSession(true).getMapper(StudentDao.class);

    //新增学生
    public void insertStudent(Student student){
        dao.insert(student);//不是我们的dao执行的 我们的dao下面的小弟(Mapper代理)执行的
    }
    //删除学生
    public void deleteStudent(Integer sid){
        dao.delete(sid);
    }
    //修改学生
    public void updateStudent(Student student){
        dao.update(student);
    }
    //查看学生
    public Student selectStudent(Integer sid){
        return dao.selectOne(sid);
    }
}

public interface StudentDao {

    //持久层   数据读写    JDBC+
    public void insert(Student student);
    public void delete(Integer sid);
    public void update(Student student);
    public Student selectOne(Integer sid);
}

<?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="dao.StudentDao">

    <insert id="insert">
        insert into student values(#{sid},#{sname},#{ssex},#{sage});
    </insert>

    <delete id="delete">
        delete from student where sid = #{sid}
    </delete>

    <update id="update">
        update student set sname = #{sname},ssex = #{ssex},sage = #{sage} where sid = #{sid}
    </update>

    <select id="selectOne" resultType="domain.Student">
        select * from student where sid = #{sid}
    </select>
</mapper>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值