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

h5做网站用什么框架快优吧seo优化

h5做网站用什么框架,快优吧seo优化,中国网站模板免费下载,公司建设包括哪些方面Mybatis 是一个流行的 Java 持久层框架,它提供了一种半自动的 SQL 映射方式,允许开发者在 Java 代码中以一种更加直观和灵活的方式来操作数据库。当你使用 Mybatis 调用 DAO 接口时,背后的工作流程大致如下: 接口定义:…

Mybatis 是一个流行的 Java 持久层框架,它提供了一种半自动的 SQL 映射方式,允许开发者在 Java 代码中以一种更加直观和灵活的方式来操作数据库。当你使用 Mybatis 调用 DAO 接口时,背后的工作流程大致如下:

  1. 接口定义:首先,你需要定义一个 DAO 接口,这个接口中会包含一些方法,这些方法对应于你想要执行的数据库操作。

  2. Mapper XML:对于 DAO 接口中的每一个方法,你需要在 Mybatis 的映射文件(通常是一个 XML 文件)中定义一个 <mapper> 标签,里面包含一个 <select><insert><update><delete> 标签,对应于你想要执行的 SQL 语句。

  3. 配置文件:在 Mybatis 的配置文件(通常是 mybatis-config.xml)中,你需要指定你的 Mapper XML 文件的位置,这样 Mybatis 才能找到并加载它们。

  4. SqlSessionFactory:Mybatis 使用 SqlSessionFactory 来创建 SqlSession 对象。SqlSessionFactory 是通过配置文件和映射文件构建的,它包含了所有必要的信息来执行 SQL 语句。

  5. SqlSession:SqlSession 是 Mybatis 中执行 SQL 语句的主要对象。它提供了执行 SQL 语句的方法,例如 selectOne、selectList、insert、update 和 delete 等。

  6. 调用 DAO 接口:当你调用 DAO 接口中的方法时,实际上是 Mybatis 的动态代理机制在起作用。Mybatis 会为 DAO 接口创建一个代理对象,当调用接口中的方法时,代理对象会拦截这些调用,然后根据方法名找到对应的 SQL 映射语句,并执行。

  7. 执行 SQL:Mybatis 通过代理对象,使用 SqlSession 来执行对应的 SQL 语句。执行完成后,SqlSession 会返回结果给调用者。

  8. 关闭 SqlSession:执行完毕后,应该关闭 SqlSession 以释放数据库连接资源。

这个过程涉及到了 Mybatis 的核心组件和工作流程,确保了 SQL 语句的执行和结果的返回。使用 Mybatis 的好处之一就是它允许开发者以一种声明式的方式来编写 SQL,同时还能保持代码的清晰和易于维护。

Mybatis 的内部实现细节非常丰富,下面我将通过一些关键类的源码片段来具体展示 Mybatis 的工作原理。

  1. 配置解析(XMLConfigBuilder.java)

Mybatis 使用 XMLConfigBuilder 来解析 mybatis-config.xml 文件:

public Configuration parse() {parseConfiguration(parser.eval(Configuration.class));return configuration;
}

这里,parseConfiguration 方法会填充 Configuration 对象的属性,比如数据库连接信息、类型别名、类型处理器等。
2. 创建 SqlSessionFactory(SqlSessionFactoryBuilder.java)

使用 XMLConfigBuilder 解析配置后,SqlSessionFactoryBuilder 会创建 SqlSessionFactory:

public SqlSessionFactory build(InputStream inputStream) {try {XMLConfigBuilder xmlParser = new XMLConfigBuilder(inputStream, environment, reporter);return build(xmlParser.parse());} catch (Exception e) {throw new BuilderException("Error building SqlSession.", e);}
}
  1. SqlSession 管理(DefaultSqlSessionFactory.java)

DefaultSqlSessionFactory 提供了创建 SqlSession 的方法:

public SqlSession openSession() {return openSessionFromDataSource(configuration.getEnvironment().getDataSource(), null, false);
}
  1. Executor 执行器(BaseExecutor.java)

BaseExecutor 是 Executor 接口的抽象实现,提供了事务和缓存管理的框架:

public <E> List<E> query(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, CacheKey key, BoundSql boundSql) {ErrorContext.instance().resource(ms.getResource()).activity("querying").object(ms.getId());if (closed) {throw new ExecutorException("Executor was closed.");}if (queryStack == 0 && ms.isFlushCacheRequired()) {clearLocalCache();}List<E> list;try {queryStack++;list = resultHandler == null ? (List<E>) localCache.getObject(key) : null;if (list != null && resultHandler != null) {resultHandler.handleRows(list);}if (list == null) {list = doQuery(ms, parameter, rowBounds, resultHandler, key, boundSql);}} finally {queryStack--;}return list;
}
  1. 动态代理(MapperProxy.java)

MapperProxy 使用 JDK 动态代理来拦截 Mapper 接口方法的调用:

public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {if (Object.class.equals(method.getDeclaringClass())) {try {return method.invoke(this, args);} catch (Throwable t) {throw new RuntimeException("Error when attempting to invoke method '" +method.getName() + "' on Mapper Proxy.", t);}} else {return mapperMethod.execute(sqlSession, args);}
}
  1. 映射器 XML 解析(XMLMapperBuilder.java)

XMLMapperBuilder 负责解析 Mapper 的 XML 文件:

public void parse() {if (!configuration.isResourceLoaded(resource)) {configurationElement(parser.evalNode("mapper"));configuration.addLoadedResource(resource);bindMapperForNamespace();}
}
  1. 缓存机制(PerpetualCache.java)

PerpetualCache 是 Mybatis 缓存的基本实现:

public V get(Object key, CacheProvider provider) {V value = (V) cache.get(key);if (value == null) {value = provider.apply(key);cache.put(key, value);}return value;
}
  1. TypeHandler 和 ParameterHandler

TypeHandler 接口定义了 Java 类型和 JDBC 类型之间的转换逻辑:

public interface TypeHandler<T> {void setParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException;T getResult(ResultSet rs, int columnIndex) throws SQLException;T getResult(CallableStatement cs, int columnIndex) throws SQLException;
}

ParameterHandler 负责将方法参数映射到 SQL 语句的参数上:

public void setParameters(PreparedStatement ps) throws SQLException {for (ParameterMapping parameter : boundSql.getParameterMappings()) {if (parameter.getMode() != ParameterMode.OUT) {Object value = parameter.getObject(value);TypeHandler typeHandler = parameter.getTypeHandler();typeHandler.setParameter(ps, parameter.getI(), value, parameter.getJdbcType());}}
}
  1. 结果映射(DefaultResultSetHandler.java)

DefaultResultSetHandler 负责将 ResultSet 中的数据映射到 Java 对象:

public <E> List<E> handleRowValues(ResultSet rs, List<E> resultList, RowBounds rowBounds) throws SQLException {if (hasResultSetData(rs)) {int offset = rowBounds == null || rowBounds.getOffset() == RowBounds.NO_ROW_OFFSET ? 0 : rowBounds.getOffset();int limit = rowBounds == null || rowBounds.getLimit() == RowBounds.NO_ROW_LIMIT ? Integer.MAX_VALUE : rowBounds.getLimit();int rowNumber = 0;while (rs.next()) {if (offset > 0) {offset--;continue;}if (limit > 0) {limit--;if (limit == 0) {break;}}Object rowValue = getRowValue(rs, null);resultList.add((E) rowValue);rowNumber++;}}return resultList;
}

这些代码片段展示了 Mybatis 核心组件的工作原理。然而,由于 Mybatis 的复杂性,这里只提供了部分关键代码的简要概述。要完全理解 Mybatis 的内部实现,需要深入研究每个类和接口的实现细节,以及它们之间的交互。关注威哥爱编程,一起向全栈出发。

http://www.hrbkazy.com/news/23751.html

相关文章:

  • 报关做业务可以上哪些网站全网搜索软件下载
  • 网站开发工作怎么进行seo
  • vue加wordpress常用的关键词优化策略有哪些
  • 做家居网站设计百度小说排行榜完本
  • 网站建设规范培训心得体会范文大全1000字
  • 合肥市建设工程造价信息网站一站式发稿平台
  • 手机网站输入框未来网络营销的发展趋势
  • 网站建设平台一般多少钱seo网站推广与优化方案
  • 怡康医药网站建设方案腾讯推广一次广告多少钱
  • 游戏交易类网站seo怎么做免费seo网站
  • 永川集团网站建设百度官方入口
  • 网站建设 资讯b2b免费推广平台
  • 网站案例 中企动力技术支持深圳网站建设公司排名
  • 河南省新闻出版局站长工具之家seo查询
  • html5手机网站下载seo专业培训机构
  • h5常用的编辑平台什么叫seo优化
  • 采购网站平台企业网站管理
  • 各大网站网址是多少软件开发培训学校
  • 网站开发专业成功人士今天国际新闻大事
  • 简单免费的制图软件武汉seo网站管理
  • 网站建设需求说明书最近一周新闻大事摘抄2022年
  • 织梦网站后台如何做百度优化seocms
  • 外国高端网站设计什么是关键词广告
  • app设计网站有哪些功能如何创建属于自己的网站
  • 做网站需要的东西怎样在平台上发布信息推广
  • 商丘做网站公司新站seo快速收录网页内容页的方法搜索引擎优化的名词解释
  • b2c购物网站开发书籍seo关键词排名公司
  • 在哪网站可以做农信社模拟试卷域名备案
  • 网站安全加固百度推广网站平台
  • 深圳宝安固戍小学网站建设一键关键词优化