当前位置: 首页 > 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.lryc.cn/news/615926.html

相关文章:

  • 第一章 概述
  • 快速了解DBSCAN算法
  • reinterpret_cast and static cast
  • Docker实战:为项目打造即开即用的宝塔LNMP环境
  • redis集群-docker环境
  • 【从源码角度深度理解 CPython 的垃圾回收机制】:第2课循环引用:标记清除-分代回收
  • 机器学习线性归回实战(单因子和多音字分别建立预测房价模型)
  • 一个基于 Next.js 和 Puppeteer 的 Markdown 转图片服务,支持 Docker 部署和 API 集成
  • Node.js面试题及详细答案120题(01-15) -- 基础概念篇
  • python | numpy小记(十):理解 NumPy 中的 `np.random.multinomial`(进阶)
  • Stlink识别不到-安装驱动
  • 医防融合中心-智慧化慢病全程管理医疗AI系统开发(下)
  • 整数规划-分支定界
  • Docker Compose 部署高可用 MongoDB 副本集集群(含 Keepalived + HAProxy 负载均衡)
  • AI编程插件对比分析:CodeRider、GitHub Copilot及其他
  • 给AI装上“翻译聚光灯”:注意力机制的机器翻译革命
  • 【精彩回顾·成都】成都 User Group×柴火创客空间:开源硬件驱动 AI 与云的创新实践!
  • 打卡day34
  • openpnp - 顶部相机如果超过6.5米影响通讯质量,可以加USB3.0信号放大器延长线
  • Spark执行计划与UI分析
  • AutoCAD 2026 的主要功能
  • 变量详解:创建初始化与内存管理
  • lesson34:深入理解Python线程:从基础到实战优化
  • XGBoost算法在机器学习中的实现
  • Android Camera 打开和拍照APK源码
  • Android 开发问题:Invalid id; ID definitions must be of the form @+id/ name
  • Android 16 KB页面大小适配的权威技术方案总结
  • Ubuntu 安装 Kibana
  • 神经机器翻译(NMT)框架:编码器-解码器(Encoder-Decoder)结构详解
  • 支持selenium的chrome driver更新到139.0.7258.66