美文网首页
MyBatis的相应API与传统和代理开发的Dao层实现

MyBatis的相应API与传统和代理开发的Dao层实现

作者: 分布式与微服务 | 来源:发表于2023-01-04 09:13 被阅读0次

    MyBatis的相应API

    1、SqlSession工厂构建器SqlSessionFactoryBuilder

    常用API:SqlSessionFactory build(InputStream inputStream)

    通过加载mybatis的核心文件的输入流的形式构建一个SqlSessionFactory对象

    其中,mybatis-config.xml是类加载器的路径,在maven工程下就是resource资源下,Resources工具类,这个类在org.apache.ibatis.io包中。Resource类帮助你从类路径下、文件系统或一个webURL中加载资源文件。

    sqkSessionFactory有多个方法创建SqlSession实例,常用的有两个

    2、SqlSession会话对象

    SqlSession实例在MyBatis是非常强大的一个类,在这里会看到所有执行语句、提交或回滚事务和获取映射实例的方法有


    操作事务的方法主要有


    Mybatis的Dao层实现

    1、传统开发方式-编写UserDao接口

    测试编写UserDao接口
    controller包下UserController类下

    package com_Dao.controller;
     
    import com_Dao.service.Impl.UserServiceImpl;
    import com_Dao.service.UserService;
    import com_mybatis.pojo.User;
     
    import java.io.IOException;
    import java.util.List;
     
    public class UserController {
        public static void main(String[] args) throws IOException {
            UserService userService=new UserServiceImpl();
            List<User> userList = userService.findAll();
            System.out.println(userList);
        }
     
    }
    

    service包下UserService下

    接口

    package com_Dao.service;
     
    import com_mybatis.pojo.User;
     
    import java.io.IOException;
    import java.util.List;
     
    public interface UserService {
     
     public List<User> findAll() throws IOException;
    }
    

    实现类下

    package com_Dao.service.Impl;
     
    import com_Dao.Dao.Impl.UserDaoImpl;
    import com_Dao.Dao.UserDao;
    import com_Dao.service.UserService;
    import com_mybatis.pojo.User;
     
    import java.io.IOException;
    import java.util.List;
     
    public class UserServiceImpl implements UserService {
     UserDao userDao=new UserDaoImpl();
        @Override
        public List<User> findAll() throws IOException {
            return userDao.findAll();
        }
    }
    

    dao包下的UserDao下

    接口下

    package com_Dao.Dao;
     
    import com_mybatis.pojo.User;
     
    import java.io.IOException;
    import java.util.List;
     
    public interface UserDao {
        public List<User> findAll() throws IOException;
    }
    

    实现类下

    package com_Dao.Dao.Impl;
     
    import com_Dao.Dao.UserDao;
    import com_mybatis.pojo.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 java.io.IOException;
    import java.io.InputStream;
    import java.util.List;
     
    public class UserDaoImpl implements UserDao {
        @Override
        public List<User> findAll() throws IOException {
     
            //获得核心配置文件
            InputStream resourceAsFile = Resources.getResourceAsStream("sqlMapConfig.xml");
            //获得session工厂对象
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsFile);
            //获得session会话对象
            SqlSession sqlSession = sqlSessionFactory.openSession();
            //执行操作 参数:namespace+id
            List<User> userList = sqlSession.selectList("userMapper.findAll");
            return userList;
        }
    }
    

    其他文件,如sqlMapConfig.xml和UserMapper.xml等中的配置和之前的一致

    运行结果


    2、代理开发方式

    介绍

    采用Mybatis的电路考法方式实现Dao层的开发,这种方式是我们进入企业的主流。

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

    Mapper.xml文件中的namespace与mapper接口的全限定名相同
    Mapper接口方法名和Mapperxml中定义的每个statement的id相同
    Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同
    Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同

    规范图示对应


    代码测试代理开发
    UserDao下

    package com_Dao_DaiLi.Dao;
    import com_mybatis.pojo.User;
    import java.io.IOException;
     
    public interface  UserDao {
        public User findById(int id) throws IOException;
    }
    

    service包下

    package com_Dao_DaiLi.service;
     
    import com_Dao_DaiLi.Dao.UserDao;
    import com_mybatis.pojo.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 java.io.IOException;
    import java.io.InputStream;
     
    public class ServiceTest {
        public static void main(String[] args) throws IOException {
            InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
            SqlSession sqlSession = sqlSessionFactory.openSession();
     
            UserDao mapper = sqlSession.getMapper(UserDao.class);
            User user = mapper.findById(1);
            System.out.println(user);
     
        }
    }
    

    UserMapper1.xml下

    <?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="com_Dao_DaiLi.Dao.UserDao">
     
     
    <!--根据id进行查询-->
        <select id="findById" parameterType="int" resultType="user">
            select *from user where id=#{id}
        </select>
     
     
     
    </mapper>
    

    还需注意将sqlMapConfig.xml下加载UserMapper1.xml下


    运行结果

    相关文章

      网友评论

          本文标题:MyBatis的相应API与传统和代理开发的Dao层实现

          本文链接:https://www.haomeiwen.com/subject/vhnmortx.html