mybaits学习记录(三)——配置文件解析、生命周期、ResultMap

4、配置文件

4.1、核心配置文件

  • configuration(配置)
  • properties(属性)
  • settings(设置)
  • typeAliases(类型别名)
  • typeHandlers(类型处理器)
  • objectFactory(对象工厂)
  • plugins(插件)
  • environments(环境配置)
  • environment(环境变量)
  • transactionManager(事务管理器)
  • dataSource(数据源)
  • databaseIdProvider(数据库厂商标识)
  • mappers(映射器)

mybatis定义的配置文件顺序,配置标签顺序不可以乱,必须要严格按照定义的顺序来

<!ELEMENT configuration (properties?, settings?, typeAliases?, typeHandlers?, objectFactory?, objectWrapperFactory?, reflectorFactory?, plugins?, environments?, databaseIdProvider?, mappers?)>

properties(属性)

    <!--引入外部配置文件-->
    <properties resource="db.properties"/>

可以用来引入外部配置文件
创建在resources文件根目录下创建db.properties

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT
username=root
password=root

使用properties标签引入外部文件

  <!--环境-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

settings(设置)

<settings> 
	<setting name="cacheEnabled" value="true"/> 
	<setting name="lazyLoadingEnabled" value="true"/> 
	<setting name="multipleResultSetsEnabled" value="true"/> 
	<setting name="useColumnLabel" value="true"/> 
	<setting name="useGeneratedKeys" value="false"/> 
	<setting name="autoMappingBehavior" value="PARTIAL"/> 
	<setting name="autoMappingUnknownColumnBehavior" value="WARNING"/> 
	<setting name="defaultExecutorType" value="SIMPLE"/> 
	<setting name="defaultStatementTimeout" value="25"/> 
	<setting name="defaultFetchSize" value="100"/> 
	<setting name="safeRowBoundsEnabled" value="false"/> 
	<setting name="mapUnderscoreToCamelCase" value="false"/>
	 <setting name="localCacheScope" value="SESSION"/> 
	 <setting name="jdbcTypeForNull" value="OTHER"/> 
	 <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/> 
 </settings>

typeAliases(类型别名)

可以使用typeAlias标签

  <!--可以给实体类起别名-->
    <typeAliases>
   		<typeAlias type="com.zhangjiangbo.cn.bean.User" alias="User"></typeAlias>
    </typeAliases>

也可以使用包名,使用包名则会默认bean的首字母小写作为他的别名

    <typeAliases>
   		<package name="com.zhangjiangbo.cn.bean"/>
    </typeAliases>

也可以使用注解的方式

@Alias("User")
public class User {

}

说明:当标签使用包名时,包下类有使用注解的则优先采用注解别名

environments(环境配置)

MyBatis 可以配置成适应多种环境,必须指定其中一个为默认运行环境(通过default指定)
子节点environment

  • 具体的一套环境,通过设置id进行区别,id保证唯一!
  • 子节点元素:transactionManager 事务管理器
    • MyBatis默认的事务管理器就是JDBC
  • 子节点元素:dataSource数据源
    • 默认的数据源POOLED

mappers(映射器)

第一种方式(使用相对于类路径的资源引用)

    <mappers>
         <mapper resource="com/zhangjiangbo/cn/mapper/UserMapper.xml"/>
    </mappers>

第二种方式(使用映射器接口实现类的完全限定类型)
需要配置文件名称和接口名称一致,并且位于同一目录下

    <mappers>
        <mapper class="com.zhangjiangbo.cn.mappers.UserMapper"/>
    </mappers>

第三种方式(将包内的映射器接口全部注册为映射器)
需要配置文件名称和接口名称一致,并且位于同一目录下

    <mappers>
        <package name="com.zhangjiangbo.cn.mappers"></package>
    </mappers>

mybaits的生命周期和作用域

在这里插入图片描述

SqlSessionFactoryBuilder:

  • 创建sqlSessionFactory后边失去作用
  • 最佳作用域是局部变量

SqlSessionFactory:

  • 可以想象为:数据库连接池
  • 创建sqlSession接口对象,存在于整个mybatis周期
  • 单例模式,在应用中被共享
    最佳作用域是成员变量

SqlSession:

  • 连接到连接池的一个请求
  • SqlSession不是线程安全的,执行完一个业务请求后需要关闭
    通过try…catch…finally… 语句来保证其正确关闭
    最佳作用域是局部变量

在这里插入图片描述

ResultMap标签

解决数据库字段和实体类字段名称不一致问题

问题:
在这里插入图片描述
在这里插入图片描述
运行结果
在这里插入图片描述

解决办法:

  • 使用resultMap 标签一一对应 查询返回类型修改为resultMap=“BaseResultMap”
  <resultMap id="BaseResultMap" type="com.zhangjiangbo.cn.bean.User">
        <id column="id" jdbcType="INTEGER" property="id"></id>
        <result column="username" jdbcType="VARCHAR" property="username"></result>
        <result column="password" jdbcType="VARCHAR" property="pwd"></result>
    </resultMap>

    <select id="getAll" resultMap="BaseResultMap">
        select * from `user`
    </select>

resultMap 元素是 MyBatis 中最重要最强大的元素
ResultMap 的设计思想是,对于简单的语句根本不需要配置显式的结果映射,而对于复杂一点的语句只需要描述它们的关系就行了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值