MyBatis学记笔记,超详细!!(2)

本期更新MyBatis核心配置文件详解

上期链接MyBatis学记笔记,超详细!!(1)

另外还有我的牛客Java专项练习笔记专栏Spring框架学习专栏MySQL数据库学习专栏也在同步更新,希望大家多多关注,一起学习!!!

4. MyBatis核心配置文件详解

<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/powernode"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="CarMapper.xml"/>
        <mapper resource="CarMapper2.xml"/>
    </mappers>
</configuration>
  • configuration:根标签,表示配置信息。

  • environments:环境(多个),以“s”结尾表示复数,也就是说mybatis的环境可以配置多个数据源。

  • default属性:表示默认使用的是哪个环境,default后面填写的是environment的id。==default的值只需要和environment的id值一致即可。==

  • environment:具体的环境配置(主要包括:==事务管理器的配置 + 数据源的配置==)

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

  • transactionManager:配置事务管理器

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

  • JDBC:使用JDBC原生的事务管理机制。==底层原理:事务开启conn.setAutoCommit(false); ...处理业务...事务提交conn.commit();==

  • MANAGED:交给其它容器来管理事务,比如WebLogic、JBOSS等。如果没有管理事务的容器,则没有事务。没有事务的含义:只要执行一条DML语句,则提交一次。

  • dataSource:指定数据源

  • type属性:用来指定具体使用的数据库连接池的策略,可选值包括三个

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

  • property可以是:

  • driver 这是 JDBC 驱动的 Java 类全限定名。

  • url 这是数据库的 JDBC URL 地址。

  • username 登录数据库的用户名。

  • password 登录数据库的密码。

  • defaultTransactionIsolationLevel 默认的连接事务隔离级别。

  • defaultNetworkTimeout 等待数据库操作完成的默认网络超时时间(单位:毫秒)

  • POOLED:采用传统的javax.sql.DataSource规范中的连接池,mybatis中有针对规范的实现。

  • property可以是(除了包含UNPOOLED中之外):

  • poolMaximumActiveConnections 在任意时间可存在的活动(正在使用)连接数量,默认值:10

  • poolMaximumIdleConnections 任意时间可能存在的空闲连接数。

  • 其它....

  • JNDI:采用服务器提供的JNDI技术实现,来获取DataSource对象,不同的服务器所能拿到DataSource是不一样。如果不是web或者maven的war工程,JNDI是不能使用的。

  • property可以是(最多只包含以下两个属性):、

  • initial_context 这个属性用来在 InitialContext 中寻找上下文(即,initialContext.lookup(initial_context))这是个可选属性,如果忽略,那么将会直接从 InitialContext 中寻找 data_source 属性。

  • data_source 这是引用数据源实例位置的上下文路径。提供了 initial_context 配置时会在其返回的上下文中进行查找,没有提供时则直接在 InitialContext 中查找。

  • mappers:在mappers标签中可以配置多个sql映射文件的路径。

  • mapper:配置某个sql映射文件的路径

  • resource属性:使用相对于类路径的资源引用方式

  • url属性:使用完全限定资源定位符(URL)方式

4.1 environment

  • 核心配置文件

<configuration>
    <!--默认使用开发环境-->
    <!--<environments default="dev">-->
    <!--默认使用生产环境-->
    <environments default="production">
        <!--开发环境-->
        <environment id="dev">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/powernode"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
        <!--生产环境-->
        <environment id="production">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="CarMapper.xml"/>
    </mappers>
</configuration>
  • java

public class ConfigurationTest {

    @Test
    public void testEnvironment() throws Exception{
        // 准备数据
        Car car = new Car();
        car.setCarNum("133");
        car.setBrand("丰田霸道");
        car.setGuidePrice(50.3);
        car.setProduceTime("2020-01-10");
        car.setCarType("燃油车");

        // 一个数据库对应一个SqlSessionFactory对象
        // 两个数据库对应两个SqlSessionFactory对象,以此类推
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();

        // 使用默认数据库
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        int count = sqlSession.insert("insertCar", car);
        System.out.println("插入了几条记录:" + count);

        // 使用指定数据库
        SqlSessionFactory sqlSessionFactory1 = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"), "dev");
        SqlSession sqlSession1 = sqlSessionFactory1.openSession(true);
        int count1 = sqlSession1.insert("insertCar", car);
        System.out.println("插入了几条记录:" + count1);
    }
}

4.2 transactionManager

  • 核心配置文件

<configuration>
    <environments default="dev">
        <environment id="dev">
            <transactionManager type="MANAGED"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/powernode"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="CarMapper.xml"/>
    </mappers>
</configuration>

当事务管理器是:JDBC

  • 采用JDBC的原生事务机制:

  • 开启事务:conn.setAutoCommit(false);

  • 处理业务......

  • 提交事务:conn.commit();

当事务管理器是:MANAGED

  • 交给容器去管理事务,但目前使用的是本地程序,没有容器的支持,==当mybatis找不到容器的支持时:没有事务。==也就是说只要执行一条DML语句,则提交一次。

4.3 datasource

  • 当type是UNPOOLED

  • 修改配置文件mybatis-config3.xml中的配置:

<dataSource type="POOLED">
通过测试得出:==UNPOOLED不会使用连接池,每一次都会新建JDBC连接对象==。POOLED会使用数据库连接池。【这个连接池是mybatis自己实现的。】
JNDI的方式:表示对接JNDI服务器中的连接池。这种方式给了我们可以使用第三方连接池的接口。如果想使用dbcp、c3p0、druid(德鲁伊)等,需要使用这种方式。

4.4 propertis

mybatis提供了更加灵活的配置,连接数据库的信息可以单独写到一个属性资源文件中,假设在类的根路径下创建jdbc.properties文件,配置如下:

  • jdbc.properties

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/xxxxxx
jdbc.username=root
jdbc.password=1234
  • 在核心配置文件引入

<configuration>
    <environments default="dev">
        <environment id="dev">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!--${key}使用-->
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="CarMapper.xml"/>
    </mappers>
</configuration>

4.5 mapper

mapper标签用来指定SQL映射文件的路径,包含多种指定方式,这里先主要看其中两种:

第一种:resource,从类的根路径下开始加载【比url常用】

<mappers>
  <mapper resource="CarMapper.xml"/>
</mappers>

第二种:url,从指定的url位置加载

<mappers>
  <mapper url="file:///d:/CarMapper.xml"/>
</mappers>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MyBatis是一种开源持久层框架,它可以帮助我们实现将Java对象映射到关系型数据库中的数据。下面是MyBatis详细笔记: 1. MyBatis的介绍 MyBatis是一种Java持久层框架,它可以帮助我们实现将Java对象映射到关系型数据库中的数据。MyBatis是一种比较灵活的框架,它不会对应用程序中的Java对象进行任何修改,而是直接使用对象。 2. MyBatis的核心组件 MyBatis的核心组件包括SqlSessionFactory、SqlSession、Mapper和XML映射文件。 SqlSessionFactory:SqlSessionFactory是MyBatis的核心组件之一,它负责创建SqlSession对象。它是线程安全的,因此可以被多个线程共享。 SqlSession:SqlSession是MyBatis的另一个核心组件,它提供了与数据库交互的方法,包括查询、插入、更新和删除。SqlSession是非线程安全的,因此每个线程都应该有自己的SqlSession对象。 Mapper:Mapper是一个接口,它定义了与数据库交互的方法。MyBatis可以根据Mapper接口创建代理对象,从而实现对数据库的访问。 XML映射文件:XML映射文件定义了Java对象与数据库表之间的映射关系。它包含了SQL语句、参数映射和结果映射等信息。 3. MyBatis的配置 MyBatis的配置文件包括以下几个部分: 数据源配置:数据源是与数据库建立连接的入口。MyBatis支持多种数据源,包括JDBC、C3P0和Druid等。 事务管理器配置:MyBatis支持事务管理,可以通过配置事务管理器来实现事务控制。 Mapper配置:Mapper接口与XML映射文件的配置。 4. MyBatis的使用 MyBatis的使用可以分为以下几个步骤: 创建SqlSessionFactory对象:SqlSessionFactory是MyBatis的核心组件之一,它负责创建SqlSession对象。 创建SqlSession对象:SqlSession是MyBatis的另一个核心组件,它提供了与数据库交互的方法,包括查询、插入、更新和删除。 执行SQL语句:MyBatis支持多种SQL语句,包括查询、插入、更新和删除等。 关闭SqlSession对象:SqlSession是非线程安全的,因此每个线程都应该有自己的SqlSession对象。使用完SqlSession对象后应该将其关闭,以释放资源。 5. MyBatis的优点 MyBatis具有以下优点: 灵活性:MyBatis是一种比较灵活的框架,它不会对应用程序中的Java对象进行任何修改,而是直接使用对象。 易于使用:MyBatis的使用非常容易,可以通过简单的配置文件和Mapper接口来实现对数据库的访问。 高效性:MyBatis的性能非常高,它可以通过SQL语句的优化来提高查询的效率。 6. MyBatis的缺点 MyBatis的缺点包括以下几个方面: 学习曲线较陡峭:MyBatis学习曲线比较陡峭,需要一定的Java和SQL知识才能使用。 XML映射文件较复杂:MyBatis的XML映射文件比较复杂,需要深入了解其语法和规则才能编写正确的映射文件。 7. 总结 MyBatis是一种开源持久层框架,它可以帮助我们实现将Java对象映射到关系型数据库中的数据。MyBatis具有灵活、易于使用和高效等优点,但学习曲线较陡峭,XML映射文件较复杂。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值