Mybatis之作用域(Scope)和生命周期-解决属性名和字段名不一致的问题&ResultMap结果集映射

生命周期类别是至关重要的,因为错误的使用会导致非常严重的并发问题

SqlSessionFactoryBuilder

  • 一旦创建了 SqlSessionFactory,就不再需要它了。
  • 局部变量

SqlSessionFactory

  • 说白了就是可以想象为:数据库连接池
  • 一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例
  • 因此SqlSessionFactory 的最佳作用域是应用作用域。
  • 最简单的就是使用单例模式或者静态单例模式。

SqlSession

  • 连接到池的一个请求!
  • SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。
  • 用完之后感觉关闭,否则资源被占用!

一个池子有多个线程,每一个线程都是独享的,不能够共享。每一个SqlSession 都会去连接Mapper,这里面的每一个Mapper,就代表一个具体的业务!(SQL)

参考:

plain 复制代码
https://mybatis.org/mybatis-3/zh_CN/getting-started.html

问题

数据库中的字段

新建一个项目,拷贝之前的,测试实体类字段不一致的!

java 复制代码
public class user {
    private int id;
    private String name;
    private String password;

测试出现问题

java 复制代码
    select * from mybatis.user where id=#{id};
//类型处理器
    select id,name,pwd from mybatis.user where id=#{id};

解决方法:

  • 起别名

UserMapper.xml 中

xml 复制代码
<select id="getUserById" parameterType="int" resultType="user">
        select id,name,pwd as password from mybatis.user where id=#{id};
</select>

resultMap

结果集映射

xml 复制代码
id	name	pwd
id	name	password

UserMapper.xml 中

xml 复制代码
    <!--     结果集映射
    id是属性,用来给应用的,type指定类名-->
    <resultMap id="UserMap" type="user">
        <!--列column指的是数据库中的字段,属性property指的是实体类中的属性-->
        <result column="id" property="id"/>
        <result column="name" property="name"/>
        <!--数据库中的列是pwd,实体类中的属性是password,进行结果集映射-->
        <result column="pwd" property="password"/>
    </resultMap>
    
    <!--<select id="对应UserMapper的方法" resultType="实体类">-->
    <select id="getUserById" resultMap="UserMap">
            select * from mybatis.user where id=#{id};
    </select>
  • <font style="color:rgb(221, 17, 68);background-color:rgb(247, 247, 249);">resultMap</font> 元素是 MyBatis 中最重要最强大的元素
  • ResultMap 的设计思想是,对简单的语句做到零配置,对于复杂一点的语句,只需要描述语句之间的关系就行了。
  • <font style="color:rgb(221, 17, 68);background-color:rgb(247, 247, 249);">ResultMap</font> 的优秀之处------你完全可以不用显式地配置它们
  • 如果这个世界总是这么简单就好了。

参考:

plain 复制代码
官方文档:https://mybatis.org/mybatis-3/zh_CN/sqlmap-xml.html
相关推荐
流星白龙11 小时前
【Docker】4.NameSpace空间隔离实战
java·运维·docker
AI人工智能+电脑小能手11 小时前
【大白话说Java面试题 第207题】【09_Zookeeper篇】第8题:谈谈 ZooKeeper 的可靠性保障机制
java·zookeeper·高可用·可靠性·分布式系统
swany11 小时前
同步数据中,只需要几秒钟 & milvus向量数据库不可用 dify1.16.1 升级后踩坑记录
开发语言·python·numpy
harmful_sheep11 小时前
maven多版本包导致java.lang.NoClassDefFoundError
java·maven
小杍随笔11 小时前
2025年Rust GUI框架实战万字避坑指南
开发语言·后端·rust
geovindu11 小时前
CSharp: LogHelper
开发语言·后端·c#·.net
Mark_ZP11 小时前
【锁2】锁的分类与概念
java·
奈斯先生Vector11 小时前
大模型 Agentic Workflow 架构解构:异构 API 调度与 Token 路由的多模态系统设计
开发语言·前端·架构·prompt·aigc·音视频
冻柠檬飞冰走茶11 小时前
PTA基础编程题目集 7-20 打印九九口诀表(C语言实现)
c语言·开发语言·数据结构·算法
江晓鱼未暖11 小时前
十七、Redis 核心原理与架构详解
大数据·数据库·数据仓库·redis·缓存·架构