MyBatis详解如何实现Dao层接口

 更新时间:2022年04月14日 18:49:25   作者:Tangable22  
MyBatis允许只声明一个dao接口,而无需写dao实现类的方式实现数据库操作。前提是必须保证Mapper文件中的<mapper>标签的namespace属性值必须要和dao接口的类路径一致,MyBatis容器会自动通过动态代理生成接口的实现类

传统开发方式

编写UserDao接口

public interface UserMapper {
    public List<User> findAll() throws IOException;
}

编写UserDaompl实现

public class UserMapperImp implements UserMapper {

    @Override
    public List<User> findAll() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = build.openSession();

        List<User> users=sqlSession.selectList("User.findAll");
        sqlSession.close();
        return users;
    }
}

传统测试方法

public class ServiceCode {
    public static void main(String[] args) throws IOException {
        UserMapper userMapper = new UserMapperImp();
        List<User> all = userMapper.findAll();

        System.out.println(all);
    }
}

我们发现使用传统的开发方式,每次都要实现接口的代码编写,这样也有很多的代码冗余,也是相当的繁琐,下面,MyBatis为我们提供了代理开发的方法,我们只需要提供接口,MyBatis框架就可以根据接口定义为我们实现。

代理开发方法

代理开发方式介绍

采用MyBatis的代理开发方式实现Dao层的开发,这种方式是我们后面进入企业的主流。

Mapper接口开发方法只需要程序员编写Mapper接口(相当与Dao接口),由MyBatis框架根据接口定义创建接口的动态代理对象,代理对象方法体同上边Dao接口实现类方法。

Mapper接口开发需要遵循一下规范:

  • 1、Mapper.xml文件中的namespacemapper接口的全限定名相同
  • 2、Mapper接口方法名和Mapper.xml中定义的每个Statement的id相同
  • 3、Mapper接口方法的输入参数类型和Mapper.xml中定义的每个sql的parameterType的类型相同
  • 4、Mapper接口方法的输出参数类型和Mapper.xml中定义的每个sql的resultType的类型相同

编写UserMapper接口

在这里插入图片描述

测试代理方法

接口:

public interface UserMapper {
    public List<User> findAll() ;
}

测试代码:

public class Test {
    public static void main(String[] args) throws Exception {
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        SqlSessionFactory sqlSessionFactory = new 				    				SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //获得MyBatis框架生产的UserMapper接口的实现类
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<user> all = mapper.findAll();

        for (user user : all) {
            System.out.println(user);
        }
    }

根据id查询:

接口:

public interface UserMapper {
    //根据id查询
    public User findById(int id);
}

测试:

UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user=mapper.findById(2);
System.out.println(user);

到此这篇关于MyBatis详解如何实现Dao层接口的文章就介绍到这了,更多相关MyBatis Dao层接口内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java8中Optional的使用方法详解

    Java8中Optional的使用方法详解

    这篇文章主要介绍了Java8中Optional的使用方法详解,传统的写代码方式经常会遇到NullPointerException,这就需要我们在代码中经常判空,而判空的写法又会显得很累赘,这里就可以用到Optional来简化代码,需要的朋友可以参考下
    2024-01-01
  • SpringBoot图文并茂讲解登录拦截器

    SpringBoot图文并茂讲解登录拦截器

    其实spring boot拦截器的配置方式和springMVC差不多,只有一些小的改变需要注意下就ok了,下面这篇文章主要给大家介绍了关于如何在Springboot实现登陆拦截器功能的相关资料,需要的朋友可以参考下
    2022-06-06
  • Java IO之流的分类详解

    Java IO之流的分类详解

    这篇文章主要为大家介绍了Java IO之流的分类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • Springboot整合log4j2日志全解总结

    Springboot整合log4j2日志全解总结

    这篇文章主要介绍了Springboot整合log4j2日志全解总结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • javax.persistence中@Column定义字段类型方式

    javax.persistence中@Column定义字段类型方式

    这篇文章主要介绍了javax.persistence中@Column定义字段类型方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • Springboot2 配置AOP日志的方法步骤

    Springboot2 配置AOP日志的方法步骤

    这篇文章主要介绍了Springboot2 配置AOP日志的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • Idea如何导入一个SpringBoot项目的方法(图文教程)

    Idea如何导入一个SpringBoot项目的方法(图文教程)

    这篇文章主要介绍了Idea如何导入一个SpringBoot项目的方法(图文教程),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • NIO深入理解FileChannel使用方法原理

    NIO深入理解FileChannel使用方法原理

    这篇文章主要为大家介绍了NIO深入理解FileChannel的源码示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • SpringBoot MDC全局链路最新完美解决方案

    SpringBoot MDC全局链路最新完美解决方案

    MDC 在 Spring Boot 中的作用是为日志事件提供上下文信息,并将其与特定的请求、线程或操作关联起来,通过使用 MDC,可以更好地理解和分析日志,并在多线程环境中确保日志的准确性和一致性,这篇文章主要介绍了SpringBoot MDC全局链路解决方案,需要的朋友可以参考下
    2023-08-08
  • 使用Java注解和反射实现JSON字段自动重命名

    使用Java注解和反射实现JSON字段自动重命名

    这篇文章主要介绍了如何使用Java注解和反射实现JSON字段自动重命名,文中通过代码示例和图文介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-08-08

最新评论