• MyBatis学习:实现dao层接口,调用类的方法以执行SQL


    1、本篇博客的背景和目的

    目前我本人正在学习MyBatis框架,在原先了解并且懵懵懂懂使用的基础上,开始系统正式的学习。目前已经阐述了MVC架构模式和三层架构,明晰了在Web项目中的普遍编码层次,认识了框架,回顾了JDBC连接数据库,介绍了MyBatis框架,初步建立了使用MyBatis和MySQL的Maven项目,简单解释了STDOUT_LOGGING日志和INSERT语句手动提交事务,记录了MyBatis中#占位符的使用方法,回顾了MyBatis执行SQL语句的过程和使用到的一些重要类和接口,记录了将固定化的代码整合到一个工具类MyBatisUtil中,以减少代码量。本篇博客记录一下dao层接口的实现以及为什么要实现它。

    2、我的上一篇博文

    我上一篇博文记录的是工具类MyBatisUtil的实现,用以简化代码量,实现高内聚低耦合;一处修改,处处生效。链接如下所示:

    MyBatis学习:创建工具类MyBatisUtil——整合简化代码量_你是我的日月星河的博客-CSDN博客icon-default.png?t=M666https://blog.csdn.net/weixin_46281472/article/details/126064364

    3、为什么要实现dao层接口。

    上一篇博文中的代码,里面有一个dao层的接口,之所以写这个接口,是因为在今后的实际开发中,写dao层的接口是编程规范,是必须写的。但是,实际上,上一篇博文的代码中,dao层接口是没有实际作用的,也就是可以没有。

    上一篇博文的代码中,我们执行SQL语句的时候,需要在业务逻辑代码中给出要执行的SQL语句的“地址”,然后使用由MyBatisUtil类的方法得到的SqlSession对象的方法执行SQL语句,这明显还是很麻烦的啊!!

    我们想要的是:直接调用dao层类的方法,调用某一个方法,就可以直接执行某一个SQL语句,然后得到返回结果。这也是dao层设计的初衷

    4、项目代码文件结构

    相比于上一篇博文的项目结构,项目在dao包下面新建了impl包,写了继承StudentDao接口的类,会在这个类里面写执行SQL语句的代码,方便后面可以直接在业务逻辑类中调用。

    5、实现dao层StudentDao接口的StudentDaoImpl类的代码

    代码如下所示:

    1. package com.dcy.dao.impl;
    2. import com.dcy.dao.StudentDao;
    3. import com.dcy.domain.Student;
    4. import com.dcy.utils.MyBatisUtil;
    5. import org.apache.ibatis.session.SqlSession;
    6. import java.util.List;
    7. public class StudentDaoImpl implements StudentDao {
    8. @Override
    9. public Student selectById(Integer id) {
    10. SqlSession sqlSession= MyBatisUtil.getSqlSession();
    11. String SqlId="com.dcy.dao.StudentDao.selectById";
    12. Student student=sqlSession.selectOne(SqlId,"1001");
    13. sqlSession.close();
    14. return student;
    15. }
    16. @Override
    17. public List selectStudents() {
    18. SqlSession sqlSession=MyBatisUtil.getSqlSession();
    19. String SqlId="com.dcy.dao.StudentDao.selectStudents";
    20. List students=sqlSession.selectList(SqlId);
    21. sqlSession.close();
    22. return students;
    23. }
    24. @Override
    25. public int insertStudent(Student student) {
    26. SqlSession sqlSession=MyBatisUtil.getSqlSession();
    27. String SqlId="com.dcy.dao.StudentDao.insertStudent";
    28. int i = sqlSession.insert(SqlId, student);
    29. sqlSession.close();
    30. return i;
    31. }
    32. }

     代码比较简单,每一个方法都是调用了工具类MyBatisUtil的方法,获得SqlSession对象以后,执行对应的SQL语句,然后返回结果。

    6、在Main方法中测试

    上面实现dao层的接口以后,我们在Main方法中进行测试,代码如下:

    1. package com.dcy;
    2. import com.dcy.dao.impl.StudentDaoImpl;
    3. import com.dcy.domain.Student;
    4. import java.util.List;
    5. public class starter02 {
    6. public static void main(String[] args) {
    7. StudentDaoImpl studentDao=new StudentDaoImpl();
    8. List students = studentDao.selectStudents();
    9. System.out.println(students);
    10. }
    11. }

    执行结果如下图所示:

     7、我的下一篇博文

  • 相关阅读:
    SpringMVC-CRUD与文件上传、文件下载
    HDFS 分布式环境搭建
    SLAM从入门到精通(ROS和底盘Stm32的关系)
    5G受质疑在于它在物联网和自动驾驶等新兴技术的应用不如预期
    新版selenium4.0 + Python使用详解
    B. Catching Cheaters(最长公共子序列变形)
    操作系统有哪些结构?
    【MySQL 使用秘籍】克隆数据表、保存查询数据至数据表以及创建临时表
    Linux centos7配置JDK环境
    浅谈当下7个网页设计趋势 优漫动游
  • 原文地址:https://blog.csdn.net/weixin_46281472/article/details/126068525