MyBatis原理解析

(2) 2024-05-07 12:23

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说MyBatis原理解析,希望能够帮助你!!!。

参考自:

MyBatis原理分析(通俗易懂)_Coder Wang-CSDN博客_mybatis原理

从源码一层一层进行分析,写得清晰易懂。我再这里就不赘述了,就写一下自己的大白话总结吧。

Mybatis的意义:

Mybatis存在的全部意义在于:将开发者从繁琐的JDBC API中解放出来,开发者不需要亲自去调用API去做:获取Connection,构造Statement,执行sql,然后将ResultSet放入结果对象中。这些Mybatis都做了,开发者只需要制订接口(也就说准备好元数据)即可,mybatis会根据这些必要的元数据转化为具体的JDBC操作,然后与数据库进行交互。

大概视图:

API方式:

public static void main(String[] args) {
		InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
		SqlSession sqlSession = factory.openSession();
		String name = "tom";
		List<User> list = 
 sqlSession.selectList("com.demo.mapper.UserMapper.getUserByName",params);
}

接口方式:

public static void main(String[] args) {
		//前三步都相同
		InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
		SqlSession sqlSession = factory.openSession();

		//这里不再调用SqlSession 的api,而是获得了接口对象,调用接口中的方法。
		UserMapper mapper = sqlSession.getMapper(UserMapper.class);
		List<User> list = mapper.getUserByName("tom");
}

初始化工作:

大概流程:

SqlSessionFactoryBuilder  -->  SqlSessionFactory  -->  SqlSession  -->  SqlSession执行CRUD

细化流程:

1、读取mybatis-config.xml配置文件,解析其内容为Configuration;

2、在SqlSessionFactoryBuilder中根据Configuration去创建SqlSessionFactory;

3、SqlSessionFacotry.openSession()构造SqlSession,指定了configuration, executor, autoCommit 等;

4、SqlSession用指定的executor去执行具体的CRUD操作。

执行SQL:

1、入参statement,parameter,根据statement在Configuration的mappedStatements中找到对应的MappedStatement;

2、MappedStatement根据parameter找到BoundSql;

3、获取connection,从dataSource中获取的connection,同时指定transactionIsolation, autoCommit ;

4、Connection.createStatement(),构造Statement();

5、Statement.execute(boundsql.getSql());

6、从Statement获取ResultSet,封装到结果对象中。

可以看到,其实底层调用的都是JDBC的API。

名词解释:

MappedStatement: 对应于mybatis-config.xml中的<Mappers>下的<Mapper>元素

BoundSql: 含有?的sql语句,以及parameters,以及parameterMappings

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

上一篇

已是最后文章

下一篇

已是最新文章

发表回复