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

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

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

概述

Mybatis是一个持久层框架,支持自定义SQL查询和高级映射,灵活性和性能较高。本文将详细介绍Mybatis的基本概念、优势、应用场景以及与JDBC的区别。Mybatis持久层框架的学习内容包括环境搭建、基本使用、动态SQL、缓存机制、事务管理和高级应用等方面。

Mybatis简介
Mybatis的基本概念

MyBatis是一个持久层框架,它支持自定义SQL查询、存储过程和高级映射。MyBatis可以将Java对象与数据库中的记录进行映射。MyBatis通过XML配置文件或注解,可以将Java方法与数据库操作关联起来,使得开发者可以灵活地定义数据访问层。

Mybatis的优势和应用场景

优势

  1. 灵活性:MyBatis提供了非常灵活的SQL查询方式,可以通过XML配置文件或者注解来映射SQL,使得SQL的编写更加灵活。
  2. 性能:MyBatis的查询结果直接映射为Java对象,可以减少不必要的数据转换,提高了性能。
  3. 易用性:MyBatis提供了丰富的API,使得数据库操作更加简单易用。
  4. 可扩展性:MyBatis支持插件机制,可以方便地扩展功能。

应用场景

  1. 复杂SQL查询:适用于SQL查询非常复杂的场景。
  2. 性能敏感的应用:由于MyBatis直接操作数据库,可以减少对象映射的时间,提高性能。
  3. 数据库交互复杂的应用:适用于需要频繁调用存储过程或者进行复杂SQL操作的应用。
  4. 数据库操作频繁的应用:适用于数据库操作频繁的应用场景,通过MyBatis可以简化数据库操作的代码。
Mybatis与JDBC的区别

JDBC

JDBC是Java数据库连接的API,提供了访问数据库的标准接口。它直接操作数据库,提供了数据库连接、执行SQL、处理结果集等功能。

Mybatis

Mybatis是一个持久层框架,它基于JDBC,简化了JDBC的使用。Mybatis通过配置文件定义SQL查询,并将查询结果映射为Java对象。

主要区别

  1. SQL操作:JDBC是直接使用SQL语句,而Mybatis是通过配置文件或注解来定义SQL查询。
  2. 结果映射:JDBC需要手动将结果集映射为Java对象,而Mybatis可以通过配置文件自动完成映射。
  3. 性能:Mybatis由于减少了对象映射的过程,因此在性能上通常要优于JDBC。
  4. 灵活性:Mybatis提供了动态SQL和映射文件的配置,使得SQL查询更加灵活。
Mybatis环境搭建
开发环境准备

软件环境

  1. 操作系统:Windows、Linux、macOS等
  2. IDE:Eclipse、IntelliJ IDEA、STS等
  3. Java环境:JDK 1.8及以上版本
  4. Mybatis版本:Mybatis 3.5.6等最新版本

配置步骤

  1. 安装Java环境,确保Java环境变量配置正确。
  2. 安装IDE,例如IntelliJ IDEA或Eclipse。
  3. 安装数据库,例如MySQL。

创建数据库和表

CREATE DATABASE mybatis;
USE mybatis;

CREATE TABLE user (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(20),
  age INT
);

创建Java项目

  1. 打开IDE,新建一个Java项目。
  2. 导入Mybatis的依赖。

Java代码示例

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class DatabaseUtil {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mybatis";
        String username = "root";
        String password = "password";

        try {
            Connection connection = DriverManager.getConnection(url, username, password);
            Statement statement = connection.createStatement();

            String sql = "CREATE TABLE user (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(20), age INT)";
            statement.executeUpdate(sql);

            System.out.println("数据库和表创建成功");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
Maven项目配置

创建Maven项目

  1. 打开IDE,新建一个Maven项目。
  2. 在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.21</version>
    </dependency>
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
    </dependency>
    </dependencies>

配置数据库连接信息

在src/main/resources目录下创建一个mybatis-config.xml文件,用于配置数据库连接信息。

<configuration>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
        <property name="username" value="root"/>
        <property name="password" value="password"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="UserMapper.xml"/>
  </mappers>
</configuration>
配置核心配置文件

配置Mybatis的核心配置文件

在src/main/resources目录下创建mybatis-config.xml配置文件,用于配置数据库连接信息、类型别名、映射文件路径等。

<?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.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
        <property name="username" value="root"/>
        <property name="password" value="password"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="UserMapper.xml"/>
  </mappers>
</configuration>
``

### Java代码示例
```java
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MyBatisUtil {
  private static SqlSessionFactory sqlSessionFactory;

  static {
    String resource = "mybatis-config.xml";
    try {
      InputStream inputStream = Resources.getResourceAsStream(resource);
      sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  public static SqlSessionFactory getSqlSessionFactory() {
    return sqlSessionFactory;
  }
}
映射文件的编写

配置映射文件

在src/main/resources目录下创建一个UserMapper.xml文件,用于定义SQL映射。

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

Java代码示例

定义Java接口和Java类:

package com.example.mapper;

import com.example.model.User;
import org.apache.ibatis.annotations.Select;

public interface UserMapper {
  @Select("SELECT * FROM user WHERE id = #{id}")
  User selectUserById(int id);
}
package com.example.model;

public class User {
  private int id;
  private String name;
  private int age;

  // Getters and Setters
}
CRUD操作详解

Select操作

<select id="selectUserById" resultType="com.example.model.User">
  SELECT * FROM user WHERE id = #{id}
</select>

Insert操作

<insert id="insertUser" parameterType="com.example.model.User">
  INSERT INTO user(name, age) VALUES (#{name}, #{age})
</insert>

Update操作

<update id="updateUser" parameterType="com.example.model.User">
  UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}
</update>

Delete操作

<delete id="deleteUserById" parameterType="int">
  DELETE FROM user WHERE id = #{id}
</delete>
Mybatis动态SQL
简单的动态SQL标签介绍

Mybatis提供了多种动态SQL标签,例如<if>, <choose>(类似于<switch>),<when>(类似于<case>),<otherwise>(类似于<default>`)等。

使用<if>标签

<if test="name != null">
  AND name = #{name}
</if>

使用<choose>标签

<choose>
  <when test="name != null">
    AND name = #{name}
  </when>
  <when test="age != null">
    AND age = #{age}
  </when>
  <otherwise>
    AND id = #{id}
  </otherwise>
</choose>
使用动态SQL处理条件查询

示例

<select id="selectUserByCondition" resultType="com.example.model.User">
  SELECT * FROM user
  <where>
    <if test="name != null">
      AND name = #{name}
    </if>
    <if test="age != null">
      AND age = #{age}
    </if>
  </where>
</select>

解释

<where>标签会自动处理SQL语句中的WHERE关键字,并且会自动去除第一个AND或OR。

动态SQL的高级用法

使用<foreach>标签

<foreach>标签用于遍历集合。

<update id="updateUserBatch">
  UPDATE user SET name = #{name} WHERE id IN
  <foreach item="item" index="index" collection="ids" open="(" separator="," close=")">
    #{item}
  </foreach>
</update>

使用<trim>标签

<trim>标签用于添加SQL语句的前缀和后缀。

<select id="selectUserByCondition" resultType="com.example.model.User">
  SELECT * FROM user
  <trim prefix="WHERE" prefixOverrides="AND,OR">
    <if test="name != null">
      AND name = #{name}
    </if>
    <if test="age != null">
      AND age = #{age}
    </if>
  </trim>
</select>
动态SQL的Java代码示例
import org.apache.ibatis.session.SqlSession;

public class DynamicSQLExample {
  public static void main(String[] args) {
    SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);

    User user = mapper.selectUserById(1);
    System.out.println(user.getName());

    // 动态SQL查询
    User userByCondition = mapper.selectUserByCondition("John", 25);
    System.out.println(userByCondition.getName());

    sqlSession.close();
  }
}
Mybatis与数据库交互
Mybatis的缓存机制

Mybatis有两种级别的缓存:一级缓存和二级缓存。

一级缓存

一级缓存是SqlSession级别的缓存,每个SqlSession都有一个独立的缓存,并且SqlSession默认开启缓存。

二级缓存

二级缓存是Mapper级别的缓存,多个SqlSession之间可以共享同一个Mapper的缓存。二级缓存可以通过配置开启。

缓存的使用

<cache/>

缓存的例子

<cache/>
<select id="selectUserById" resultType="com.example.model.User" cache="true">
  SELECT * FROM user WHERE id = #{id}
</select>

缓存的清除

sqlSession.clearCache();
批量操作和事务管理

批量操作

Mybatis可以通过<foreach>标签来实现批量操作。

<update id="updateUserBatch">
  UPDATE user SET name = #{name} WHERE id IN
  <foreach item="item" index="index" collection="ids" open="(" separator="," close=")">
    #{item}
  </foreach>
</update>

事务管理

Mybatis支持事务管理,事务的提交和回滚可以通过SqlSession的方法来实现。

sqlSession.commit();
sqlSession.rollback();
缓存、批量操作和事务管理的Java代码示例
import org.apache.ibatis.session.SqlSession;

public class CacheExample {
  public static void main(String[] args) {
    SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);

    User user = mapper.selectUserById(1);
    System.out.println(user.getName());

    // 批量更新操作
    List<Integer> ids = Arrays.asList(1, 2, 3);
    mapper.updateUserBatch(ids, "John");

    // 事务管理
    try {
      mapper.updateUser(1, "John", 30);
      sqlSession.commit();
    } catch (Exception e) {
      sqlSession.rollback();
    }

    sqlSession.close();
  }
}
Mybatis的高级应用
Mybatis的插件机制

Mybatis支持插件机制,可以对Mybatis的执行过程进行拦截和增强。

public class MyBatisPlugin implements Interceptor {
  @Override
  public Object intercept(Invocation invocation) throws Throwable {
    // 拦截方法的逻辑
    return invocation.proceed();
  }

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

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

插件的配置

<plugins>
  <plugin interceptor="com.example.plugin.MyBatisPlugin">
    <property name="property1" value="value1"/>
    <property name="property2" value="value2"/>
  </plugin>
</plugins>

插件的实际应用示例

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.defaults.DefaultSqlSession;

public class MyBatisPluginExample {
  public static void main(String[] args) {
    SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession();
    ((DefaultSqlSession) sqlSession).getConfiguration().addInterceptor(new MyBatisPlugin());

    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    User user = mapper.selectUserById(1);
    System.out.println(user.getName());

    sqlSession.close();
  }
}
Mybatis的自动映射策略

Mybatis提供了多种自动映射策略,例如:

  • PARTIAL:部分自动映射。
  • NONE:不使用自动映射。
  • FULL:完全自动映射。

自动映射策略的配置

<configuration>
  <settings>
    <setting name="mapUnderscoreToCamelCase" value="true"/>
  </settings>
</configuration>

自动映射策略的应用示例

import org.apache.ibatis.session.SqlSession;

public class AutoMappingExample {
  public static void main(String[] args) {
    SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);

    User user = mapper.selectUserById(1);
    System.out.println(user.getName());

    sqlSession.close();
  }
}
Mybatis的分页处理

Mybatis支持分页查询,可以通过插件或者手动编写SQL来实现分页。

<select id="selectUserByPage" resultType="com.example.model.User">
  SELECT * FROM user LIMIT #{offset}, #{limit}
</select>

使用PageHelper插件

<dependencies>
  <dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.1.4</version>
  </dependency>
</dependencies>

使用PageHelper插件的例子

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;

import java.util.List;

public class PageHelperExample {
  public static void main(String[] args) {
    SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    PageHelper.startPage(1, 10);
    List<User> users = mapper.selectAll();
    PageInfo<User> pageInfo = new PageInfo<>(users);
    System.out.println(pageInfo.getTotal());

    sqlSession.close();
  }
}

分页插件的配置

<configuration>
  <plugins>
    <plugin interceptor="com.github.pagehelper.PageInterceptor">
      <property name="helperDialect" value="mysql"/>
      <property name="reasonable" value="true"/>
    </plugin>
  </plugins>
</configuration>

以上教程详细介绍了Mybatis的使用方法,包括环境搭建、基本使用、动态SQL、缓存机制、事务管理和高级应用等方面的内容。希望这些内容能够帮助你更好地理解和使用Mybatis。如果你需要进一步了解Mybatis的相关内容,可以参考慕课网上的相关课程。

點擊查看更多內(nèi)容
TA 點贊

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

評論

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

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

100積分直接送

付費專欄免費學

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

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

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消