第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

Mybatis持久層框架學習入門教程

概述

本文全面介绍了Mybatis持久层框架的基本概念、环境搭建与配置、基本使用方法、高级特性和与Spring的集成等内容,旨在帮助开发者快速掌握Mybatis框架的核心功能和应用场景。文章详细介绍了Mybatis的工作流程、优势、应用场景以及常见问题的解决方法,适合初学者和进阶用户阅读。

Mybatis简介
Mybatis的基本概念

MyBatis 是一个优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 可以使用简单的 XML 或注解进行配置和原始映射,将接口和 Java 的 POJO 传递给 SQL 语句。相比其他持久层框架,Mybatis 拥有更大的灵活性和性能优势,因为它允许开发者直接编写 SQL 语句,而不是依赖于 ORM 模式下的对象关系映射。

Mybatis的核心组件

  • SqlSession: MyBatis 的执行器,是 MyBatis 调用过程中会直接用到的对象。SqlSession 不仅承担了观察者和责任链的角色,同时还充当了 SPI(Service Provider Interface)的角色。
  • Mapper: MyBatis 提供了对 SQL 语句的执行封装,将 SQL 语句封装到执行器中,使对数据库的操作更加简洁。Mapper 接口定义了 SQL 语句的执行方法,这些方法会映射到对应的 XML 文件中的 SQL 语句。
  • Configuration: MyBatis 的全局配置类,包含了配置信息,如数据库连接信息、类型处理器等。
  • Executor: MyBatis 的执行器,它负责 SQL 语句的执行和结果集的处理。
  • Mapped Statements: 映射语句的包装对象,它充当了 Mapper 接口与 XML 文件之间桥梁的角色。
  • ParameterHandler: 参数处理器,负责处理 SQL 语句中的参数。
  • ResultSetHandler: 结果集处理器,负责处理数据库返回的结果集。
  • StatementHandler: 用于处理数据库语句的处理器,包括预处理语句和存储过程调用。

Mybatis的工作流程

  1. 加载配置文件: MyBatis 会从配置文件中加载配置信息,包括数据库连接信息、类型处理器等。
  2. 创建 SqlSessionFactory: 根据配置信息创建一个 SqlSessionFactory,它是线程安全的,可以重复使用。
  3. 获取 SqlSession: 通过 SqlSessionFactory 获取一个 SqlSession,它是线程不安全的,每次操作完数据库后应该关闭。
  4. 执行 SQL 语句: 通过 SqlSession 执行 SQL 语句,返回结果集。
  5. 关闭 SqlSession: 操作完数据库后,记得关闭 SqlSession,释放资源。
Mybatis的优势与应用场景

优势

  • 灵活性: MyBatis 允许开发者直接编写 SQL 语句,而不是依赖于 ORM 模式下的对象关系映射,因此有更大的灵活性。
  • 性能: 相比于 ORM 框架,MyBatis 能够更好地控制 SQL 语句的执行,因此在性能上更有优势。
  • 易于维护: MyBatis 的 XML 映射文件将 SQL 语句抽取出来,使得 SQL 语句易于维护,同时也易于数据库迁移。
  • 轻量级: 不需要复杂的配置,开发简单,易于上手,非常适合小型项目。

应用场景

  • 中大型项目: MyBatis 可以很好地控制数据库的交互,适合复杂数据结构和高性能要求的应用。
  • 对性能要求高的应用: 由于 MyBatis 不需要对象关系映射,可以更好地控制数据库的交互,因此在性能上更有优势。
  • 复杂 SQL 语句的应用: MyBatis 可以直接编写 SQL 语句,所以非常适合 SQL 语句比较复杂的应用。
  • 数据库迁移: MyBatis 的 XML 映射文件将 SQL 语句抽取出来,使得 SQL 语句易于维护,同时也易于数据库迁移。
环境搭建与配置
下载与安装Mybatis
  1. 下载 Mybatis:
  2. 安装 Mybatis:
    • 将下载的 Mybatis 依赖添加到你的项目中。对于 Maven 项目,可以在 pom.xml 文件中添加以下依赖:
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.6</version>
</dependency>
  1. 安装数据库驱动:
    • 将数据库驱动添加到项目的 lib 目录下,或者对于 Maven 项目,可以在 pom.xml 文件中添加对应的数据库驱动依赖。
    • 示例 MySQL 驱动依赖:
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.23</version>
</dependency>
  1. 配置 IDE:
    • 在 IDE 中配置项目,确保 Maven 依赖和资源文件正确加载。
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="password"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

类型处理器

<configuration>
    <typeAliases>
        <typeAlias alias="User" type="com.example.domain.User"/>
    </typeAliases>
</configuration>

映射文件

映射文件通常放在 src/main/resources 目录下,文件名为 UserMapper.xml。该文件定义了 SQL 语句及其对应的执行方法。

<mapper namespace="com.example.mapper.UserMapper">
    <select id="selectAll" resultType="User">
        SELECT * FROM users
    </select>
</mapper>

设置日志

<configuration>
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
</configuration>

示例配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<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="password"/>
            </dataSource>
        </environment>
    </environments>
    <typeAliases>
        <typeAlias alias="User" type="com.example.domain.User"/>
    </typeAliases>
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
</configuration>
Mybatis的基本使用
CRUD操作的实现

CRUD (Create, Retrieve, Update, Delete) 是数据库操作的基本操作。

创建记录

public interface UserMapper {
    void insertUser(User user);
}

public class UserMapperImpl implements UserMapper {
    @Override
    public void insertUser(User user) {
        SqlSessionFactory sqlSessionFactory = MybatisUtil.getSqlSessionFactory();
        try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            mapper.insertUser(user);
            sqlSession.commit();
        }
    }
}

// XML 映射文件
<mapper namespace="com.example.mapper.UserMapper">
    <insert id="insertUser">
        INSERT INTO users (name, email) VALUES (#{name}, #{email})
    </insert>
</mapper>

查询记录

public interface UserMapper {
    List<User> selectAllUsers();
}

public class UserMapperImpl implements UserMapper {
    @Override
    public List<User> selectAllUsers() {
        SqlSessionFactory sqlSessionFactory = MybatisUtil.getSqlSessionFactory();
        try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            return mapper.selectAllUsers();
        }
    }
}

// XML 映射文件
<mapper namespace="com.example.mapper.UserMapper">
    <select id="selectAllUsers" resultType="User">
        SELECT * FROM users
    </select>
</mapper>

更新记录

public interface UserMapper {
    void updateUser(User user);
}

public class UserMapperImpl implements UserMapper {
    @Override
    public void updateUser(User user) {
        SqlSessionFactory sqlSessionFactory = MybatisUtil.getSqlSessionFactory();
        try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            mapper.updateUser(user);
            sqlSession.commit();
        }
    }
}

// XML 映射文件
<mapper namespace="com.example.mapper.UserMapper">
    <update id="updateUser">
        UPDATE users SET name=#{name}, email=#{email} WHERE id=#{id}
    </update>
</mapper>

删除记录

public interface UserMapper {
    void deleteUser(int id);
}

public class UserMapperImpl implements UserMapper {
    @Override
    public void deleteUser(int id) {
        SqlSessionFactory sqlSessionFactory = MybatisUtil.getSqlSessionFactory();
        try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            mapper.deleteUser(id);
            sqlSession.commit();
        }
    }
}

// XML 映射文件
<mapper namespace="com.example.mapper.UserMapper">
    <delete id="deleteUser">
        DELETE FROM users WHERE id=#{id}
    </delete>
</mapper>
SQL语句的映射与执行

在 Mybatis 中,SQL 语句的映射与执行主要通过 XML 文件和注解两种方式实现。以下将介绍如何使用 XML 文件映射 SQL 语句。

示例 SQL 语句

<mapper namespace="com.example.mapper.UserMapper">
    <select id="selectUserById" resultType="User">
        SELECT * FROM users WHERE id=#{id}
    </select>

    <insert id="insertUser">
        INSERT INTO users (name, email) VALUES (#{name}, #{email})
    </insert>

    <update id="updateUser">
        UPDATE users SET name=#{name}, email=#{email} WHERE id=#{id}
    </update>

    <delete id="deleteUser">
        DELETE FROM users WHERE id=#{id}
    </delete>
</mapper>

使用注解映射 SQL 语句

public interface UserMapper {
    @Select("SELECT * FROM users WHERE id=#{id}")
    User selectUserById(int id);

    @Insert("INSERT INTO users (name, email) VALUES (#{name}, #{email})")
    void insertUser(User user);

    @Update("UPDATE users SET name=#{name}, email=#{email} WHERE id=#{id}")
    void updateUser(User user);

    @Delete("DELETE FROM users WHERE id=#{id}")
    void deleteUser(int id);
}
Mybatis的高级特性
动态SQL的使用

Mybatis 提供了动态 SQL 语法,能够根据不同的条件生成不同的 SQL 语句。可以通过 <if><choose><when><otherwise><foreach> 等标签实现。

示例

<update id="updateUser">
    UPDATE users SET 
    <if test="name != null">
        name=#{name},
    </if>
    <if test="email != null">
        email=#{email},
    </if>
    <if test="address != null">
        address=#{address},
    </if>
    WHERE id=#{id}
</update>

动态条件的使用

<select id="selectUserByCondition" resultType="User">
    SELECT * FROM users WHERE 1=1
    <if test="name != null">
        AND name=#{name}
    </if>
    <if test="email != null">
        AND email=#{email}
    </if>
</select>
分页查询的实现

分页查询可以通过 Mybatis 的插件机制实现。Mybatis 本身没有内置的分页支持,但可以使用第三方插件如 PageHelper 来实现分页。

示例

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.1.2</version>
</dependency>
public List<User> getUsersWithPagination(int pageNum, int pageSize) {
    PageHelper.startPage(pageNum, pageSize);
    return userMapper.selectAllUsers();
}

SQL 分页查询

<mapper namespace="com.example.mapper.UserMapper">
    <select id="selectAllUsers" resultType="User">
        SELECT * FROM users LIMIT #{offset}, #{limit}
    </select>
</mapper>
Mybatis与Spring集成
Mybatis与Spring的整合步骤
  1. 添加依赖:
    • 在 pom.xml 文件中添加 Mybatis 和 Spring 的依赖。
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.6</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.3.10</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.3.10</version>
</dependency>
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.4</version>
</dependency>
  1. 配置 Mybatis:
    • 在 Spring 配置文件中配置 Mybatis,包含数据库连接信息和 SqlSessionFactory 的定义。
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
</bean>
  1. 配置数据源:
    • 配置数据源,可以使用 Spring 提供的 DataSource 配置。
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <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="password"/>
</bean>
  1. 配置 Mapper 与 Mybatis 会话工厂:
    • 在 Spring 配置文件中配置 Mapper 与 Mybatis 的 SqlSession 工厂。
<bean id="userMapper" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.example.mapper"/>
    <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
  1. 注入 Mapper 到 Spring 容器中:
    • 在 Spring 配置文件中注入 Mapper,使其可以通过依赖注入的方式使用。
<bean id="userService" class="com.example.service.UserService">
    <property name="userMapper" ref="userMapper"/>
</bean>
使用Spring管理Mybatis的SessionFactory

在 Spring 中,SqlSessionFactory 可以通过 Spring 的配置文件来管理,这样可以方便地进行依赖注入。

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>

示例代码

public class UserService {
    private UserMapper userMapper;

    public UserService(@Autowired UserMapper userMapper) {
        this.userMapper = userMapper;
    }

    public List<User> getUsers() {
        return userMapper.selectAllUsers();
    }
}
<bean id="userService" class="com.example.service.UserService">
    <property name="userMapper" ref="userMapper"/>
</bean>
常见问题与解决方案
常见错误及解决方法

错误 1: 缺少依赖

错误信息: java.lang.ClassNotFoundException

原因: 项目中缺少 Mybatis 相关依赖。

解决方法: 在项目中添加 Mybatis 依赖。

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.6</version>
</dependency>

错误 2: 配置文件错误

错误信息: org.apache.ibatis.builder.BuilderException

原因: Mybatis 配置文件存在语法错误或者配置错误。

解决方法: 检查 mybatis-config.xml 文件是否正确,确保配置信息正确。

错误 3: SQL 语句错误

错误信息: org.apache.ibatis.exceptions.PersistenceException

原因: SQL 语句编写错误。

解决方法: 检查 SQL 语句是否正确,确保 SQL 语句能够正确执行。

错误 4: 数据库连接错误

错误信息: java.sql.SQLException

原因: 数据库连接信息配置错误或数据库服务未启动。

解决方法: 检查数据库连接信息是否正确,确保数据库服务已经启动。

性能优化技巧

优化 SQL 语句

  • 使用合适的索引。
  • 避免全表扫描,使用合适的条件过滤。
  • 使用缓存,减少数据库查询次数。

使用 Mybatis 插件

  • 使用 Mybatis 插件可以优化 SQL 执行性能,如采用 PageHelper 插件实现分页查询。
  • Mybatis 插件可以实现 SQL 语句的拦截和修改,从而提高查询性能。

连接池优化

  • 使用合适的连接池配置,如配置合适的连接池大小。
  • 使用连接池优化数据库连接,减少数据库连接的开销。

使用缓存

  • Mybatis 提供了一级缓存和二级缓存。
  • 一级缓存是 SqlSession 级别的,二级缓存是 Mybatis 级别的。合理使用缓存可以减少数据库查询次数,提高性能。

避免 N+1 查询问题

  • 使用 Mybatis 的动态 SQL 功能,避免每次查询都生成多条 SQL 语句。
  • 使用 Mybatis 的关联查询功能,减少查询次数。

优化数据库设计

  • 优化数据库表结构,减少冗余数据。
  • 使用合适的数据类型,减少数据存储空间。
  • 对常用查询进行优化,如使用视图、物化视图等。
总结

通过本教程,你已经掌握了 Mybatis 框架的基本概念、环境搭建与配置、基本使用、高级特性和与 Spring 的集成。希望这些内容能够帮助你更好地理解和使用 Mybatis 框架,提高你的开发效率。

如果有更多问题或者想要深入学习 Mybatis 的高级特性,可以参考 Mybatis 的官方文档或慕课网的相关课程进行学习。

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優(yōu)惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消