MyBatis进阶(一)MyBatis接口绑定

前言

      本章学习有关MyBatis接口绑定的相关知识

方法

1.概念

通过前面的学习,我们基本上掌握了XXXMapper.xml的编写方法。但是我们仍然遗留了一些问题:

1)无法像传统的DAO那样使用接口定义方法实现

2)多值传递查询等情况时,必须使用Map或者对象的方式进行参数传递

所以,MyBatis接口绑定便应运而生了!

2.配置接口绑定

既然是接口绑定,那么我们就需要进行接口的创建,接口的创建需要满足以下条件:

  • 按照官方文档的说法,最好将包名和类名起名成如xx.xx.mapper.XXXMapper的形式,用于代替之前书写的DAO包和类

  • 接口的包名类名必须要和XXXMapper.xml中的<mapper>标签的namespace相同

  • 接口中的方法名和mapper子标签(select,insert,update,delete)的id属性值相同

  • mybatis全局配置文件中配置包扫描接口以及XXXMapper.xml

3.编写测试类进行测试

package cn.edu.ccut.test;

import cn.edu.ccut.mapper.StudentMapper;
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.InputStream;

public class StudentTest {

    @Test
    public void testLoginUser(){
        SqlSession session = null;
        try {
            //获取sqlSessionFactory对象
            InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            //获取sqlSession对象
            session = sqlSessionFactory.openSession();
            StudentMapper mapper = session.getMapper(StudentMapper.class);
            boolean flag = mapper.doLogin("admin", "admin");
            if(flag){
                System.out.println("Login Success!");
            }else{
                System.out.println("Login Fail!");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //关闭连接
            session.close();
        }
    }
}

到这里简单的登录功能就完成了哦!

大家可以思考一下以前的实现方式和现在有什么不同!

之前我们使用Map或者对象实现了多参数的传递,十分的不友好。

之前我们没有像以前调用dao那样使用接口,有了接口之后,操作更加便利!

附录

一、扩展内容

1.使用param注解的方式自定义参数名称

之前,我们在mapper.xml中书写的sql中传递参数使用#{arg0}或者#{param1}的方式,如果我们使用自定义参数名该如何实现呢?

<?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代表实现类的全路径(包名+类名) -->
<mapper namespace="cn.edu.ccut.mapper.StudentMapper">
    <!-- 该处每一个标签代表一个方法(select、insert、delete、update等),
        id为方法名,
        parameterType为参数类型,
        resultType为返回值类型
    -->
    <select id="doLogin" resultType="boolean">
        select * from users where username=#{username} and password=#{password}
    </select>
</mapper>

如果直接执行测试类的话,会报如下错误:

我们需要在接口中使用@Param注解进行解决:

语法:@Param("参数名称")  方法形参

实例:使用自定义参数

package cn.edu.ccut.mapper;

import org.apache.ibatis.annotations.Param;

public interface StudentMapper {

    public boolean doLogin(@Param("username") String username,@Param("password") String password) throws Exception;

}


2.使用注解的方式替代XXXMapper.xml

这是一个很大的改动,也是一个方便的实现方式!

删除之前的StudentMapper.xml

加入如下注解:

@Select、@Insert、@Update、@Delete

package cn.edu.ccut.mapper;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;


public interface StudentMapper {

    @Select("select * from users where username=#{username} and password=#{password}")
    public boolean doLogin(@Param("username") String username,@Param("password") String password) throws Exception;

}

该代码可同样实现之前的操作!!!

一个dao的实现竟然可以做到两行代码实现登录的后台功能编写,是不是很赞!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值