首页 > 编程知识 正文

mybatis入门菜鸟教程,mybatis怎么学

时间:2023-05-03 22:22:11 阅读:278112 作者:3329

1.1 概述

MyBatis所有元素配置如下所示:


<?xml verison = "1.0" encoding = "UTF-8"?><configuration> <!--配置 --><properties/> <!--属性 --><settings/> <!--设置 --><typeAliases/> <!--类型命名 --><typeHandlers/> <!--类型处理器 --><objectFactory/> <!--对象工厂 --><plugins/> <!--插件 --><environments> <!--配置环境 --><environment> <!--环境变量 --><transactionManager/> <!--事务管理器 --><dataSource/> <!--数据源 --></environment></environments><databaseIdProvider/> <!--数据库厂商标识 --><mappers/> <!--映射器 --></configuration>

MyBatis的配置项顺序不能颠倒,如果一旦颠倒,那么在MyBatis启动阶段就会发生异常,导致程序无法运行。


1.2 properties属性

properties属性可以给系统配置一些运行参数,可以放在XML文件或者properties文件中,二不放在java编码里,这样使参数便于修改,而不会引起代码的重新编译。MyBatis提供三种方式让我们使用properties:property子元素,properties文件,程序代码传递。

1.2.1 property子元素

如果属性参数有很多,这种方式就不是好选择,可使用properties文件。

1.2.2 properties文件

这是比较普遍的方法,这个文件十分简单,其逻辑就是键值对应,可以配置多个键值放在应该properties文件中,也可以把多个键值放到多个properties文件中,这样方便日后维护和修改。

1.2.3 使用程序传递方式传递参数

真实生产环境下,运维人员为了保密,一般需要把用户和密码经过加密成为密文后,配置到properties文件中。要想连接数据库,首先使用Resource对象读取一个jdbc.properties配置文件,然后获取了它原先配置的用户和密码,进行解密重置,最后使用SqlSessionFactoryBuilder的build方法,传递多个properties参数来完成。

1.2.4 总结

这三种方式中,最优先的是程序传递方式,其次是使用properties文件,最后是property子元素的方式,MyBatis会根据优先级来覆盖原先配置的属性。

建议采用properties文件的方式,因为它简单易行,可以从XML文件中剥离出来独立维护。


1.3 settings设置

settings是MyBatis中最复杂的配置,它深刻影响MyBatis底层的运行,但是在大部分情况下使用默认值便可运行,所以在大部分情况下不需要大量配置它,只需要修改一些常用规则即可。比如关于缓存的cacheEnabled,关于级联的lazyLoadingEnabled和aggressiveLazyLoading,关于自动映射的autoMappingBehavior和mapUnderscoreToCamelCase,关于执行器类型的defaultExecutorType等。


1.4 typeAliases别名

由于类的全限定名称很长,在MyBatis中允许定义一个减下来代表这个类,这就是别名,别名分为系统定义别名和自定义别名。在MyBatis中别名由类TypeAliasRegistry(org.apche.ibatis.type.TypeAliasRegistry)去定义。别名不区分大小写。


1.5 typeHandle类型转换器

在JDBC中,需要在PrepareStatement对象中设置那些已经预编译过的SQL语句的参数。执行SQL后,会通过ResultSet对象获取得到的数据库的数据,而这些MyBatis是根据数据的类型通过typeHandle来实现的。在typeHandle中,分为jdbcType和javaType,其中jdbcType用于定义数据库类型,而javaType用于定义Java类型,那么typeHandle的作用就是承担jdbcType和javaType之间的相互转换。很多情况下我们并不需要去配置typeHandle、jdbcType、javaType,因为MyBatis会探测应该使用寿命类型的typeHandle进行处理,但是有些场景无法探测到。对应那些需要使用自定义枚举的场景,或者数据库使用特殊数据类型的场景,可以使用自定义的typeHandle去处理类型之间的转换问题。

和别名一样,MyBatis中存在系统定义TypeHandle和自定义typeHandle。MyBatis会根据javaType和数据库的jdbcType来决定采用哪个typeHandle处理这些转换规则。系统提供的typeHandle能覆盖大部分场景的要求,但是有些情况下不够,比如有特殊的转换规则,枚举类就是。


1.6 ObjectFactory

在创建结果集时,MyBatis会使用一个对象工厂来完成创建这个结果集实例。在默认的情况下,MyBatis会使用其定义的对象工厂——DefaultObjectFactory(org.apache.ibatis.reflection.factory.DefaultObjectFactory)来完成对应的工作。

MyBatis允许注册自定义的ObjectFactory,则需要实现接口org.apache.ibatis.reflection.factory.ObjectFactory,并给予配置。在大部分情况下,我们都不需要自定义返回规则,因为这些不就复杂而且容易出错,在更多的情况下,都会考虑继承系统已经实现好的DefaultObjectFactory,通过一定的改写来完成我们所需要的工作。


1.7 插件

插件是MyBatis中最强大和灵活的组件,同时也是最复杂的,而且它十分危险,因为它会覆盖MyBatis底层对象的核心方法和属性。如果操作不当将产生严重后果,甚至摧毁MyBatis框架。所以在研究插件之前,需要掌握MyBatis底层的构成和运行原理,否则难以安全高效地使用它。


1.8 environment

在MyBatis中,运行环境主要的作用是配置数据库信息,它可以配置多个数据库,一般而言只需要配置其中的一个就行。它下面又分为两个可配置的元素:事务管理器(transactionManager)、数据源(dataSource)。在实际的工作中,大部分情况会采用Spring对数据源和数据库的事务进行管理。

1.8.1 transactionManager

在MyBatis中,transactionManager提供了两个实现类,它需要实现接口Transaction(org.apache.ibatis.transaction.Transaction)。

它主要的工作就是提交(commit)、回滚(rollback)和关闭(close)数据库的事务。MyBatis为Transaction提供了两个实现类:JdbaTransaction和ManagedTransaction。

1.8.2 environment

environment的主要作用是配置数据库,在MyBatis中,数据库通过PooledDataSourceFactory、UnpooledDataSourceFactory和JndiDataSourceFactory三个工厂类来提供,前两者对应产生PooledDataSource、UnpooledDataSource类对象,而JndiDataSourceFactory则会根据JNDI的信息拿到外部容器实现的数据库连接对象。无论如何这三个工厂类,最后生成的产品都会是一个实现了DataSource接口的数据库连接对象。

以下是三种数据源。

1.UNPOOLED

UNPOLLED采用非数据库池的管理方式,每次请求都会打开一个新的数据库连接,所以创建会比较慢。在一些对性能要求不高的场合可以使用它。

2.POOLED

数据源POOLED利用“池”的概念将JDBC的Connection对象组织起来,它开始会有一些空置,并且已经连接好的数据库连接,所以请求时,无须再建立和验证,省去了创建新的连接实例时所必须的初始化和认证时间。它还控制最大连接数,避免过多的连接导致系统瓶颈。

3.JNDI

数据源JNDI的实现是为了能在如EJB或应用服务器这类容器中使用,容器可以集中或在外配置数据源,然后放置一个JNDI上下文的引用。


1.9 引入映射器的方法

映射器定义命名空间(namespace)的方法,命名空间对应的是一个接口的全路径,而不是实现类。引入映射器的方法有以下几种:文件路径,包名,类注册,userMapper.xml。



版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。