Mapper动态代理

在前面的例子中自定义Dao接口实现类时发现了一个问题。Dao的实现类其实并没有干什么实质性的工作。它仅仅是通过SqlSession的相关API定位到映射文件mapper中相应id的SQL语句,真正对db的操作其实是由框架通过mapper中的SQL完成的。

所以现在Mybatis框架就抛弃了Dao的实现类。直接定位到映射文件的mapper中的id对应的SQL语句中。对db进行操作。这种对Dao的实现方式称为Mapper的动态代理方式…

Mapper 动态代理的方式无需程序开发人员实现Dao接口。接口是由Mybatis结合映射文件自动生成的动态代理实现的。 具体的操作步骤如下:

1.java类

package com.evecom.common;

import java.util.List;
import java.util.Map;

public interface IStudentDao {
    /**
     * 通过学生id查找相应学生信息
     * @param id 学生id
     * @return 学习实体
     */
    Student selectStudentById(int id);
    /***
     * 插入学生数据
     * @param student 学生实体
     * 方法名对应代理文件中的id
     */
    void insertStudent(Student student);
    /***
     * 通过map 封装多个查询条件
     * @param map  map
     * @return 实体数组.....
     */
}

2.mapper文件

<!-- 通过接口名可定位到映射文件mapper -->
<mapper namespace="com.evecom.common.IStudentDao">



    <select id="selectStudentById" parameterType="int" resultType="Student">
<!-- resultType 表示想要Mybatis封装成的java类..这里我在配置文件中使用了别名。 -->

        select id,name,score,hobby from student where id = #{id}

    </select>

    <insert id="insertStudent"> <!-- 此处的id对应Dao中的方法名 -->
        insert into student(id,name,score,hobby)
        values(#{id},#{name},#{score},#{hobby})
    </insert>
    </mapper>

3.调用..

    public class MybatisTest {
    private IStudentDao dao;
    private SqlSession session;
    Logger log = Logger.getLogger(log4jDemo.class);

    @Before
    public void setup() {
        session = MyBatisUtil.getSqlSession();
        dao = session.getMapper(IStudentDao.class);
    }

    @After
    public void tearDown() {
        if (session != null) {
            session.close();
        }
    }
    @Test
    public void test01() {
//    Student student = dao.selectStudentById(3);

      Student student = new Student(10, "张三", 88, "卡看书");
//   
      dao.insertStudent(student);
      session.commit(); // 不能忘记了提交会话...
//    System.out.println(student);
    }
}

除了查询不要提交会话外,其他会对数据库数据产生影响的。都应该要提交会话。因为Mybatis将自动提交默认给关闭了。。。

还有别名的设置是在config文件中
设置的 要对应编译器提示的顺序

 <!-- 设置别名  -->
 <typeAliases>
    <typeAlias type="com.evecom.common.Student" alias="Student" />
</typeAliases>

综上。就是Mapper动态代理的基本使用过程。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值