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类的代码

代码如下所示:

package com.dcy.dao.impl;

import com.dcy.dao.StudentDao;
import com.dcy.domain.Student;
import com.dcy.utils.MyBatisUtil;
import org.apache.ibatis.session.SqlSession;

import java.util.List;

public class StudentDaoImpl implements StudentDao {

    @Override
    public Student selectById(Integer id) {
        SqlSession sqlSession= MyBatisUtil.getSqlSession();
        String SqlId="com.dcy.dao.StudentDao.selectById";
        Student student=sqlSession.selectOne(SqlId,"1001");
        sqlSession.close();
        return student;
    }

    @Override
    public List<Student> selectStudents() {
        SqlSession sqlSession=MyBatisUtil.getSqlSession();
        String SqlId="com.dcy.dao.StudentDao.selectStudents";
        List<Student> students=sqlSession.selectList(SqlId);
        sqlSession.close();
        return students;
    }

    @Override
    public int insertStudent(Student student) {
        SqlSession sqlSession=MyBatisUtil.getSqlSession();
        String SqlId="com.dcy.dao.StudentDao.insertStudent";
        int i = sqlSession.insert(SqlId, student);
        sqlSession.close();
        return i;
    }
}

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

6、在Main方法中测试

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

package com.dcy;

import com.dcy.dao.impl.StudentDaoImpl;
import com.dcy.domain.Student;

import java.util.List;

public class starter02 {
    public static void main(String[] args) {
        StudentDaoImpl studentDao=new StudentDaoImpl();
        List<Student> students = studentDao.selectStudents();
        System.out.println(students);
    }
}

执行结果如下图所示:

 7、我的下一篇博文

猜你喜欢

转载自blog.csdn.net/weixin_46281472/article/details/126068525