MyBatis介绍与配置

简介: MyBatis 是一款优秀的持久层框架,有自定义 SQL、高级映射等功能,支持 XML 方式或注解方式来配置映射。


一、概述



MyBatis 应用都以一个 SqlSessionFactory 实例为核心,它可以构建 SqlSession 实例,SqlSession 提供了数据库操作的所有方法,也可以直接执行已映射的 SQL 语句。


微信图片_20220520112800.png

SqlSessionFactoryBuilder 通过 Configuration 配置类来构建 SqlSessionFactory

配置类可以是来自 XML 格式的任意输入流,也可以直接使用 Java 类。


二、SqlSessionFactory



1. 构建


基于 XML 文件构建

创建一个 mybatis-config.xml 文件来定义配置。

<configuration>
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    <environments default="dev">
        <environment id="dev">
            <transactionManager type="MANAGED"/>
            <dataSource type="POOLED">
                <property name="driver" value="DATABASE_DRIVER"/>
                <property name="url" value="DATABASE_URL"/>
                <property name="username" value=""/>
                <property name="password" value=""/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>
</configuration>


基于 XML 配置创建 SqlSessionFactory 实例。

InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);


基于 Java 类构建

直接使用 Java 类定义配置,配置中添加一个 UserMapper 映射。

DataSource dataSource = new PooledDataSource(DATABASE_DRIVER, DATABASE_URL, "", "");
Environment env = new Environment("dev", new ManagedTransactionFactory(), dataSource);
Configuration configuration = new Configuration();
configuration.setMapUnderscoreToCamelCase(true);
configuration.setEnvironment(env);
configuration.addMapper(UserMapper.class);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);


因为基于 Java 类不使用 XML 配置,所以需要基于注解创建映射。

如果仍需基于 XML 创建映射,可以在 Mapper 接口相同路径下创建一个同名 XML 映射文件。

例如在 UserMapper.class 接口相同路径下创建 UserMapper.xml 文件


2. 映射

创建一个数据库操作的 Mapper 接口。

public interface UserMapper {
    User selectById(Long id);
}


基于 XML 创建映射

新建 UserMapper.xml 文件,namespace 指定 Mapper 接口,指定接口方法 SQL 映射。

<mapper namespace="cn.codeartist.mybatis.mapper.UserMapper">
    <select id="selectById" resultType="cn.codeartist.mybatis.entity.User">
        SELECT * FROM t_user WHERE id = #{id}
    </select>
</mapper>


基于注解创建映射

直接在 Mapper 接口方法上使用 @Select 注解指定 SQL。

public interface UserMapper {
    @Select("SELECT * FROM t_user WHERE id = #{id}")
    User selectById(Long id);
}


3. 运行

使用构建的 SqlSessionFactory 获取 SqlSession 实例,使用 SqlSession 获取 Mapper 映射接口。

try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    User user = userMapper.selectById(1L);
    System.out.println(user);
}


三、Configuration



1. 属性设置

MyBatis 配置文件中,可以使用  来指定属性,也可以读取外部 Java 属性文件。

配置好的属性在整个配置文件中可以使用 ${} 占位符来指定。

# config.properties
url=jdbc:h2:mem:default;MODE=MySQL;INIT=RUNSCRIPT FROM 'classpath:sql/init.sql'


属性使用示例如下:

<!-- 导入config.properties属性文件和指定driver属性 -->
<properties resource="config.properties">
    <property name="driver" value="org.h2.Driver"/>
</properties>
<!-- 在数据源配置中使用属性 -->
<dataSource type="POOLED">
    <property name="driver" value="${driver}"/>
    <property name="url" value="${url}"/>
    <property name="username" value=""/>
    <property name="password" value=""/>
</dataSource>

MyBatis 配置文件中,可以使用  来指定重要的设置。

<!-- 设置 -->
<settings>
    <!-- 是否开启下划线-驼峰命名自动映射 -->
    <setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>


2. 数据源


MyBatis 支持不同环境指定不同的数据源配置,例如:本地、测试、生产等,但在实际应用中,一般会使用外部的环境隔离配置,比如使用 Spring 的 Profile 区分环境配置,所以不细讲。

同样的,MyBatis 的事务管理一般由外部容器提供,比如使用 Spring 的事务管理器,所以这里只需指定 MANAGED 即可。

<environments default="dev">
    <environment id="dev">
        <transactionManager type="MANAGED"/>
        <dataSource type="POOLED">
            <property name="driver" value="${driver}"/>
            <property name="url" value="${url}"/>
            <property name="username" value=""/>
            <property name="password" value=""/>
        </dataSource>
    </environment>
</environments>


数据源配置中,重点是数据源类型,一般使用 POOLED 线程池类型,也可以使用三方的数据库连接池,比如阿里的 DruidDataSource


3. 类型别名


类型别名为 Java 实体类型设置一个缩写。仅用于 XML 配置,例如:

<typeAliases>
    <typeAlias alias="Blog" type="domain.blog.Blog"/>
</typeAliases>


当这样配置时,Blog 可以用在任何使用 domain.blog.Blog 的地方。

也可以指定一个包名,MyBatis 会在包下搜索需要的 Java 实体类,比如:

<typeAliases>
    <package name="domain.blog"/>
</typeAliases>


在包中的 Java 实体类,默认使用首字母小写的类名作为别名,比如 domain.blog.Author 的别名为 author,也可使用 @Alias 注解指定别名。

@Alias("author")
public class Author {
    // ...
}


4. 映射器


MyBatis 配置文件中,使用  来指定映射文件,配置方式如下:

<!-- 指定Mapper映射文件 -->
<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>
<!-- 指定包名,包内的全部Mapper接口都注册 -->
<mappers>
    <package name="org.mybatis.builder"/>
</mappers>




目录
相关文章
|
3月前
|
SQL XML Java
mybatis复习01,简单配置让mybatis跑起来
文章介绍了MyBatis的基本概念、历史和特点,并详细指导了如何配置MyBatis环境,包括创建Maven项目、添加依赖、编写核心配置文件、创建数据表和实体类、编写Mapper接口和XML配置文件,以及如何编写工具类和测试用例。
mybatis复习01,简单配置让mybatis跑起来
|
7月前
|
SQL 安全 BI
基于jeecg-boot的nbcio-boot因升级mybatis-plus到3.5.3.1和JSQLParser 到4.6而引起的在线报表配置报错处理
基于jeecg-boot的nbcio-boot因升级mybatis-plus到3.5.3.1和JSQLParser 到4.6而引起的在线报表配置报错处理
176 0
|
4月前
|
安全 Java 数据库连接
后端框架的学习----mybatis框架(3、配置解析)
这篇文章详细介绍了MyBatis框架的核心配置文件解析,包括环境配置、属性配置、类型别名设置、映射器注册以及SqlSessionFactory和SqlSession的生命周期和作用域管理。
后端框架的学习----mybatis框架(3、配置解析)
|
3月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
58 1
|
4月前
|
缓存 Java 数据库连接
mybatis1.常见配置
本文介绍了MyBatis框架中的常见配置及其加载顺序。配置可通过`properties`元素、资源文件或方法参数传递,其中方法参数传递的属性具有最高优先级。文章列举了几个重要的配置项,如`cacheEnabled`用于全局开启或关闭缓存功能;`lazyLoadingEnabled`控制对象的延迟加载行为;`useGeneratedKeys`允许JDBC支持自动生成主键;`defaultExecutorType`设定默认执行器类型等。此外,还介绍了多环境配置方法,通过`environments`元素可定义不同环境下的数据库连接信息,并可根据需求动态选择加载特定环境
|
5月前
|
SQL Java 数据库连接
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
98 3
|
6月前
|
SQL 人工智能 Java
mybatis-plus配置sql拦截器实现完整sql打印
_shigen_ 博主分享了如何在MyBatis-Plus中打印完整SQL,包括更新和查询操作。默认日志打印的SQL用?代替参数,但通过自定义`SqlInterceptor`可以显示详细信息。代码示例展示了拦截器如何替换?以显示实际参数,并计算执行时间。配置中添加拦截器以启用此功能。文章提到了分页查询时的限制,以及对AI在编程辅助方面的思考。
818 5
mybatis-plus配置sql拦截器实现完整sql打印
|
5月前
|
Java 数据库连接 mybatis
SpringBoot配置Mybatis注意事项,mappers层下的name命名空间,要落实到Dao的video类,resultType要落到bean,配置好mybatis的对应依赖。
SpringBoot配置Mybatis注意事项,mappers层下的name命名空间,要落实到Dao的video类,resultType要落到bean,配置好mybatis的对应依赖。
|
6月前
|
XML 前端开发 Java
Mybatis-Plus乐观锁配置
Mybatis-Plus乐观锁配置
|
6月前
|
Java Spring
mybatisplus的typeAliasesPackage 配置
【6月更文挑战第20天】mybatisplus的typeAliasesPackage 配置
680 3