当前位置: 首页 > news >正文

普洱市网站建设_网站建设公司_数据备份_seo优化

母婴用品购物网站制作,电商网站需要多少钱,天天向上做图网站,微网站 地图Mybatis执行原理 1.获取SqlSessionFactory2.创建SqlSession3.创建Mapper、执行SQL MyBatis 是一款优秀的持久层框架#xff0c;MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息#xff0c;将接口和… Mybatis执行原理 1.获取SqlSessionFactory2.创建SqlSession3.创建Mapper、执行SQL MyBatis 是一款优秀的持久层框架MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。 Mybatis中的mapper接口并没有具体实现那么他是如何执行SQL的 mybatis-config.xml配置 !-- mybatis-config.xml -- ?xml version1.0 encodingUTF-8 ? !DOCTYPE configuration PUBLIC -//mybatis.org//DTD Config 3.0//EN http://mybatis.org/dtd/mybatis-3-config.dtd configurationenvironments defaultdevelopmentenvironment iddevelopment!-- 使用jdbc事务管理 --transactionManager typeJDBC /!-- 数据库连接池 --dataSource typePOOLEDproperty namedriver valuecom.mysql.jdbc.Driver /property nameurlvaluejdbc:mysql://127.0.0.1:3306/demo?characterEncodingutf8/property nameusername value /property namepassword value //dataSource/environment/environments!-- 加载mapper.xml --mappers!-- package name --mapper resourcemapper/DemoMapper.xml/mapper/mappers /configuration从一个简单的mybatis示例开始源码分析 public static void main(String[] args) throws Exception {String resource mybatis-config.xml;InputStream inputStream Resources.getResourceAsStream(resource);//创建SqlSessionFacorySqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession sqlSessionFactory.openSession();//获取MapperDemoMapper mapper sqlSession.getMapper(DemoMapper.class);MapString,Object map new HashMap();map.put(id,1);System.out.println(mapper.selectAll(map));sqlSession.close(); }1.获取SqlSessionFactory SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(inputStream);new SqlSessionFactoryBuilder().build()方法得到SqlSessionFactory实例并解析mybatis-config.xml文件configuration节点数据源配置及mapper配置到Configuration对象Configuration是SqlSessionFactory的一个属性。 public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) {try {XMLConfigBuilder parser new XMLConfigBuilder(inputStream, environment, properties);return build(parser.parse());} catch (Exception e) {throw ExceptionFactory.wrapException(Error building SqlSession., e);} finally {ErrorContext.instance().reset();try {if (inputStream ! null) {inputStream.close();}} catch (IOException e) {// Intentionally ignore. Prefer previous error.}} }public SqlSessionFactory build(Configuration config) {return new DefaultSqlSessionFactory(config); } XMLConfigBuilder解析配置并组装SQL语句 public Configuration parse() {if (parsed) {throw new BuilderException(Each XMLConfigBuilder can only be used once.);}parsed true;// 解析mybatis-config.xml文件configuration节点数据源配置及mapper配置到Configuration对象parseConfiguration(parser.evalNode(/configuration));return configuration; }private void parseConfiguration(XNode root) {try {// issue #117 read properties firstpropertiesElement(root.evalNode(properties));Properties settings settingsAsProperties(root.evalNode(settings));loadCustomVfs(settings);loadCustomLogImpl(settings);typeAliasesElement(root.evalNode(typeAliases));pluginElement(root.evalNode(plugins));objectFactoryElement(root.evalNode(objectFactory));objectWrapperFactoryElement(root.evalNode(objectWrapperFactory));reflectorFactoryElement(root.evalNode(reflectorFactory));settingsElement(settings);// read it after objectFactory and objectWrapperFactory issue #631environmentsElement(root.evalNode(environments));databaseIdProviderElement(root.evalNode(databaseIdProvider));typeHandlerElement(root.evalNode(typeHandlers));// 读取mapper配置mapperElement(root.evalNode(mappers));} catch (Exception e) {throw new BuilderException(Error parsing SQL Mapper Configuration. Cause: e, e);} }2.创建SqlSession SqlSession sqlSession sqlSessionFactory.openSession();通过SqlSession工厂类创建SqlSession并增加事务处理、执行器等。这里将SqlSessionFactory中的Environment传递给了SqlSessionEnvironment中包含DataSource用于创建数据库连接。 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);return 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();}}3.创建Mapper、执行SQL DemoMapper mapper sqlSession.getMapper(DemoMapper.class); public T T getMapper(ClassT type, SqlSession sqlSession) {final MapperProxyFactoryT mapperProxyFactory (MapperProxyFactoryT) knownMappers.get(type);if (mapperProxyFactory null) {throw new BindingException(Type type is not known to the MapperRegistry.);}try {return mapperProxyFactory.newInstance(sqlSession);} catch (Exception e) {throw new BindingException(Error getting mapper instance. Cause: e, e);} }在XMLConfigBuilder.parseConfiguration()中configuration.addMapper(mapperInterface)方法对knownMappers初始化将所有Mapper的代理类放入knownMappers。 knownMappers.put(type, new MapperProxyFactory(type));sqlSession.getMapper()从knownMappers获取代理类对象。 mapper.selectAll(map);代理类通过MapperProxy.invoke()方法执行自定义代理类会执行cachedInvoker()方法。 public class MapperProxyT implements InvocationHandler, Serializable {Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {try {if (Object.class.equals(method.getDeclaringClass())) {return method.invoke(this, args);}return cachedInvoker(method).invoke(proxy, method, args, sqlSession);} catch (Throwable t) {throw ExceptionUtil.unwrapThrowable(t);}} }最终通过mapperMethod.execute()方法执行对应的SQL语句。 private static class PlainMethodInvoker implements MapperMethodInvoker {private final MapperMethod mapperMethod;public PlainMethodInvoker(MapperMethod mapperMethod) {this.mapperMethod mapperMethod;}Overridepublic Object invoke(Object proxy, Method method, Object[] args, SqlSession sqlSession) throws Throwable {return mapperMethod.execute(sqlSession, args);} }
http://www.ihoyoo.com/news/3508.html

相关文章:

  • 广州网站外包肇庆正规网页设计培训试听
  • 专业网站有哪些平台全国工商企业信息查询系统
  • 小企业网站建设论文网页制作基础教程图片
  • 澄迈住房和城乡建设局网站腾讯云10g数字盘做网站够么
  • 自己做网站不推广wordpress用户名在那个数据表
  • 手机上网自动跳转网站如何用dw做网站框架
  • 北京公司做网站抖音电脑网页版入口
  • win8风格网站 源码网站搭建的策略与方法
  • 网站开发相关职业岗位网站大全app下载
  • 做线上兼职的网站手机端seo
  • 网站在线做照片网页设计与网站建设课后习题答案
  • 空间查看网站网站访问量来源
  • 做银行应该关注的网站wordpress时钟
  • 网站建设创意公司帮别人做钓鱼网站吗
  • 免费无版权图片素材网站昌吉做58网站的
  • seo技术服务seo网站排名的软件
  • 电脑做网站端口映射网页实训报告总结1000字
  • 永久免费个人网站wordpress博客注册
  • 网站内链有什么用用织梦做模板网站
  • 如何做英文网站的中文网优秀网站的特点
  • 龙川县建设网站挂机宝做网站可以吗
  • 网站后台开发步骤商贸公司寮步网站建设极致发烧
  • 中国建设银行网站运营模式软件商店下载安装免费
  • 昆明网站建设 昆明光硕郑州住房城乡建设官网
  • 网站外包wordpress phpadmin
  • 做网站 接活wordpress 免费自媒体
  • 注册网站怎么注册浏阳网站建设公司
  • 网站到期是否能换服务商软件下载网站cms
  • 网站开发需要的语言经验丰富的网站制作公司
  • 网站建设目标 优帮云设计logo的软件有哪些