mybatis的核心配置之properties
创建jdbc.properties
一般在实际的项目中。数据库的连接信息。会存放在一个jdbc.properties的属性配置文件中
username=root password=root driverClass=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/mybatis
在mybatis-config.xml中修改引入properties资源
<!-- properties 配置一些属性。使用的时候,用${name} 进行输出 resource指定属性的位置 --> <properties resource="jdbc.properties"> <!-- 也可以在properties配置中定义一些属性。当然并不推荐 --> <property name="username" value="root"/> <property name="password" value="root"/> </properties>
特别说明:引入的jdbc.properties属性文件中的信息,会覆盖掉原来使用property标签定义的属性值。
修改原来数据库连接的信息。
<environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <!-- 配置数据库连接信息 --> <property name="driver" value="${driverClass}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> </dataSource> </environment> </environments>
mybatis的核心配置之settings
这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。常用的设置参数
cacheEnabled 该配置影响的所有映射器中配置的缓存的全局开关。 true | false 默认值true
lazyLoadingEnabled 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置fetchType属性来覆盖该项的开关状态。 true | false 默认值false
lazyLoadTriggerMethods 指定哪个对象的方法触发一次延迟加载。
mybatis的核心配置之typeAliases
类型别名是为 Java 类型设置一个短的名字。它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。
<!-- typeAliases 可以配置别名 --> <typeAliases> <!-- typeAlias 配置一个别名 type 是具体的全类名 alias 是别名 <typeAlias type="com.atguigu.pojo.User" alias="user"/> --> <!-- 通过配置包名,让程序自动扫描所有包下的类,自动加别名 自动加的别名是。类名首字母小写 User user --> <package name="com.atguigu.pojo"/> <package name="com.atguigu.entity"/> </typeAliases>
mybatis的核心配置之typeHandlers:这个我不经常用
JDK8,新特性,时间的处理。类型处理器。 <typeHandlers> <typeHandler handler="org.apache.ibatis.type.InstantTypeHandler" /> <typeHandler handler="org.apache.ibatis.type.LocalDateTimeTypeHandler" /> <typeHandler handler="org.apache.ibatis.type.LocalDateTypeHandler" /> <typeHandler handler="org.apache.ibatis.type.LocalTimeTypeHandler" /> <typeHandler handler="org.apache.ibatis.type.OffsetDateTimeTypeHandler" /> <typeHandler handler="org.apache.ibatis.type.OffsetTimeTypeHandler" /> <typeHandler handler="org.apache.ibatis.type.ZonedDateTimeTypeHandler" /> <typeHandler handler="org.apache.ibatis.type.YearTypeHandler" /> <typeHandler handler="org.apache.ibatis.type.MonthTypeHandler" /> <typeHandler handler="org.apache.ibatis.type.YearMonthTypeHandler" /> <typeHandler handler="org.apache.ibatis.type.JapaneseDateTypeHandler" /> </typeHandlers>
mybatis的核心配置之environments和transactionManager
<!-- environments标签用来定义多个数据库环境 --> <environments default="development"> <!-- environment用来定义一个数据库环境 --> <environment id="development"> <!-- transactionManager配置事务管理器 事务管理器类型有两种: JDBC – 这个配置就是直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务范围。 MANAGED – 这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 --> <transactionManager type="JDBC"/> <!-- 修改数据库的四个连接属性 --> <dataSource type="POOLED"> <property name="driver" value="${driverClass}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments>
environments
一般情况下。在工作的时候。会定义多个环境信息。<environment>
那么定义多个环境有什么用?
比如说:我可以定义一个环境是dev开发环境。可以在自己写代码的时候测试用。连接的是自己的数据库。
又定义一个环境run是实际布暑的数据库连接环境。
那么当我们要发布项目的时候。只需要把default值改为run就好
transactionManager
JDBC (JdbcTransactionFactory) – 这个配置就是直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务范围。
<transactionManager type=“JDBC” />
MANAGED (ManagedTransactionFactory)– 这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接,然而一些容器并不希望这样,因此需要将 closeConnection 属性设置为 false 来阻止它默认的关闭行为。例如:
<transactionManager type="MANAGED"> <property name="closeConnection" value="false"/> </transactionManager>
自定义:实现TransactionFactory接口,然后在type=全类名
注意:如果你正在使用 Spring + MyBatis,则没有必要配置事务管理器, 因为 Spring 模块会使用自带的管理器来覆盖前面的配置。一般情况下,我们都会整合Spring + MyBatis 一起使用。使用的都是Spring的事务管理。
dataSource 标签说明
<dataSource type=“POOLED”>
这个标签是配置是否启动数据库连接池配置。
type 属性的值有三种: UNPOOLED 、 POOLED 、 JNDI
UNPOOLED – 这个数据源的实现只是每次被请求时打开和关闭连接。虽然一点慢,它对在及时可用连接方面没有性能要求的简单应用程序是一个很好的选择。 不同的数据库在这方面表现也是不一样的,所以对某些数据库来说使用连接池并不重要,这个配置也是理想的。
POOLED – 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这是一种使得并发 Web 应用快速响应请求的流行处理方式。
JNDI – (Java Naming and Directory Interface) 这个数据源的实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。
自定义 - 实现DataSourceFactory接口,定义自己的数据源实现。
注意:一般情况下,我们都全整合Spring + MyBatis 一起使用。所以数据源整合之后都是使用Spring的数据源。
mybatis的核心配置之databaseIdProvider
MyBatis 可以根据不同的数据库厂商执行不同的语句,这种多厂商的支持是基于映射语句中的 databaseId 属性。 MyBatis 会加载不带 databaseId 属性和带有匹配当前数据库 databaseId 属性的所有语句。
<databaseIdProvider type="DB_VENDOR"> <property name="SQL Server" value="sqlserver" /> <property name="MySQL" value="mysql" /> <property name="DB2" value="db2" /> <property name="Oracle" value="oracle" /> </databaseIdProvider>
mybatis提供了一个类VendorDatabaseIdProvider,中的getDatabaseId() 方法用于获取数据库的标识。
property 标签name属性是获取数据库ID标识。
property 标签value属性是我们给mybatis定义的一个简短的标识。
databaseId测试
这样子,我们就可以在mapper的配置文件中,在定义sql语句的时候,添加标识。
<select id="selectUserById" parameterType="int" resultType="User" databaseId="mysql"> select id , last_name from t_user where id = #{value} </select>
这样子,当mybaits读取mapper中的sql语句的时候,只会读取和数据库标识对应得上的sql语句。
如果把 databaseId属性改为oracle。而当前的数据库是mysql的话。
<select id="selectUserById" parameterType="int" resultType="User" databaseId="oracle">
那么 执行selectUserById 语句的时候就会报错。
mybatis的核心配置之Mapper
把mapper配置文件注入到mybatis-config.xml核心配置文件中有三种常用方式。
1、在classpath路径下引入
2、使用mapper接口的形式导入配置
3、使用包扫描的方式引入配置文件
<!-- 从classpath路径下导入指定的配置文件 --> <mappers> <mapper resource="org/mybatis/builder/AuthorMapper.xml" /> <mapper resource="org/mybatis/builder/BlogMapper.xml" /> <mapper resource="org/mybatis/builder/PostMapper.xml" /> </mappers> <!-- 使用mapper接口类导入配置文件 --> <mappers> <mapper class="org.mybatis.builder.AuthorMapper" /> <mapper class="org.mybatis.builder.BlogMapper" /> <mapper class="org.mybatis.builder.PostMapper" /> </mappers> <!-- 扫描包下所有的配置文件 1、接口名和Mapper配置文件名必须相同 2、接口文件和Mapper配置文件必须在同一个包下 --> <mappers> <package name="org.mybatis.builder" /> </mappers>