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

做网站 用 显示器html成品模板

做网站 用 显示器,html成品模板,营销策划方案书,口碑营销的产品有哪些MyBatis 是一个基于 SQL 映射 的持久层框架,其核心设计目标是 简化数据库操作,同时保留开发者对 SQL 的完全控制权。以下是其工作原理的分步解析: 目录 1. 核心组件与流程 1.1 配置阶段 2. 关键机制 2.1 参数处理 2.2 结果映射 3. 与 S…

MyBatis 是一个基于 SQL 映射 的持久层框架,其核心设计目标是 简化数据库操作,同时保留开发者对 SQL 的完全控制权。以下是其工作原理的分步解析:


目录

1. 核心组件与流程

1.1 配置阶段

2. 关键机制

2.1 参数处理

2.2 结果映射

3. 与 Spring 集成

4. 优势与适用场景

5. 总结:MyBatis 工作原理图


1. 核心组件与流程

1.1 配置阶段
  • 配置文件:通过 mybatis-config.xml 配置数据源、事务管理器、类型别名等全局设置。
  • Mapper 映射文件:定义 SQL 语句、参数映射(#{}/${})和结果映射(resultMap)。
<!-- 示例:UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper"><select id="getUserById" resultType="User">SELECT * FROM users WHERE id = #{id}</select>
</mapper>

 1.2 初始化阶段

  • SqlSessionFactory 构建:读取配置文件,创建 SqlSessionFactory(单例)。
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

 1.3 执行阶段

  • 获取 SqlSession:通过 SqlSessionFactory 打开一个 SqlSession(线程不安全,需短生命周期)。

try (SqlSession session = sqlSessionFactory.openSession()) {UserMapper mapper = session.getMapper(UserMapper.class);User user = mapper.getUserById(1);
}
  • 动态代理生成 Mapper 接口实现

    • MyBatis 通过 JDK 动态代理为 UserMapper 接口生成实现类。
    • 方法调用(如 getUserById)会被拦截,解析为对应的 SQL 语句。
  • SQL 执行与结果映射

    1. 参数替换:将方法参数(如 id=1)替换到 SQL 中的 #{} 占位符。
    2. 执行 SQL:通过 JDBC 执行预编译语句,获取 ResultSet
    3. 结果映射:将 ResultSet 的列映射到 Java 对象的属性(支持自动映射或 resultMap 自定义映射)。
<resultMap id="userResultMap" type="User"><id property="id" column="user_id"/><result property="username" column="user_name"/>
</resultMap>

2. 关键机制

2.1 参数处理
  • #{} 占位符:使用 PreparedStatement 防止 SQL 注入,自动处理类型转换。
  • ${} 替换符:直接拼接 SQL 字符串,需谨慎使用(存在注入风险)。
2.2 结果映射
  • 自动映射:根据列名与属性名的驼峰命名规则自动匹配(如 user_name → userName)。
  • 复杂类型映射:通过 association(一对一)和 collection(一对多)处理关联查询。
<resultMap id="orderResultMap" type="Order"><association property="user" javaType="User" resultMap="userResultMap"/><collection property="items" ofType="Item" resultMap="itemResultMap"/>
</resultMap>

 2.3 动态 SQL

  • 通过 <if><choose><foreach> 等标签构建灵活的 SQL 语句。
<select id="findUsers" resultType="User">SELECT * FROM users<where><if test="name != null">AND name LIKE #{name}</if><if test="age != null">AND age = #{age}</if></where>
</select>

 2.4 缓存机制

  • 一级缓存(SqlSession 级):默认启用,缓存同一个 SqlSession 内的查询结果。
  • 二级缓存(Mapper 级):需手动配置,跨 SqlSession 共享缓存(如 Ehcache、Redis)。
<cache eviction="LRU" size="1024"/>

 2.5 插件扩展

  • 通过拦截器(Interceptor)扩展功能,如分页插件 PageHelper。
@Intercepts({@Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class})})
public class PageInterceptor implements Interceptor {// 拦截并修改 SQL 语句,添加分页逻辑
}

3. 与 Spring 集成

  • 事务管理:通过 SqlSessionTemplate 或 @Transactional 注解集成 Spring 事务。
  • 依赖注入:Mapper 接口可被 Spring 容器管理,直接注入到 Service 层。
@Repository
public class UserDao {@Autowiredprivate SqlSessionTemplate sqlSessionTemplate;public User getUserById(Long id) {return sqlSessionTemplate.selectOne("com.example.mapper.UserMapper.getUserById", id);}
}

4. 优势与适用场景

  • 优势
    • 灵活控制 SQL:适合需要优化复杂查询或利用数据库特有功能的场景。
    • 解耦 SQL 与代码:通过 XML 或注解管理 SQL,便于维护。
    • 轻量级:相比 Hibernate,学习曲线平缓,性能损耗低。
  • 适用场景
    • 遗留系统迁移或数据库表结构复杂。
    • 需要高频优化 SQL 的性能敏感型应用。
    • 团队熟悉 SQL 但希望减少 JDBC 模板代码。

5. 总结:MyBatis 工作原理图

配置文件 (mybatis-config.xml + Mapper XML)
SqlSessionFactoryBuilder 解析配置 → 创建 SqlSessionFactory
SqlSessionFactory.openSession() → 获取 SqlSession(含 Executor)
SqlSession.getMapper(UserMapper.class) → 动态代理生成接口实现
调用 Mapper 方法 → 解析 SQL → 执行 JDBC → 映射结果 → 返回 Java 对象

通过这种设计,MyBatis 在 灵活性与易用性 之间取得了平衡,成为 Java 生态中主流的持久层框架之一。


文章转载自:

http://nLwcqiUb.tnnfy.cn
http://LkwTL7KF.tnnfy.cn
http://P7O7zS7S.tnnfy.cn
http://MUaojJxq.tnnfy.cn
http://kXKRVea3.tnnfy.cn
http://UBWuJJfF.tnnfy.cn
http://WSaR8QDs.tnnfy.cn
http://PtdFZmUb.tnnfy.cn
http://SRF2rKUE.tnnfy.cn
http://BD3hpGNu.tnnfy.cn
http://4gx7QnKF.tnnfy.cn
http://NSweXEzL.tnnfy.cn
http://eMsml3iY.tnnfy.cn
http://r5pzdpQz.tnnfy.cn
http://dYRj9p2U.tnnfy.cn
http://WoA0vGOy.tnnfy.cn
http://eKvkKYRB.tnnfy.cn
http://ZSiDbdMX.tnnfy.cn
http://qJDvyla8.tnnfy.cn
http://AzjqEm9B.tnnfy.cn
http://98Z5oHSy.tnnfy.cn
http://saF4ToCD.tnnfy.cn
http://rmaCsyj2.tnnfy.cn
http://CZ9TFX1V.tnnfy.cn
http://VevCWTT4.tnnfy.cn
http://qmXus4GU.tnnfy.cn
http://HoIcvSyt.tnnfy.cn
http://OH5rg3bb.tnnfy.cn
http://ouaMZp2X.tnnfy.cn
http://ktH6B1HO.tnnfy.cn
http://www.dtcms.com/wzjs/744461.html

相关文章:

  • 如何建设一个静态网站6网上做视频赚钱的网站有哪些
  • 江西省做网站建立网站教学的
  • 网站做产品的审核工作包装设计需要哪些信息
  • 网站关键词热度php大气企业网站
  • 北京哪家网站建设公司好织梦网站移动化
  • 网站建设优化服务公司建大型购物网站
  • 自建营销型网站模板网站建设 空间什么系统
  • 外包类设计网站网址搜索
  • 成都网站建设公司湖南岚鸿网站建设辶金手指排名十一
  • 网站404做多大淘宝客网站建设任务
  • 网站加百度商桥成都营销网站制作
  • 西宁圆井模板我自己做的网站帆软社区app
  • 开发软件下载网站做雕塑设计的网站
  • 兰州网站建设方案详细wordpress大图片
  • 自建网站备案通过后怎么做网站推广效果如何
  • 中国第一个做电商网站做网站建设的合同范本
  • 岳阳汨罗网站建设我的网站百度找不到
  • 西安网站制作开发网页游戏广告平台网站建设
  • 网站建设四个阶段angularjs网站模板
  • 做团购的的网站有哪些网站设计的分辨率
  • 太原网站建设列表网网站建设 数据可视化
  • 章贡网站建设百度云搜索引擎入口网盘搜索神器
  • 快速建站用什么北京营销型网站推广
  • 永州网站建设优化哈尔滨网站建设还不如
  • 企业门户网站在信息系统架构中属于哪个层次进入淘宝官网首页
  • 深圳公司网站设计响应式网页设计针对的终端有
  • 安徽津城建设工程有限公司网站百度seo竞价推广是什么
  • 网站 建设 计划江浦企业管理咨询服务有限公司
  • 学网站开发与维护有用吗合肥网站开发招聘
  • 网站 linux 服务器潍坊网站建设SEO优化熊掌号