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

个人笔记Mybatis2

4.配置解析

4.1核心配置文件

  • mybatis-config.xml

  • MyBatis配置包含对MyBatis行为方式有显著影响的设置和属性

  • 在 MyBatis 中有两种类型的事务管理器 (也就是 type="[JDBC|MANAGED]”

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

4.2environments(环境配置)

Mybatis可以配置成适应多种环境

虽然可以配置多个环境,但每个SqlSessionFactory实例只能选择一个环境。

Mybatis默认的事务管理器就是JDBC,连接池:POOLED

4.3 configuration(配置)

我们可以通过properties属性来实现引用配置文件

这些是可外化的、可替换的属性,可以在典型的Java属性文件实例中配置,也可以通过properties元素的子元素传入(db.properties)

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF8
username=root
password=123456

官网:引入外部配置文件,这里面的优先级没有外部配置文件高(db.properties)

<properties resource="org/mybatis/example/config.properties"><property name="username" value="dev_user"/><property name="password" value="F2Fa3!33TYyg"/>这里面的优先级没有外部配置文件高(db.properties)
</properties>
<!--引入外部配置文件-->
<properties resource="db.properties"><property name="username" value="root"/><property name="pwd" value="11111"/>
</properties>
  • 可以直接引入外部文件

  • 可以在其中增加一些属性配置

  • 如果两个文件有同一个字段,优先使用外部配置文件的

实际应用1.加入了<properties resource="db.properties"/>

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--&lt;!&ndash;    引入外部配置文件&ndash;&gt;-->
<!--    <properties resource="db.properties"/>--><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF8"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource>
​
<!--            <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>
<!--    每一个Mapper.xml都需要再Mybatis核心配置文件中注册--><mappers><mapper resource="com/lyj/dao/UserMapper.xml"/></mappers>
</configuration>

4.4typeAliases(类型别名)

  • 类型别名是为Java类型设置一个短的名字

  • 存在的意义仅在与用来减少类完全限定名的冗余

1.第一种

<typeAliases><typeAlias alias="Author" type="domain.blog.Author"/><typeAlias alias="Blog" type="domain.blog.Blog"/><typeAlias alias="Comment" type="domain.blog.Comment"/><typeAlias alias="Post" type="domain.blog.Post"/><typeAlias alias="Section" type="domain.blog.Section"/><typeAlias alias="Tag" type="domain.blog.Tag"/>
</typeAliases>

例子

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

2.第二种

也可以指定一个包名,Mybatis会在包名下面搜索需要的Java Bean,比如:扫描实体类的包,它的默认别名就是这个类的类名,首字母小写

<typeAliases><package name="domain.blog"/>
</typeAliases>

例子

<typeAliases><package name="com.lyj.pojo"/></typeAliases>

在实体类比较少的时候,使用第一种方法

如果实体类十分多,建议使用第二种

第一种可以DIY别名,第二种则不行

如果非要改,泽需要在实体类上增加注解

3.第三种

在第二种包之中,如果@Alias注释被发现其值将被用作别名

@Alias("author")
public class Author {...
}

import org.apache.ibatis.type.Alias;@Alias("hello")
public class User {......}

Alias(别名)Mapped Type(映射类型)
_bytebyte
_char (since 3.5.10)char
_character (since 3.5.10)char
_longlong
_shortshort
_intint
_integerint
_doubledouble
_floatfloat
_booleanboolean
stringString
byteByte
char (since 3.5.10)Character
character (since 3.5.10)Character
longLong
shortShort
intInteger
integerInteger
doubleDouble
floatFloat
booleanBoolean
dateDate
decimalBigDecimal
bigdecimalBigDecimal
bigintegerBigInteger
objectObject
date[]Date[]
decimal[]BigDecimal[]
bigdecimal[]BigDecimal[]
biginteger[]BigInteger[]
object[]Object[]
mapMap
hashmapHashMap
listList
arraylistArrayList
collectionCollection
iteratorIterator

4.5settings(设置)

设置描述有效值默认
logImpl指定MyBatis应使用的日志记录实现。如果不存在此设置,则将自动发现日志记录实现。SLF4J | LOG4J (自3.5.9起已弃用) | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING未设置

4.6其他配置

typeHandlers(类型处理器) objectFactory(对象工厂) plugins(插件)

  • mybatis-generator

  • mybatis-plus

  • 通用mapper

4.7mappers(映射器)

可以使用类路径相对资源引用,完全限定的url引用 (包括file:///Url) 、类名或包名

1.使用类路径相对资源引用

<!-- Using classpath relative resources -->
<mappers><mapper resource="org/mybatis/builder/AuthorMapper.xml"/><mapper resource="org/mybatis/builder/BlogMapper.xml"/><mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>

例子

<mappers><mapper resource="com/lyj/dao/UserMapper.xml"/></mappers>

2.使用class文件绑定注册

<!-- Using mapper interface classes -->
<mappers><mapper class="org.mybatis.builder.AuthorMapper"/><mapper class="org.mybatis.builder.BlogMapper"/><mapper class="org.mybatis.builder.PostMapper"/>
</mappers>

注意点:

  • 接口和它的Mapper配置文件必须同名

  • 接口和它的Mapper配置文件必须在同一个包下

3.使用URL

<!-- Using url fully qualified paths -->
<mappers><mapper url="file:///var/mappers/AuthorMapper.xml"/><mapper url="file:///var/mappers/BlogMapper.xml"/><mapper url="file:///var/mappers/PostMapper.xml"/>
</mappers>

4.8生命周期和作用域

生命周期类和作用域是非常重要的。不正确地使用它们会导致严重的并发问题

MyBatis 核心对象作用域说明

SqlSessionFactoryBuilder

  • 一旦创建了 SqlSessionFactory,就不再需要它了

  • 通常作为局部变量使用,仅用于构建 SqlSessionFactory 实例

SqlSessionFactory

  • 可类比为数据库连接池,负责创建 SqlSession 实例

  • 一旦创建,应在应用运行期间全程存在,无需(也不应)丢弃或重建实例

  • 最佳作用域:应用作用域(与应用同生命周期)

  • 实现方式:常用单例模式静态单例模式保证全局唯一

SqlSession

  • 可理解为连接池的一次请求 / 会话,用于执行 SQL 操作

  • 实例非线程安全,不能跨线程共享

  • 最佳作用域:请求 / 方法作用域(随请求或方法结束销毁)

  • 注意:使用后需主动关闭,避免资源泄漏

每一个Mapper就代表一个具体的业务

5.解决属性名和字段名不一致的问题

5.1

public class User {private int id;private String name;private String password;
}

类型处理器

select * from mybatis.user where id = #{id}select id,name,pwd from mybatis.user where id = #{id}

解决方法

起别名

<selece id="getUserById" resultType = "com.lyj.pojo.User">select id,name,pwd as password from mybatis.user where id = #{id}
</selece>

5.2resultMap

resultmap 元素是 MyBatis 中最重要最强大的元素

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

结果集映射

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lyj.dao.UserMapper">
​<!-- 结果集映射 --><resultMap id="UserMap" type="User"><!-- column 数据库中的字段,property 实体类中的属性 --><result column="id" property="id"/><result column="name" property="name"/><result column="pwd" property="password"/></resultMap>
​<select id="getUserById" resultMap="UserMap">select * from mybatis.user where id = #{id}</select>
​
</mapper>

6.日志

6.1日志工厂

如果一个数据库操作,出现了异常,我们需要排错,就需要用到日志

  • SLF4J

  • LOG4J (自3.5.9起已弃用) ???

  • LOG4J2

  • JDK_LOGGING

  • COMMONS_LOGGING

  • STDOUT_LOGGING (需要掌握)

  • NO_LOGGING

STDOUT_LOGGING (需要掌握)

<settings>
<!--        标准的日志工厂实现--><setting name="logImpl" value="STDOUT_LOGGING"/></settings>

LOG4J (自3.5.9起已弃用)

LOG4J (自3.5.9起已弃用)是Apache的一个开源项目,通过使用Log4j,

我们可以控制日志信息输送的目的地是控制台、文件GUI组件

我们也可以控制每一条日志的输出格式;

通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。

通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

使用:

1.在要使用Log4j的类中,导入包import org.apache.log4j.Logger;

2.日志对象,参数为当前类的class

static Logger logger = Logger.getLogger(UserDaoTest.class);
​

3.日志级别

logger.info("info:进入了testLog4j");logger.debug("debug:进入了testLog4j");logger.error("error:进入了testLog4j");
http://www.dtcms.com/a/324721.html

相关文章:

  • 医学统计(现况调查的统计分析策略1)
  • 电脑使用“碎片整理”程序的作用
  • 基于ECharts的智慧社区数据可视化
  • 【npm、yarn、pnpm】特点对比,按需选择
  • Java设计模式之开闭原则介绍与说明
  • 【RocketMQ 生产者和消费者】- ConsumeMessageOrderlyService 顺序消费消息
  • Vue.js设计于实现 - 概览(二)
  • 跑酷小游戏2.0
  • C语言(长期更新)第10讲:操作符详解(二)
  • 麻溜启动Oracle实例demo
  • 【渲染流水线】[几何阶段]-[归一化NDC]以UnityURP为例
  • 基于Spring Boot和WebSocket的实时聊天系统
  • Openlayers基础教程|从前端框架到GIS开发系列课程(21)geojson实现线要素和区要素
  • git merge的原理和过程,merge conflict产生的原因、处理的逻辑
  • 【话题讨论】GPT-5 发布全解读:参数升级、长上下文与多领域能力提升
  • MCP学习与实践
  • ESP32安装于配置
  • [激光原理与应用-216]:设计 - 皮秒紫外激光器 - 热管理设计,多维策略保障高效稳定运行
  • 腾讯云EdgeOne Pages深度使用指南
  • 计算机网络:什么是AD域
  • 线程的sleep、wait、join、yield如何使用?
  • 随想记——excel报表
  • XGBoost参数evals的作用及使用方法
  • 【图像算法 - 11】基于深度学习 YOLO 与 ByteTrack 的目标检测与多目标跟踪系统(系统设计 + 算法实现 + 代码详解 + 扩展调优)
  • 什么是缓存击穿、缓存穿透、缓存雪崩及其解决方案
  • Oracle lgwr触发条件
  • Docker 容器化工具及常用操作
  • Excel版经纬度和百分度互转v1.1
  • crc32算法php版----crc32.php
  • 【Spring IoC 核心实现类详解:DefaultListableBeanFactory】