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(); } }