大佬教程收集整理的这篇文章主要介绍了Mybatis(二),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我们已经在之前的学习中,学会了如何编写一个简单的 Mybatis 项目。很显然这还远远没有正真了解 Mybatis。我们从 Mybatis 核心配置文件 mybatis-config 开始优化我们的项目。
在核心配置文件中 properties 是一个很重要的标签。它为 XML 提供外来配置,可以进行动态替换,其中最重要的就在于连接数据库字符串的配置。我们在 resources 文件夹下新建一个 db.properties 文件:
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/kimari?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
username=root
password=123456
在这之后只需要在 XML 中添加一个 properties 标签,我们就可以简化我们的 XML 文件代码了:
<properties resource="db.properties"/>
<datasource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${usernamE}"/>
<property name="password" value="${passworD}"/>
</datasource>
如果一个属性在不只一个地方进行了配置,那么,MyBatis 将按照下面的顺序来加载:
类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写。例如:
<typeAliases>
<typeAlias alias="Author" type="domain.blog.Author"/>
<typeAlias alias="Blog" type="domain.blog.blog"/>
<typeAlias alias="Comment" type="domain.blog.Comment"/>
<typeAlias alias="Post" type="domain.blog.Post"/>
<typeAlias alias="Section" type="domain.blog.Section"/>
<typeAlias alias="Tag" type="domain.blog.Tag"/>
</typeAliases>
当然你还可以直接扫描一个包来给这个包里所有的类设置类型别名:
<typeAliases>
<package name="com.kimari.pojo"/>
</typeAliases>
下面是一些为常见的 Java 类型内建的类型别名。它们都是不区分大小写的,注意,为了应对原始类型的命名重复,采取了特殊的命名风格。
别名 | 映射的类型 |
---|---|
_byte | byte |
_long | long |
_short | short |
_int | int |
_Integer | int |
_double | double |
_float | float |
_Boolean | Boolean |
String | String |
byte | Byte |
long | Long |
short | Short |
int | Integer |
Integer | Integer |
double | Double |
float | Float |
Boolean | Boolean |
date | Date |
decimal | Bigdecimal |
bigdecimal | Bigdecimal |
object | Object |
hashmap | HashMap |
list | List |
arraylist | ArrayList |
collection | Collection |
iterator | Iterator |
除了用 XML 配置别名,你还可以选择用 @Alias
注解来设置别名:
@Alias("author")
public class Author {
...
}
这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。 下面是重要的几种属性:
cacheEnabled
全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。默认是 true
lazyLoadingEnabled
延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 fetchType
属性来覆盖该项的开关状态。默认是 false
@H_491_233@mapUnderscoreToCamelCase
是否开启驼峰命名自动映射,即从经典数据库列名 A_columN 映射到经典 Java 属性名 acolumn。默认是 false
logImpl
指定 MyBatis 所用日志的具体实现,未指定时将自动查找。可以选择 SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING
其中 STDOUT_LOGGING 是标准日志输出,它不需要其他依赖,直接就能输出。
不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。
<environments default="development">
<environment id="development">
<transactionManager type="JDBC">
<property name="..." value="..."/>
</transactionManager>
<datasource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${usernamE}"/>
<property name="password" value="${passworD}"/>
</datasource>
</environment>
</environments>
事务管理器(transactionManager)
在 MyBatis 中有两种类型的事务管理器(也就是 type="[JDBC|MANAGED]"):
数据源(datasource)
datasource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。
有三种内建的数据源类型(也就是 type="[UNPOOLED|POOLED|JNDI]"):
UNPOOLED– 这个数据源的实现会每次请求时打开和关闭连接。虽然有点慢,但对那些数据库连接可用性要求不高的简单应用程序来说,是一个很好的选择。 性能表现则依赖于使用的数据库,对某些数据库来说,使用连接池并不重要,这个配置就很适合这种情形。
POOLED– 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这种处理方式很流行,能使并发 Web 应用快速响应请求。
JNDI – 这个数据源实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的数据源引用。
既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要来定义 SQL 映射语句了。 但首先,我们需要告诉 MyBatis 到哪里去找到这些语句。 在自动查找资源方面,Java 并没有提供一个很好的解决方案,所以最好的办法是直接告诉 MyBatis 到哪里去找映射文件。 你可以使用相对于类路径的资源引用,或完全限定资源定位符(包括 file:///
形式的 URL),或类名和包名等。例如:
<!-- 使用相对于类路径的资源引用 -->
<mappers>
<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
<mapper resource="org/mybatis/builder/BlogMapper.xml"/>
<mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>
<!-- 使用映射器接口实现类的完全限定类名 -->
<mappers>
<mapper class="org.mybatis.builder.AuthorMapper"/>
<mapper class="org.mybatis.builder.blogMapper"/>
<mapper class="org.mybatis.builder.PostMapper"/>
</mappers>
<!-- 将包内的映射器接口实现全部注册为映射器 -->
<mappers>
<package name="org.mybatis.builder"/>
</mappers>
如果出现 mapper 文件没有输出到 target 目录下,你需要在你的 pom.xml 文件中追加以下内容!
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
一个简单查询的 SELEct 元素是非常简单的。比如:
<SELEct id="getUserById" parameterType="_int" resultType="user">
SELEct *
from kimari.user
where id = #{iD};
</SELEct>
这个语句名为 getUserById,接收一个 int 类型的参数,并返回一个 User 类型的对象(由于前面已经介绍了别名,我们将省略全限命名)。先介绍几个比较重要的属性:
id
:在命名空间中唯一的标识符,可以被用来引用这条语句。parameterType
:将会传入这条语句的参数的类全限定名或别名。这个属性是可选的,因为 MyBatis 可以通过类型处理器(TypeHandler)推断出具体传入语句的参数,默认值为未设置(unset)。resultType
:期望从这条语句中返回结果的类全限定名或别名。 注意,如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身的类型。 resultType 和 resultMap 之间只能同时使用一个。resultMap
:对外部 resultMap 的命名引用。结果映射是 MyBatis 最强大的特性,如果你对其理解透彻,许多复杂的映射问题都能迎刃而解。 resultType 和 resultMap 之间只能同时使用一个。数据变更语句 insert,update 和 delete 的实现非常接近:
<insert id="addUser" parameterType="user">
insert into kimari.user(id, name, pwd)
values (#{iD}, #{name}, #{pwD});
</insert>
<update id="updateUser" parameterType="user">
update kimari.user
set name = #{name},
pwd = #{pwD}
where id = #{iD};
</update>
<delete id="deleteUser">
delete
from kimari.user
where id = #{iD};
</delete>
下面是比较重要的属性:
id
:在命名空间中唯一的标识符,可以被用来引用这条语句。parameterType
:将会传入这条语句的参数的类全限定名或别名。这个属性是可选的,因为 MyBatis 可以通过类型处理器(TypeHandler)推断出具体传入语句的参数,默认值为未设置(unset)。以上是大佬教程为你收集整理的Mybatis(二)全部内容,希望文章能够帮你解决Mybatis(二)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。