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

1年前 (2022) 程序员胖胖胖虎阿
164 0 0

目录

  MyBatis的相应API

1、SqlSession工厂构建器SqlSessionFactoryBuilder

2、SqlSession会话对象

Mybatis的Dao层实现

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

测试编写UserDao接口

 2、代理开发方式

代码测试代理开发 


  MyBatis的相应API

1、SqlSession工厂构建器SqlSessionFactoryBuilder

常用API:SqlSessionFactory  build(InputStream inputStream)

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

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

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

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

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

2、SqlSession会话对象

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

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

 操作事务的方法主要有

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

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等中的配置和之前的一致

运行结果

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

 2、代理开发方式

介绍

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

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

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

规范图示对应

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

代码测试代理开发 

 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层实现

运行结果

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

版权声明:程序员胖胖胖虎阿 发表于 2022年11月24日 下午11:32。
转载请注明:MyBatis的相应API与传统和代理开发的Dao层实现 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...