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

进入这个网站网站建设捌金手指专业8

进入这个网站,网站建设捌金手指专业8,福鼎网站建设培训,专业做家居的网站有哪些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.huolong8.cn/news/468612/

相关文章:

  • 滨海网站建设公司企业网站的设计
  • 个人建网站怎么赚钱kindergarten wordpress theme
  • 广州网站优化哪家快seo优化推广多少钱
  • 外贸网站推广平台wordpress fifth
  • 杭州外贸网站建设公司开源网站搭建
  • 潍坊装饰网站建设电脑培训班零基础网课
  • 廊坊网站建设开发创网中国的网站
  • 做的精美的门户网站推荐哪个网站免费h5模板多
  • 国外 外贸 网站 源码深圳网站网页制作公司
  • 网站项目怎么做合肥百度团购网站建设
  • 云智网站建设公司专业零基础网站建设教学培训
  • 二手交易网站建设方案wap网站开发实例
  • 网站开发模式名词电商网站数据中心建设方案
  • 美容养生连锁东莞网站建设国外版抖音tiktok
  • 高端做网站苏州新区网站制作公司
  • 最受欢迎的网站开发语言市场有率建筑工程承包网址大全
  • 网站设计原理宁乡网站建设点燃网络
  • 个人网站建设服务九江开发区建设规划局网站
  • wordpress 萌主题下载郑州seo排名扣费
  • php 个人网站郑州网站推广汉狮网络
  • 求个网站好人有好报百度贴吧软件定制开发公司地址
  • 品牌高端网站设计旅游网站建设怎么做
  • 为什么用MyEclipse做网站交通局网站建设方案
  • 网站页面设计服务湖南省郴州市简介
  • app比网站的优势wordpress数据库导入
  • 网站 维护费用深圳网站排名怎么做
  • 好用的快速网站建设平台企业邮箱要收费的吗
  • 廊坊优化网站排名如何快速的建设网站
  • 公司网站被抄袭网站推广方法的费用
  • 组建网站需多少钱国内专业网站建设公司