mybatis实现的基本原理
跑一个入门的demo:
先贴上主程序的测试方法
package com.example;
import com.example.dao.UserDao;
import com.example.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;
/**
* @author lianchua
* @version 1.0.0
* @ClassName Main.java
* @Description TODO
* @createTime 2019年09月24日 16:50:00
*/
public class Main {
/**
* mybatis基本查询实现
* mybatis实现的基本原理
*
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
/**
* 把mybatis的xml配置文件转换成输入流
*/
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
/**
* 利用sql的工厂建造器sqlSessionFactoryBuilder对象的build()方法得到sqlSessionFactory对象
*/
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
/**
* 工厂调用openSession()方法得到SqlSession对象
*/
SqlSession session = factory.openSession();
/**
* session对象调用getMapper()方法,传入mapper接口,得到代理的mapper实现对象
*/
UserDao mapper = session.getMapper(UserDao.class);
/**
* 代理的实现mapper对象调用具体的mapping配置文件里面的绝体findAll()方法查询,得到查询到的对象
*/
List<User> list = mapper.findAll();
/**
* 输出对象
*/
System.out.println(list);
}
}
1.读取配置文件得到输入流
/**
* 把mybatis的xml配置文件转换成输入流
*/
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
通过该对象Resource导入的包可以看到该类是阿帕奇公司的ibatis组件的io包里面类,该工具可以使用一个转换资源成流的方法getResourceAsStream(),传入一个mybatis配置文件的路径的字符串"mybatis-config.xml",可以得到一个输入流对象inputStream;
import org.apache.ibatis.io.Resources
2.得到SqlSessionFactory工厂
/**
* 利用sql的工厂建造器sqlSessionFactoryBuilder对象的build()方法得到sqlSessionFactory对象
*/
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
通过构建SqlSessionFactoryBuilder对象,调用它的build()方法,传入刚刚得到的inputStream输入流对象,就能直接得到SqlSessionFactory的实例对象factory;
3.得到SqlSession对象
/**
* 工厂调用openSession()方法得到SqlSession对象
*/
SqlSession session = factory.openSession();
通过工厂factory直接开启Session,调用openSession()方法得到SqlSession的实例对象session;
4.得到代理对象
/**
* session对象调用getMapper()方法,传入mapper接口,得到代理的mapper实现对象
*/
UserDao mapper = session.getMapper(UserDao.class);
通过调用session对象的getMapper()方法,传入mapper接口的class对象UserDao.class,得到代理对象mapper,这个代理对象就是实现了UserDao接口的代理实现类对象;
5.调用接口的方法
/**
* 代理的实现mapper对象调用具体的mapping配置文件里面的绝体findAll()方法查询,得到查询到的对象
*/
List<User