MyBatis学习day3-Mapper动态代理dao层


之前我们已经学习了通过使用SqlSession提供的各种方法指定某一个Mapper中的sql语句进行各种各样的数据库操作,但是这样的方法并不是很方便,由于是通过字符串的形式指定各种数据库操作标签的id,所以要预先知道Mapper.xml文件中有哪些sql语句;其次调用不同Mapper中的语句时还要加不同的文件名前缀,比较繁琐,所以今天提供了一种新的方式来简化Dao层开发

1.为每个Mapper.xml文件创建对应的接口

首先我们在src下创建com.mybatis.Mapper改了改了,叫MapInterface好了,不然名字重复总感觉不太舒服,下面图还没改回来,先不用管) 包,用于创建各种Mapper接口。然后我们在这个包里面新建一个接口叫UserMapper,如下图

在这里插入图片描述

接下来我们怎么让接口与xml文件联系起来呢?我们需要在xml文件中,在mapper标签中设定namespace属性为接口的全包名,如下图(这个.java的后缀不用写奥、刚开始我搞错了)
在这里插入图片描述

2.将xml文件中的sql语句id存放到接口中

做完上述准备工作以后,我们就可以在接口中声明方法指定对应的sql语句了,声明的方法名要与对应sql语句的id相同,返回类型与参数类型也要相同,最后的UserMapper接口如下所示

package com.mybatis.Mapper;

import com.mybatis.beans.User;
import java.util.List;

public interface UserMapper {
    public User selectUserById(Integer id);
    public List<User> selectUserByName(String username);//返回多个结果时用List
    public void insertUser(User u);
    public void updateUser(User u);
    public void deleteUserById(User u);
}


3.Mapper接口的使用

接着我们就来看看这个接口是如何用来执行sql语句的;

首先我们按照常规的方式得到SqlSession实例,然后调用session的getMapper()函数,其内部会自动生成一个实现对应接口的对象实例,用xml文件中的sql语句重写接口的方法,这个时候我们就可以直接使用了,具体代码如下:

package com.mybatis.test;

import com.mybatis.Mappers.UserMapper;
import com.mybatis.beans.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class HelloMyBatis {
    //入门程序 通过ID查询用户
    @Test
    public void test() throws IOException {
        //读取配置文件
        String resource="sqlMapConfig.xml";
        InputStream in=Resources.getResourceAsStream(resource);
        //生成sqlSessionFactoryBuilder
        SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
        //创建sqlSessionFactory
        SqlSessionFactory factory=builder.build(in);
        //生产一个sqlSession
        SqlSession session=factory.openSession();


        //操作数据库
        UserMapper um=session.getMapper(UserMapper.class);
        System.out.println("条件查询");
        System.out.println("------------------");
        User u=um.selectUserById(1);
        System.out.println(u);
        System.out.println("模糊查询");
        System.out.println("------------------");
        List<User> arr=um.selectUserByName("王");
        for(User temp:arr){
            System.out.println(temp);
        }
        //另外两个方法就不展示了,类似
    }
}

最后的结果如下所示
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值