Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说MyBatis原理解析,希望能够帮助你!!!。
参考自:
MyBatis原理分析(通俗易懂)_Coder Wang-CSDN博客_mybatis原理
从源码一层一层进行分析,写得清晰易懂。我再这里就不赘述了,就写一下自己的大白话总结吧。
Mybatis存在的全部意义在于:将开发者从繁琐的JDBC API中解放出来,开发者不需要亲自去调用API去做:获取Connection,构造Statement,执行sql,然后将ResultSet放入结果对象中。这些Mybatis都做了,开发者只需要制订接口(也就说准备好元数据)即可,mybatis会根据这些必要的元数据转化为具体的JDBC操作,然后与数据库进行交互。
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操作。
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
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇
已是最后文章
下一篇
已是最新文章