MyBatis 核心设置文件具体内容详解

打印 上一主题 下一主题

主题 885|帖子 885|积分 2655

1. MyBatis 核心设置文件具体内容详解

@
目录


关于 MyBatis 这个核心设置文件mybatis-config.xml 文件名,不是固定的,所放的位置也不是固定的。
只是各人都这么定名,而位置,将该设置文件放到 resources 类的根路径下,移植性更好,使用起来也是更加的方便一些。
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration
  3.         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4.         "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6.     <environments default="mybatis">
  7.         <environment id="mybatis">
  8.             <transactionManager type="JDBC"/>
  9.             <dataSource type="POOLED">
  10. <dataSource type="POOLED">
  11.     <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
  12.     <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
  13.     <property name="username" value="root"/>
  14.     <property name="password" value="MySQL123"/>
  15. </dataSource><property name="driver" value="com.mysql.cj.jdbc.Driver"/>
  16. <dataSource type="POOLED">
  17.     <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
  18.     <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
  19.     <property name="username" value="root"/>
  20.     <property name="password" value="MySQL123"/>
  21. </dataSource><property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
  22. <dataSource type="POOLED">
  23.     <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
  24.     <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
  25.     <property name="username" value="root"/>
  26.     <property name="password" value="MySQL123"/>
  27. </dataSource><property name="username" value="root"/>
  28. <dataSource type="POOLED">
  29.     <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
  30.     <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
  31.     <property name="username" value="root"/>
  32.     <property name="password" value="MySQL123"/>
  33. </dataSource><property name="password" value="123"/>
  34.             </dataSource>
  35.         </environment>
  36.     </environments>
  37.     <mappers>
  38.         <mapper resource="CarMapper.xml"/>
  39.     </mappers>
  40. </configuration>
复制代码
mybatis-confg.xml ,也就是MyBatis 的核心设置文件,主要设置毗连数据库的信息等(**一般一个数据库,对应一个这个MyBatis 的核心设置文件),同样的与之对应的通过 mybatis-config.xml 核心设置文件' 所创建的对象:SqlSession FactoryBuilder,SqlSessionFactory 也是一个数据库相对应上一个对象。
MyBatis  核心设置文件的标签,属性的简单说明:如下:

  • configuration : 根标签,表现设置信息
  • environments : 设置环境(在MyBatis 的核心设置文件当中,可以设置多个),注意:一般s 结尾表现复数,也就是说MyBatis 的环境可以设置多个数据源.

    • default 属性:表现默认使用的是哪个环境,default背面填写的是 environment 的 id,default的值只需要和 environment 的 id 的值保持一致即可

  • envrionment:具体的环境变量(主要包括:事务管理的设置+数据源的设置信息

    • id:给当前环境一个唯一的标识,该标识用 environments 的default 背面,用来指定默认环境的选择。

  • transactionManager:设置事务管理器

    • type属性:指定事务管理用具体使用什么方式,可选值包括两个。


    • JDBC:使用 JDBC 原生的事务管理机制,底层管理:事务开启conn.setAutoCommit(false);...处置处罚业务,事务提交 conn.commit( )
    • MANAGED:交给其他容器来管理事务,好比:WebLogic,JBOSS,Spring等第三方框架进行事务的管理控制,如果没有设置第三方的框架管理的话,则就没有事务上的控制的了,没有事务(就是只要执行一条DML语句,则提交一次)

  • dataSource:指定数据源

    • type 属性:用来指定具体使用的数据库练级池的计谋(也就是设置参数),可选值包括三个:



  • UNPOOLED:采取传统的获取毗连的方式,虽然也实现了 javax.sql.DataSource 接口,但是并没有使用池的思想。

    • property 属性下可以设置:
    1. driver 这是JDBC驱动的Java类全限定名
    2. url 这是数据库的JDBC URL 地址
    3. usarname 登录数据库的用户名
    4. password 登录数据库的密码
    5. defaultTransactionlsolationLevel 默认的连接事务隔离级别
    6. defaultNetworkTimeout 等待数据库操作完成的默认网络超时实际(单位:毫秒)
    复制代码

    • POOLED:采取传统的 javax.sql.DataSource 规范中的毗连池,MyBatis 中有针对规范的实现。
    • 在 POOlED 中的设置下的,property 可以是(除了包罗 UNPOOLED中之外):
    1. poolMazimunmActiveConnections 在任意时间可存在的活动(正在使用)连接数量,默认值 10
    2. poolMaximumldleConnections 任意时间可能存在的空闲连接数。
    3. 其它...
    复制代码

    • JNDI:采取服务器提供的JNDI技能实现,来获取DataSource 对象,不同的服务器所能拿到 DataSource 是不一样,如果不是 web 大概 maven 的 war 工程,JNDI 是不能使用的。
    • 在JNDI 下的 property 属性设置,只有两个值:
    1. initial_context 这个属性用来在 InitialContext 中寻找上下文(即,initialContext.lookup(initial_context))这是个可选属性,如果忽略,那么将会直接从 InitialContext 中寻找 data_source 属性。
    2. data_source 这是引用数据源实例位置的上下文路径。提供了 initial_context 配置时会在其返回的上下文中进行查找,没有提供时则直接在 InitialContext 中查找。
    复制代码
    简单的说就是:就是 Web容器(好比Tomcat)当中上面我们使用了数据库毗连池,我们JNDI就只需要获取到Tomcat(这层我们使用的数据库毗连池)就可以了,不需要再额外的去,搞个数据库毗连池。

  • mappers:在mappers 标签中可以设置多个 SQL  映射文件的路径。
  • mapper:设置某个 SQL 映射文件的路径

    • resource 属性:使用相对于类路径的资源引用方式
    • url 属性:使用完全限定资源定位符(URL)方式

MyBatis 核心设置,可以设置的内容,细节是比力多的,上述只是写明了一些比力常用的,一些设置,更多内容各人可以移步至:✏️✏️✏️https://mybatis.net.cn/configuration.html  ,了解更多细节,设置。

2. 测试和学习的准备工作

两个 mybatis,mybatis2 数据库,分别都有t_car 数据表。

t_car 表结构:

对应上的 CarMapper.xml SQL语句的映射文件的编写。
这里因为是测试,以是我们简单点,直接将其写固定好了,测试学习,就添加了一个 insert 插入操纵了。
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3.         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4.         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="car">
  6.     <insert id="insertCar">
  7.        insert into t_car values(null,'888','奥迪',30.0,'2000-11-11','燃油车2')
  8.     </insert>
  9. </mapper>
复制代码
在 pom.xml 文件当中导入相关的依赖 jar 包内容。如下:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5.     <modelVersion>4.0.0</modelVersion>
  6.     <groupId>com.rianbowsea</groupId>
  7.     <artifactId>mybatis-004-configuration-blog</artifactId>
  8.     <version>1.0-SNAPSHOT</version>
  9.     <properties>
  10.         <maven.compiler.source>17</maven.compiler.source>
  11.         <maven.compiler.target>17</maven.compiler.target>
  12.     </properties>
  13.     <dependencies>
  14.         <dependency>
  15.             <groupId>org.mybatis</groupId>
  16.             <artifactId>mybatis</artifactId>
  17.             <version>3.5.10</version>
  18.         </dependency>
  19.         <dependency>
  20.             <groupId>junit</groupId>
  21.             <artifactId>junit</artifactId>
  22.             <version>4.13.2</version>
  23.             <scope>test</scope>
  24.         </dependency>
  25.         <dependency>
  26.             <groupId>mysql</groupId>
  27.             <artifactId>mysql-connector-java</artifactId>
  28.             <version>8.0.30</version>
  29.         </dependency>
  30.         
  31.         <dependency>
  32.             <groupId>ch.qos.logback</groupId>
  33.             <artifactId>logback-classic</artifactId>
  34.             <version>1.2.11</version>
  35.         </dependency>
  36.     </dependencies>
  37. </project>
复制代码
为了方便看到,相应的变革,这里我们需要导入一个;logback日志框架信息,同时设置该 logback 日志框架的设置,需要注意的是:该文件名,必须为"logback.xml" 而且要在类路径下。
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration debug="false">
  3.    
  4.     <appender name="STDOUT" >
  5.         <encoder >
  6.             
  7.             <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
  8.         </encoder>
  9.     </appender>
  10.    
  11.     <logger name="com.apache.ibatis" level="TRACE"/>
  12.     <logger name="java.sql.Connection" level="DEBUG"/>
  13.     <logger name="java.sql.Statement" level="DEBUG"/>
  14.     <logger name="java.sql.PreparedStatement" level="DEBUG"/>
  15.    
  16.     <root level="DEBUG">
  17.         <appender-ref ref="STDOUT"/>
  18.         <appender-ref ref="FILE"/>
  19.     </root>
  20. </configuration>
复制代码
3. environment 标签


标签表现:设置环境(在MyBatis 的核心设置文件当中,可以设置多个),注意:一般s 结尾表现复数,也就是说MyBatis 的环境可以设置多个数据源.

既然有多个那么就有默认的了,在  标签 中有一个 defalut 属性值,它是标识默认使用的环境(也就是哪个数据库)。

默认环境是什么意思,当你使用mybatis创建 sqlSessionFactory 对象的时候,没有指定环境的话,默认使用的就是,这里 default 指定的数据库的环境-
其中的一个环境,毗连的数据库是 mybatis
一般一个数据库会对应上一个SqlSessionFactory对象
一个环境environment 对对应上一个SqlSessionFactory对象
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration
  3.         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4.         "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6.     <environments default="mybatis">
  7.         <environment id="mybatis">
  8.             <transactionManager type="JDBC"/>
  9.             <dataSource type="POOLED">
  10. <dataSource type="POOLED">
  11.     <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
  12.     <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
  13.     <property name="username" value="root"/>
  14.     <property name="password" value="MySQL123"/>
  15. </dataSource><property name="driver" value="com.mysql.cj.jdbc.Driver"/>
  16. <dataSource type="POOLED">
  17.     <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
  18.     <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
  19.     <property name="username" value="root"/>
  20.     <property name="password" value="MySQL123"/>
  21. </dataSource><property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
  22. <dataSource type="POOLED">
  23.     <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
  24.     <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
  25.     <property name="username" value="root"/>
  26.     <property name="password" value="MySQL123"/>
  27. </dataSource><property name="username" value="root"/>
  28. <dataSource type="POOLED">
  29.     <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
  30.     <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
  31.     <property name="username" value="root"/>
  32.     <property name="password" value="MySQL123"/>
  33. </dataSource><property name="password" value="123"/>
  34.             </dataSource>
  35.         </environment>
  36.     </environments>
  37.     <mappers>
  38.         <mapper resource="CarMapper.xml"/>
  39.     </mappers>
  40. </configuration><?xml version="1.0" encoding="UTF-8" ?>
  41. <!DOCTYPE configuration
  42.         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  43.         "http://mybatis.org/dtd/mybatis-3-config.dtd">
  44. <configuration>
  45.     <environments default="mybatis">
  46.         <environment id="mybatis">
  47.             <transactionManager type="JDBC"/>
  48.             <dataSource type="POOLED">
  49. <dataSource type="POOLED">
  50.     <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
  51.     <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
  52.     <property name="username" value="root"/>
  53.     <property name="password" value="MySQL123"/>
  54. </dataSource><property name="driver" value="com.mysql.cj.jdbc.Driver"/>
  55. <dataSource type="POOLED">
  56.     <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
  57.     <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
  58.     <property name="username" value="root"/>
  59.     <property name="password" value="MySQL123"/>
  60. </dataSource><property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
  61. <dataSource type="POOLED">
  62.     <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
  63.     <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
  64.     <property name="username" value="root"/>
  65.     <property name="password" value="MySQL123"/>
  66. </dataSource><property name="username" value="root"/>
  67. <dataSource type="POOLED">
  68.     <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
  69.     <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
  70.     <property name="username" value="root"/>
  71.     <property name="password" value="MySQL123"/>
  72. </dataSource><property name="password" value="123"/>
  73.             </dataSource>
  74.         </environment>
  75.     </environments>
  76.     <mappers>
  77.         <mapper resource="CarMapper.xml"/>
  78.     </mappers>
  79. </configuration>        
复制代码
在Java当中使用默认的 enviroment 环境(也就是数据库)的编码方式如下:
  1. // 获取SqlSessionFactory 对象(采用默认的方式)
  2.         SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
  3.         // 这种方式就是获取默认的环境,因为你并没有指明其对应的环境
  4.         SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsReader("mybatis-config.xml"));
复制代码
  1.     public void testEnvironment() throws IOException {        // 获取SqlSessionFactory 对象(采用默认的方式)
  2.         SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
  3.         // 这种方式就是获取默认的环境,因为你并没有指明其对应的环境
  4.         SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsReader("mybatis-config.xml"));        SqlSession sqlSession = sqlSessionFactory.openSession();        // 执行sql语句        int count = sqlSession.insert("car.insertCar"); // 完备的 namespace.id        System.out.println(count);        sqlSession.commit();        sqlSession.close();    }
复制代码

在Java当中使用 指定的 enviroment 环境(也就是数据库)的 编码方式如下:

  1. // 获取SqlSessionFactory 对象(采用默认的方式)
  2.         SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
  3.         // 这种方式就是通过环境id来使用指定的环境
  4.         SqlSessionFactory sqlSessionFactory2 =
  5. <dataSource type="POOLED">
  6.     <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
  7.     <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
  8.     <property name="username" value="root"/>
  9.     <property name="password" value="MySQL123"/>
  10. </dataSource>sqlSessionFactoryBuilder.build(Resources.getResourceAsReader("mybatis-config.xml"), "mybatis2");
复制代码
  1.     public void testEnvironment() throws IOException {        // 获取SqlSessionFactory 对象(采用默认的方式)
  2.         SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
  3.         // 这种方式就是通过环境id来使用指定的环境
  4.         SqlSessionFactory sqlSessionFactory2 =
  5. <dataSource type="POOLED">
  6.     <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
  7.     <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
  8.     <property name="username" value="root"/>
  9.     <property name="password" value="MySQL123"/>
  10. </dataSource>sqlSessionFactoryBuilder.build(Resources.getResourceAsReader("mybatis-config.xml"), "mybatis2");        SqlSession sqlSession2 = sqlSessionFactory2.openSession();        // 执行SQL语句        int count2 = sqlSession2.insert("car.insertCar");        sqlSession2.commit();        sqlSession2.close();    }
复制代码

4. transactionManager 标签

transactionManager  我在这篇文章:✏️✏️✏️ 初始MyBatis ,具体步骤运行第一个MyBatis程序,同时对应步骤MyBatis底层剖析-CSDN博客 进行了更加具体的解说说明,但为了包管文章的完备性,关于 transactionManager 标签的内容,这里轻微简短一些了。

transactionManager标签
作用:设置事务管理器,指定Mybatis具体使用什么方式去管理事务
type属性有两个值:

  • 第一个:JDBC: 使用原生的JDBC代码来管理事务
    conn.seAutoCommit( false )
    ...事务
    conn.commit( );
  • 第二个:MANAGED
    mybatis 不再负责事务的管理,将事务管理交给其它的JEE(JavaEE)容器来管理。 例如:spring
大小写无所谓,不区分大小写,但是不能不写其他值,只能是二选一(  jdbc;managed)
在mybatis中提供了一个事务管理器接口:Transaction;org.apache.ibatis.transaction;
该接口下有两大实现类
JdbcTransaction
ManagedTransaction



  • 如果type="JDBC",那么底层会实例化JdbcTransaction对象
  • 如果type="MANAGED",那么底层会实例化ManagedTransaction对象
5. dataSource 标签
  1. <dataSource type="POOLED">
  2.     <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
  3.     <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
  4.     <property name="username" value="root"/>
  5.     <property name="password" value="MySQL123"/>
  6. </dataSource>
复制代码
dataSource 设置

dataSource 被称之为 数据源
dataSource 作用是什么 ?
为程序员提供Connection对象,(但凡是给程序员提供 Connection毗连对象的,都叫做数据源)
我们本身也可以编写数据源组件,只要实现 javax.sql.DataSource接口就行了,

实现接口当中全部的方法,如许就有了本身的数据源了。好比你可以写一个属于本身的数据库毗连池(数据库毗连池就是提供毗连对象(Connection)的,以是数据库毗连池就是一个数据源)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

知者何南

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表