200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > MyBatis源码学习之SqlSession创建

MyBatis源码学习之SqlSession创建

时间:2022-06-02 09:09:53

相关推荐

MyBatis源码学习之SqlSession创建

Java|java教程

SqlSession,MyBatis,源码

Java-java教程

MyBatis封装了JDBC操作数据库的代码,通过SqlSession来执行sql语句,那么首先来看看MyBatis是怎么创建SqlSession。

MyBatis没有托管给spring的时候,数据库的配置信息是在Configuration.xml文件里边配置的 ,测试代码如下

有券源码,vscode严格模式的插件,ubuntu备份grub,tomcat405报错,油价数据爬虫,php 生成日期,太仓seo排名好不好,简易小说网站php中文网,dedecms表单模板lzw

1 Reader reader = Resources.getResourceAsReader("Configuration.xml");

Mybatis通过SqlSessionFactoryBuilder.build(Reader reader)方法创建一个SqlSessionFactory对象 build方法的参数就是刚才的reader对象,里边包含了配置文件的所有信息,build方法有很多重载方法

vfp源码,ubuntu超级密码破解,爬虫公司怎么加盟,自学一个月php能找工作吗,北京seo战略lzw

public SqlSessionFactory build(Reader reader, String environment, Properties properties) { try { //委托XMLConfigBuilder来解析xml文件,并构建XMLConfigBuilder parser = new XMLConfigBuilder(reader, environment, properties);return build(parser.parse()); } catch (Exception e) {throw ExceptionFactory.wrapException("Error building SqlSession.", e); } finally {ErrorContext.instance().reset();try { reader.close();} catch (IOException e) { }public SqlSessionFactory build(Configuration config) { return new DefaultSqlSessionFactory(config); }

最后返回一个DefaultSqlSessionFactory对象,通过DefaultSqlSessionFactory的openSession()返回一个SqlSession对象

汇编器 源码,vscode没有路径提示,ubuntu 美化折腾,清理下 tomcat日志,爬虫的目标,php date utc,自学seo大概需要多久收录,国外商业网站源码,wordpress淘宝客模板图片lzw

public SqlSession openSession() { return openSessionFromDataSource(configuration.getDefaultExecutorType(), null, false); }private SqlSession openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit) { Transaction tx = null; try {final Environment environment = configuration.getEnvironment();final TransactionFactory transactionFactory = getTransactionFactoryFromEnvironment(environment);//通过事务工厂来产生一个事务tx = transactionFactory.newTransaction(environment.getDataSource(), level, autoCommit);//生成一个执行器(事务包含在执行器里)final Executor executor = configuration.newExecutor(tx, execType);//然后产生一个DefaultSqlSessionreturn new DefaultSqlSession(configuration, executor, autoCommit); } catch (Exception e) {//如果打开事务出错,则关闭它closeTransaction(tx); // may have fetched a connection so lets call close()throw ExceptionFactory.wrapException("Error opening session. Cause: " + e, e); } finally {//最后清空错误上下文ErrorContext.instance().reset(); } }

可以看到最后返回一个DefaultSqlSession即SqlSession对象,DefaultSqlSession中的selectOne(…) selectList(…)

selectMap(…) update(…)等方法就是真正执行要执行sql的方法

具体的执行由executor对象来执行

public void select(String statement, Object parameter, RowBounds rowBounds, ResultHandler handler) { try {MappedStatement ms = configuration.getMappedStatement(statement);executor.query(ms, wrapCollection(parameter), rowBounds, handler); } catch (Exception e) {throw ExceptionFactory.wrapException("Error querying database. Cause: " + e, e); } finally {ErrorContext.instance().reset(); } }

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。