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

Mybatis入门教程:快速掌握Mybatis基础用法

标签:
SSM
概述

Mybatis是一个杰出的持久层框架,支持自定义SQL和存储过程,能够与Spring框架完美结合。它通过XML或注解的方式将Java方法和SQL语句绑定,提供了灵活的数据库操作方式和面向对象的编程风格。本文详细介绍了Mybatis的优势、应用场景、环境搭建、核心概念、CRUD操作以及动态SQL和事务管理。

Mybatis简介

Mybatis是什么

Mybatis是一个杰出的持久层框架,支持自定义SQL、存储过程以及高级映射,可以与Spring框架完美结合。Mybatis通过XML或注解的方式将Java方法和SQL语句绑定,实现Java程序与数据库的交互。Mybatis的优势在于其灵活性、配置的简单性以及直接控制SQL语句的能力,使得开发人员可以更灵活地操作数据库。

Mybatis的优势和应用场景

  • 性能优越:Mybatis的性能优于Hibernate等其他持久层框架,因为它没有额外的框架查询语言,SQL语句的编写和优化完全由开发人员掌控。
  • 轻量级:Mybatis体积小、配置简单,易于集成到各种项目中。
  • 灵活的数据库操作:Mybatis支持多种数据库,包括MySQL、Oracle、SQL Server等,提供了灵活的数据库操作方式。
  • 面向对象:Mybatis支持面向对象的编程风格,提供了丰富的API接口,使得开发人员可以更加灵活地操作数据库。

Mybatis的应用场景主要包括:

  • 需要高效、灵活地操作数据库的项目。
  • 需要进行复杂的SQL操作,如联表查询、存储过程操作等。
  • 对性能要求较高的大型项目。
  • 需要支持多种数据库的项目。

Mybatis环境搭建

下载Mybatis

下载Mybatis可以通过官方网站或Maven仓库获取。以下是在Maven项目中引入Mybatis的依赖:

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

配置Mybatis环境

Mybatis的配置文件主要包含以下内容:

  • 配置数据库连接信息:包括数据库的驱动、URL、用户名、密码等。
  • 配置Mybatis环境:配置Mybatis核心配置文件,如mybatis-config.xml
  • 配置Mybatis映射文件:如UserMapper.xml,用于映射Java对象和数据库表。

示例配置文件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.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
        <property name="username" value="root"/>
        <property name="password" value="password"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="UserMapper.xml"/>
  </mappers>
</configuration>

编写第一个Mybatis程序

演示一个简单的增删改查操作,包括增删查改一个用户的操作。

  1. 定义数据表
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8;
  1. 创建Pojo对象
public class User {
  private int id;
  private String username;
  private String password;

  // getters and setters
  public int getId() {
    return id;
  }

  public void setId(int id) {
    this.id = id;
  }

  public String getUsername() {
    return username;
  }

  public void setUsername(String username) {
    this.username = username;
  }

  public String getPassword() {
    return password;
  }

  public void setPassword(String password) {
    this.password = password;
  }
}
  1. 创建Mapper接口和映射文件

Mapper接口:

public interface UserMapper {
  User selectUserById(int id);
  void insertUser(User user);
  void updateUser(User user);
  void deleteUser(int id);
}

Mapper映射文件UserMapper.xml

<mapper namespace="com.example.mapper.UserMapper">
  <select id="selectUserById" resultType="com.example.model.User">
    SELECT id, username, password FROM user WHERE id = #{id}
  </select>
  <insert id="insertUser">
    INSERT INTO user(id, username, password) VALUES(#{id}, #{username}, #{password})
  </insert>
  <update id="updateUser">
    UPDATE user SET username=#{username}, password=#{password} WHERE id=#{id}
  </update>
  <delete id="deleteUser">
    DELETE FROM user WHERE id=#{id}
  </delete>
</mapper>
  1. 编写测试类
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;

public class MybatisApp {
  public static void main(String[] args) throws Exception {
    String resource = "mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    try (SqlSession session = sqlSessionFactory.openSession()) {
      UserMapper mapper = session.getMapper(UserMapper.class);
      User user = new User();
      user.setId(1);
      user.setUsername("user1");
      user.setPassword("password1");
      mapper.insertUser(user);
      session.commit();

      User dbUser = mapper.selectUserById(1);
      System.out.println(dbUser.getUsername());
      user.setUsername("updatedUser1");
      mapper.updateUser(user);
      mapper.deleteUser(1);
    }
  }
}

Mybatis的核心概念

SQL映射文件

SQL映射文件通常是一个XML文件,包含SQL映射语句和结果映射信息。映射文件中定义了每个数据库操作的SQL语句,对应的是Mapper接口中的方法。

示例:

<mapper namespace="com.example.mapper.UserMapper">
  <select id="selectUserById" resultType="com.example.model.User">
    SELECT id, username, password FROM user WHERE id = #{id}
  </select>
  <insert id="insertUser">
    INSERT INTO user(id, username, password) VALUES(#{id}, #{username}, #{password})
  </insert>
</mapper>

Mapper接口

Mapper接口定义了对数据库的操作方法,这些方法对应SQL映射文件中的SQL语句。

示例:

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

Pojo对象

Pojo对象是Java对象,与数据库中的表对应。每个对象的属性和数据库中的字段相对应。

示例:

public class User {
  private int id;
  private String username;
  private String password;

  // getters and setters
  public int getId() {
    return id;
  }

  public void setId(int id) {
    this.id = id;
  }

  public String getUsername() {
    return username;
  }

  public void setUsername(String username) {
    this.username = username;
  }

  public String getPassword() {
    return password;
  }

  public void setPassword(String password) {
    this.password = password;
  }
}

Configuration配置

Configuration是Mybatis配置的核心,包含了数据库连接信息、映射文件路径等。以下是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.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
        <property name="username" value="root"/>
        <property name="password" value="password"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="UserMapper.xml"/>
  </mappers>
</configuration>

Mybatis的CRUD操作

增加数据

增加数据的操作,通过INSERT INTO语句实现。

示例代码:

public interface UserMapper {
  void insertUser(User user);
}
<insert id="insertUser">
  INSERT INTO user(id, username, password) VALUES(#{id}, #{username}, #{password})
</insert>

查询数据

查询数据的操作,通过SELECT语句实现。

示例代码:

public interface UserMapper {
  User selectUserById(int id);
}
<select id="selectUserById" resultType="com.example.model.User">
  SELECT id, username, password FROM user WHERE id = #{id}
</select>

更新数据

更新数据的操作,通过UPDATE语句实现。

示例代码:

public interface UserMapper {
  void updateUser(User user);
}
<update id="updateUser">
  UPDATE user SET username=#{username}, password=#{password} WHERE id=#{id}
</update>

删除数据

删除数据的操作,通过DELETE语句实现。

示例代码:

public interface UserMapper {
  void deleteUser(int id);
}
<delete id="deleteUser">
  DELETE FROM user WHERE id=#{id}
</delete>

Mybatis的动态SQL

if语句

if语句可用来根据条件判断是否执行某个SQL语句。

示例代码:

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

choose语句

choose语句选择第一个符合的条件的SQL语句执行。

示例代码:

<select id="selectUserByCondition" resultType="com.example.model.User">
  SELECT * FROM user
  <choose>
    <when test="id != null">
      WHERE id = #{id}
    </when>
    <when test="username != null">
      WHERE username = #{username}
    </when>
    <otherwise>
      WHERE 1=1
    </otherwise>
  </choose>
</select>

where和set语句

whereset语句用于构造WHERESET语句。

示例代码:

<select id="selectUser" resultType="com.example.model.User">
  SELECT * FROM user
  <where>
    <if test="id != null">id = #{id}</if>
    <if test="username != null"> AND username = #{username}</if>
  </where>
</select>
<update id="updateUser">
  UPDATE user
  <set>
    <if test="username != null">username = #{username},</if>
    <if test="password != null">password = #{password},</if>
  </set>
  WHERE id = #{id}
</update>

foreach语句

foreach语句用于遍历集合或数组。

示例代码:

<select id="selectUsersByIds" resultType="com.example.model.User">
  SELECT * FROM user WHERE id IN
  <foreach item="item" index="index" collection="ids" open="(" separator="," close=")">
    #{item}
  </foreach>
</select>

Mybatis的事务管理

事务的概念

事务是数据库操作的基本单位,具有原子性、一致性、隔离性和持久性。事务管理是确保数据一致性和完整性的重要机制。

Mybatis的事务配置

Mybatis通过SqlSessioncommit()rollback()方法实现事务的提交和回滚。配置文件中的<transactionManager type="JDBC"/>定义了使用JDBC的事务管理方式。

示例代码:

<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>
  <mappers>
    <mapper resource="UserMapper.xml"/>
  </mappers>
</configuration>

事务的回滚和提交

事务的提交和回滚主要通过SqlSessioncommit()rollback()方法实现。通过这些方法,可以控制数据库操作的提交和回滚,确保数据库操作的一致性。

示例代码:


try (SqlSession session = sqlSessionFactory.openSession()) {
  UserMapper mapper = session.getMapper(UserMapper.class);
  User user = new User();
  user.setId(1);
  user.setUsername("user1");
  user.setPassword("password1");
  mapper.insertUser(user);
  // Commit transaction
  session.commit();
  user.setUsername("updatedUser1");
  mapper.updateUser(user);
  // Rollback transaction
  session.rollback();
}
``

以上是关于Mybatis的入门教程,涵盖了从环境搭建到核心概念,再到CRUD操作和动态SQL的介绍,以及事务管理的详细说明。希望这些内容能够帮助你快速掌握Mybatis的基础用法。
点击查看更多内容
TA 点赞

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

评论

作者其他优质文章

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

100积分直接送

付费专栏免费学

大额优惠券免费领

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

举报

0/150
提交
取消