为了账号安全,请及时绑定邮箱和手机立即绑定

Mybatis持久层框架资料入门教程

标签:
Java 数据库
概述

Mybatis是一个优秀的持久层框架,支持定制化SQL、存储过程及高级映射,避免了手动设置参数和获取结果集的繁琐工作。本文提供了Mybatis持久层框架资料入门教程,涵盖基本概念、环境搭建、核心操作和高级特性,帮助开发者快速上手。mybatis持久层框架资料中详细介绍了其优势、应用场景及与Spring的集成方式,适合需要频繁访问数据库的Web应用和对数据库操作要求较高的项目。

Mybatis持久层框架资料入门教程
Mybatis简介

Mybatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。Mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。它通过XML配置文件或者注解的方式将接口和SQL语句关联,将结果映射成Java对象。Mybatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJO对象映射成数据库中的记录。

Mybatis的主要特点

  • 简单易学:Mybatis降低了使用门槛,简化了DAO层的编码工作。
  • 高效:Mybatis基于SQL语句执行和获取返回记录,不会对性能造成影响。
  • 支持懒加载:Mybatis支持懒加载,可以动态加载数据,提高应用性能。
  • 支持存储过程和存储函数:Mybatis提供了存储过程和存储函数的支持,可以更灵活地处理数据库操作。
  • 支持高级映射:支持自定义类型处理器、自定义动态SQL、存储过程调用等。
  • 支持多种数据库:Mybatis提供了多种数据库的支持,如MySQL、Oracle、SQL Server等。
  • 脱离了大量SQL的字符串拼写,代码可读性更好。
  • 提供映射标签,支持动态SQL。

Mybatis的优势和应用场景

Mybatis的优势主要体现在以下几个方面:

  1. 简化数据库操作:Mybatis可以简化数据库操作,减少大量的SQL语句的编写,提供更好的代码可读性和可维护性。
  2. 集成简单:Mybatis可以很容易地与各种数据库集成,支持多种数据库,使用方便。
  3. 灵活性高:Mybatis提供了动态SQL的支持,可以灵活地处理复杂的SQL语句,更适合复杂的业务处理。
  4. 高性能:Mybatis基于SQL执行和获取结果集,避免了JDBC编码中的硬编码,性能高。

Mybatis适用的应用场景包括:

  1. 需要频繁访问数据库的Web应用:Mybatis提供了高效的数据库访问方式,可以很好地满足Web应用的需要。
  2. 对数据库操作要求较高的应用:Mybatis提供了自定义动态SQL、存储过程调用等高级映射功能,可以满足复杂的数据库操作需求。
  3. 需要将Java对象映射到数据库的应用:Mybatis提供了Java对象和数据库记录之间的映射功能,可以方便地进行对象和数据库之间的转换。
Mybatis环境搭建

Mybatis的官方下载地址

Mybatis的官方网站为:https://mybatis.org/mybatis-3/,你可以从这里下载Mybatis的最新版本

Java开发环境搭建

在搭建Java开发环境之前,需要确保已经安装了JDK。以下是安装JDK的基本步骤:

  1. 下载JDK:从Oracle官网下载最新版本的JDK,地址为:https://www.oracle.com/java/technologies/javase-jdk11-downloads.html
  2. 安装JDK:将下载的JDK安装包解压到指定目录,如C:\Program Files\Java\jdk1.8.0_231
  3. 配置环境变量:在系统环境变量中配置JDK的安装路径和JAVA_HOME环境变量,同时在PATH环境变量中添加JDK的bin目录路径。

安装完JDK后,可以通过运行命令java -version验证安装是否成功。

Mybatis的配置文件

Mybatis的配置文件mybatis-config.xml定义了Mybatis的全局配置,以下是一个示例:

<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/example/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

Mybatis的依赖添加

在Maven项目中添加Mybatis依赖,首先需要在pom.xml文件中添加Mybatis的依赖配置。以下是一个示例代码:

<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.6</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.22</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.14.0</version>
    </dependency>
</dependencies>

在以上代码中,添加了Mybatis的核心依赖、MySQL连接依赖和日志依赖。这些依赖有助于项目顺利运行,避免出现依赖找不到的情况。

Mybatis核心概念

SqlSessionFactory和SqlSession

在Mybatis中,SqlSessionFactory是生成SqlSession的工厂类,是线程不安全的。SqlSession是一个执行数据库操作的会话对象,可以通过SqlSessionFactory来获取SqlSessionSqlSession是线程不安全的,因此每个线程都应该有自己的SqlSession实例,不要共享SqlSession实例。

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();

Mapper接口和Mapper XML配置文件

Mybatis使用接口来定义SQL语句,使用XML配置文件来映射接口中的方法到实际的SQL语句。

public interface UserMapper {
    User selectUser(int id);
}
<mapper namespace="com.example.mapper.UserMapper">
    <select id="selectUser" resultType="com.example.entity.User">
        SELECT * FROM users WHERE id = #{id}
    </select>
</mapper>

在上面的代码中,UserMapper接口定义了一个selectUser方法,对应的XML配置文件中定义了selectUser这个SQL语句。

{}和${}的区别及使用场景

#{}${}是Mybatis中两种不同的参数占位符。#{}使用预编译的方式处理SQL语句,将参数作为参数占位符传递给SQL语句,这种方式可以防止SQL注入攻击。而${}是直接将参数值拼接到SQL语句中,这种方式容易受到SQL注入攻击。

  • 使用#{}
    <select id="selectUser" resultType="com.example.entity.User">
      SELECT * FROM users WHERE id = #{id}
    </select>
  • 使用${}
    <select id="selectUser" resultType="com.example.entity.User">
      SELECT * FROM users WHERE id = ${id}
    </select>
Mybatis基本操作

CRUD操作(增删改查)

增加操作

以下是一个插入数据的示例代码:

public interface UserMapper {
    int insertUser(User user);
}
<mapper namespace="com.example.mapper.UserMapper">
    <insert id="insertUser" parameterType="com.example.entity.User">
        INSERT INTO users (id, name, password) VALUES (#{id}, #{name}, #{password})
    </insert>
</mapper>

删除操作

以下是一个删除数据的示例代码:

public interface UserMapper {
    int deleteUser(int id);
}
<mapper namespace="com.example.mapper.UserMapper">
    <delete id="deleteUser" parameterType="int">
        DELETE FROM users WHERE id = #{id}
    </delete>
</mapper>

修改操作

以下是一个更新数据的示例代码:

public interface UserMapper {
    int updateUser(User user);
}
<mapper namespace="com.example.mapper.UserMapper">
    <update id="updateUser" parameterType="com.example.entity.User">
        UPDATE users SET name = #{name}, password = #{password} WHERE id = #{id}
    </update>
</mapper>

查询操作

以下是一个查询数据的示例代码:

public interface UserMapper {
    User selectUser(int id);
}
<mapper namespace="com.example.mapper.UserMapper">
    <select id="selectUser" resultType="com.example.entity.User">
        SELECT * FROM users WHERE id = #{id}
    </select>
</mapper>

动态SQL的使用

动态SQL允许根据条件动态生成SQL语句。以下是一个动态SQL的示例代码:

<mapper namespace="com.example.mapper.UserMapper">
    <update id="updateUser" parameterType="com.example.entity.User">
        UPDATE users
        <set>
            <if test="name != null">
                name = #{name},
            </if>
            <if test="password != null">
                password = #{password},
            </if>
        </set>
        WHERE id = #{id}
    </update>
</mapper>

分页查询

分页查询通常需要结合数据库的分页功能来实现。以下是一个分页查询的示例代码:

public interface UserMapper {
    List<User> selectUsers(int offset, int limit);
}
<mapper namespace="com.example.mapper.UserMapper">
    <select id="selectUsers" resultType="com.example.entity.User">
        SELECT * FROM users LIMIT #{offset}, #{limit}
    </select>
</mapper>
Mybatis与Spring集成

Mybatis与Spring整合的意义

Mybatis与Spring的整合可以实现Mybatis的自动化管理,使得Mybatis更好地融入到Spring的IoC容器中,提供更多的灵活性和便捷性。Spring可以管理Mybatis的配置和生命周期,简化了Mybatis的使用。

配置Spring与Mybatis的整合

在Spring的配置文件中,需要配置Mybatis的相关配置,包括数据源、SqlSessionFactory等。以下是一个示例代码:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
    <property name="username" value="root"/>
    <property name="password" value="root"/>
</bean>

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean>

<bean id="userMapper" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.example.mapper"/>
</bean>

使用Spring管理Mybatis的SqlSessionFactory

在Spring配置文件中,可以通过SqlSessionFactoryBean来创建SqlSessionFactory实例,并通过MapperScannerConfigurer扫描指定包下的Mapper接口,自动注册Mapper接口到Spring容器中。以下是一个示例代码:

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.example.mapper"/>
</bean>
Mybatis高级特性

一级和二级缓存

Mybatis支持一级缓存和二级缓存。

  • 一级缓存:Mybatis的SqlSession对象中内置了缓存,当执行相同数据查询时,会优先从缓存中获取数据,提高了查询性能。
  • 二级缓存:Mybatis的SqlSessionFactory对象中内置了缓存,当SqlSession对象关闭后,数据仍然可以被其他SqlSession对象使用,进一步提高了查询性能。

以下是一个配置二级缓存的示例代码:

<cache/>

插件开发

Mybatis支持插件开发,可以通过自定义插件来处理Mybatis的执行过程。插件可以实现在特定的执行过程中的拦截和增强。以下是一个示例代码:

public class MybatisPlugin implements Interceptor {
    @Override
    public Object intercept(Invocation invocation) throws Throwable {
        // 在执行SQL之前的操作
        System.out.println("Before executing SQL...");
        Object result = invocation.proceed();
        // 在执行SQL之后的操作
        System.out.println("After executing SQL...");
        return result;
    }

    @Override
    public Object plugin(Object target) {
        return Plugin.wrap(target, this);
    }

    @Override
    public void setProperties(Properties properties) {
        // 设置插件属性
    }
}

事务管理

Mybatis支持事务管理,可以通过Spring的事务管理来控制Mybatis的事务。以下是一个配置事务管理的示例代码:

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="select*" read-only="true"/>
        <tx:method name="*"/>
    </tx:attributes>
</tx:advice>

<aop:config>
    <aop:pointcut id="txPointcut" expression="execution(* com.example.mapper.*.*(..))"/>
    <aop:advisor pointcut-ref="txPointcut" advice-ref="txAdvice"/>
</aop:config>

以上是Mybatis持久层框架的入门教程,涵盖了Mybatis的基本概念、环境搭建、核心概念、基本操作、与Spring的集成以及高级特性。希望对你有所帮助。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消