MyBatis 之三:配置文件详解和 Mapper 接口方式

2024-03-15 04:52

本文主要是介绍MyBatis 之三:配置文件详解和 Mapper 接口方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

配置文件

配置文件中常用的元素:

configuration 配置

properties 可以配置在Java 属性配置文件中

settings 修改 MyBatis 在运行时的行为方式

typeAliases 为 Java 类型命名一个别名(简称)

typeHandlers 类型处理器

objectFactory 对象工厂

plugins 插件

environments 环境

environment 环境变量

transactionManager 事务管理器

dataSource 数据源

mappers 映射器

properties

可以通过此标记中的属性引用外部的属性配置文件,键值对的属性资源文件

引用之前,先要新建 db.properties 文件,并编辑好内容

新建 db.properties 文件

username=root
password=zhangroot
url=jdbc:mysql://127.0.0.1:3306/homework
driver=com.mysql.cj.jdbc.Driver

在配置文件中使用:

<!--导入资源文件-->
<properties resource="db.properties"><!--用作默认值,如果属性文件中获取不到对应属性时,这里才会起作用,优先级低于属性文件夹的--><property name="password" value="zhangroot"/>
</properties>

注意:

在配置文件中的属性设置

优先级低于属性资源配置文件,所以我们一般把在配置文件中的属性设置用作默认值。

使用属性文件中的配置信息方式${}

<environment id="devA"><transactionManager type="JDBC"></transactionManager><dataSource type="POOLED"><property name="username" value="${username}"/><property name="password" value="${password}"/><property name="url" value="${url}"/><property name="driver" value="${driver}"/></dataSource>
</environment>
transactionManager

在配置文件

事务管理器(transactionManager)

在MyBatis中,事务管理器(Transaction Manager)的类型有两种( type="[JDBC|MANAGED]"):

  1. JDBC

    当事务管理器类型设置为JDBC时,MyBatis会使用Java JDBC API直接管理事务。这意味着它会从数据源获取数据库连接,并利用该连接对象来执行事务的开启、提交或回滚操作。在处理完SQL操作后,MyBatis会根据需要自行关闭连接或返回给连接池。
  2. MANAGED

    当配置为MANAGED时,MyBatis则不会自己管理事务,而是将事务控制权交给外部容器(如Spring框架或者Java EE应用服务器如JBoss、WebLogic等)。这种情况下,容器负责启动、提交或回滚事务。通常在企业级应用程序中,容器提供了全局事务管理的能力,可以跨多个资源进行事务协调。
数据源(dataSource)

dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。

  • 大多数 MyBatis 应用程序会按示例中的例子来配置数据源。虽然数据源配置是可选的,但如果要启用延迟加载特性,就必须配置数据源。

有三种内建的数据源类型(也就是 type="[UNPOOLED|POOLED|JNDI]")

  1. UNPOOLED(非池化数据源):
    • UNPOOLED 类型的数据源每次请求数据库连接时都会创建一个新的连接实例。
    • 这种方式简单、轻量级,但不适合高并发场景,因为频繁创建和关闭数据库连接会消耗大量资源,并可能导致性能问题。
  2. POOLED(池化数据源):
    • POOLED 数据源是基于连接池实现的,它会预先创建一定数量的数据库连接并保持空闲状态,当应用程序需要使用数据库时,从池中取出一个连接,用完后归还给池而不是直接关闭。
    • 连接池技术可以有效提高系统的性能和稳定性,因为它能够重用已存在的数据库连接,减少创建和销毁连接带来的开销。
  3. JNDI(Java Naming and Directory Interface,Java命名和目录接口):
    • JNDI 数据源并不是 MyBatis 内部实现的连接池,而是通过JNDI查找机制来获取外部容器(如Tomcat、JBoss等应用服务器)管理的数据源。
    • 在企业级应用中,通常由应用服务器或容器统一管理数据库连接池,开发人员通过JNDI名称来引用这个已经配置好的数据源。
    • 使用 JNDI 数据源的优势在于它可以与容器整合,便于管理和配置,并且有助于应用服务器层面的资源隔离和优化。

properties

在MyBatis的配置文件中,<dataSource>元素是用来配置数据源的,用于定义如何连接数据库。

在 <dataSource> 内部可以使用多个 <property> 子元素来设置具体的属性值,以便正确初始化和配置数据源。

例如,对于一个基于 MyBatis 的POOLED 数据源配置,可能会包含以下 <property> 标签:

<dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mydatabase"/><property name="username" value="myuser"/><property name="password" value="mypassword"/><!-- 其他可能的属性 --><property name="poolSize" value="10"/><property name="maxIdle" value="8"/><property name="minIdle" value="2"/>
</dataSource>

上述配置中,每个 <property> 标签都指定了数据源的一个具体属性,如数据库驱动类名、数据库URL、用户名和密码等。不同的数据源类型(UNPOOLED、POOLED 或 JNDI)可能需要不同的属性配置。如果遇到错误“元素类型为 "dataSource" 的内容必须匹配 "(property)*"”,则意味着 <dataSource> 中的内容结构不正确,应当只包含零个或多个 <property> 子元素。

8. Mapper 接口方式

在多层架构开发中,我们常常按功能划分为控制层、业务层、DAO层

在 DAO 层设计中,一般都会设计接口来访问数据库

在MyBatis框架中,Mapper接口方式是一种基于接口编程的映射方式,它允许开发者通过定义一个Java接口来声明SQL操作,而无需编写XML配置文件。MyBatis会自动为这些接口生成代理对象,并处理方法调用到SQL执行的映射关系。

第一步:定义接口

IEmpDao接口

package com.wdzl.dao;import com.wdzl.pojo.Emp;import java.util.List;/*** 接口----特殊抽象类--高度抽象类--接口* 抽象---复杂问题简单化---忽略具体的实现细节* 接口---定义规范***/
public interface IEmpDao {void save(Emp emp);void delete(Emp emp);void update(Emp emp);Emp get(Integer empno);List<Emp> queryAll();
}
第二步:编写映射文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!---->
<!--1.要求: 命名空间必须和dao接口保持一致。取值 只能是接口完整类名因为可以把这里的映射文件理解成 DAO接口的实现类
-->
<mapper namespace="com.wdzl.dao.IEmpDao"><!--就是IEmpDao 接口中的get方法的实现--><select id="get" resultType="emp">select empno,ename,sal,hiredate from emp where empno=#{empno}</select><select id="queryAll" resultType="emp">select empno,ename,sal,hiredate from emp</select></mapper>

注意:

  • namespace 命名空间取值,必须是接口的完整限定名(全类名)
  • 编写SQL的标记元素id取值必须和接口中要实现的方法名保持一致
  • 标记元素 id 的实现不需要和接口全部一致,比如:可以实现部分抽象方法,可以额外增加其他名字的sql 标记
第三步:编写代码

通过 sqlSession.getMapper() 方式获取对应接口的代理对象

/*** Mapper 代理接口方式实现*/
public class EmpService {public static void main(String[] args) {
//        IEmpDao dao = new EmpDaoImpl();//SqlSessionSqlSession sqlSession = MyBatisUtil.getSqlSession();// 动态代理  动态根据接口实现生成对应的实现类的代理对象IEmpDao dao = sqlSession.getMapper(IEmpDao.class);Emp emp = dao.get(1);dao.queryAll().forEach(System.out::println);System.out.println(emp);}
}

这篇关于MyBatis 之三:配置文件详解和 Mapper 接口方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/810859

相关文章

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

MyBatis分页查询实战案例完整流程

《MyBatis分页查询实战案例完整流程》MyBatis是一个强大的Java持久层框架,支持自定义SQL和高级映射,本案例以员工工资信息管理为例,详细讲解如何在IDEA中使用MyBatis结合Page... 目录1. MyBATis框架简介2. 分页查询原理与应用场景2.1 分页查询的基本原理2.1.1 分

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

Redis 的 SUBSCRIBE命令详解

《Redis的SUBSCRIBE命令详解》Redis的SUBSCRIBE命令用于订阅一个或多个频道,以便接收发送到这些频道的消息,本文给大家介绍Redis的SUBSCRIBE命令,感兴趣的朋友跟随... 目录基本语法工作原理示例消息格式相关命令python 示例Redis 的 SUBSCRIBE 命令用于订

mybatis映射器配置小结

《mybatis映射器配置小结》本文详解MyBatis映射器配置,重点讲解字段映射的三种解决方案(别名、自动驼峰映射、resultMap),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定... 目录select中字段的映射问题使用SQL语句中的别名功能使用mapUnderscoreToCame

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e

mybatis-plus如何根据任意字段saveOrUpdateBatch

《mybatis-plus如何根据任意字段saveOrUpdateBatch》MyBatisPlussaveOrUpdateBatch默认按主键判断操作类型,若需按其他唯一字段(如agentId、pe... 目录使用场景方法源码方法改造首先在service层定义接口service层接口实现总结使用场景my

SpringBoot日志级别与日志分组详解

《SpringBoot日志级别与日志分组详解》文章介绍了日志级别(ALL至OFF)及其作用,说明SpringBoot默认日志级别为INFO,可通过application.properties调整全局或... 目录日志级别1、级别内容2、调整日志级别调整默认日志级别调整指定类的日志级别项目开发过程中,利用日志