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

配置文件

MyBatis 的配置文件是 XML 格式的,它定义了 MyBatis 运行时的核心行为和设置。默认的配置文件名称为 mybatis-config.xml,该文件用于配置数据库连接、事务管理器、数据源、类型别名、映射器(mapper 文件)以及其他全局属性。

以下是一些主要配置元素的概览:

  1. 作为整个配置文件的根元素,所有其他配置项都包含在其中。
  2. 用于加载外部属性文件,这些属性可以在配置文件中其他地方通过 ${property} 引用。
  3. 设置 MyBatis 的全局配置参数,如自动映射模式、延迟加载策略、日志工厂等。
  4. 定义类型别名或类型处理器,简化类型在 SQL 映射文件中的表示以及自定义类型的处理方式。
  5. 注册 MyBatis 插件,例如拦截器以实现自定义的行为扩展。
  6. 配置环境,通常包括多个环境,每个环境有一个唯一的 ID,并且可以指定一个默认的环境。 每个环境内包含 元素,分别定义事务管理器和数据源配置。
  7. 可配置 JDBC、MANAGED 等事务管理器类型,控制事务边界。
  8. 数据源配置,可配置 UNPOOLED、POOLED、JNDI 等不同类型的数据源,用于连接数据库。
  9. 注册映射器接口或者 XML 映射文件,可以通过类路径或者绝对路径引用 mapper 接口或者 XML 文件。

示例配置结构如下:




    

    
        
    

    
        
    

    
        
    

    
        
            
            
                
                
                
                
            
        
        
    

    
        
        
        
    
properties

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

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

新建 db.properties 文件

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

在配置文件中使用:



    
    

注意:

在配置文件中的属性设置

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

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


    
    
        
        
        
        
    
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的配置文件中,元素是用来配置数据源的,用于定义如何连接数据库。

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

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


    
    
    
    

    
    
    
    

上述配置中,每个  标签都指定了数据源的一个具体属性,如数据库驱动类名、数据库URL、用户名和密码等。不同的数据源类型(UNPOOLED、POOLED 或 JNDI)可能需要不同的属性配置。如果遇到错误“元素类型为 "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 queryAll();
}
第二步:编写映射文件






    
    

    

注意:

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

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

/**
 * Mapper 代理接口方式实现
 */
public class EmpService {
    public static void main(String[] args) {
//        IEmpDao dao = new EmpDaoImpl();

        //SqlSession
        SqlSession 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,mybatis,java)