MyBatis:使用注解让数据库操作更简单

这篇具有很好参考价值的文章主要介绍了MyBatis:使用注解让数据库操作更简单。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、简介

二、配置

三、基于注解的基本使用

四、测试

总结


一、简介

在Java开发中,数据库操作是一个常见而重要的任务。为了方便地执行SQL语句,获取结果集,处理异常等,我们通常需要使用JDBC(Java Database Connectivity)API,这是一个标准的数据库访问接口。然而,使用JDBC也有一些缺点,例如:

  • 我们需要编写大量的重复代码,如加载驱动,创建连接,关闭资源等。
  • 我们需要手动设置参数和获取结果集,这可能导致类型不匹配或空指针等错误。
  • 我们需要硬编码SQL语句,这可能导致可读性和维护性的问题。

为了解决这些问题,许多持久层框架(Persistence Framework)应运而生,它们可以提供更高层次的抽象和封装,使得数据库操作更加简单和方便。其中一个著名的持久层框架就是MyBatis。

MyBatis是一个开源的持久层框架,它支持自定义SQL,存储过程和高级映射。MyBatis可以通过简单的XML或注解来配置和映射原始类型,接口和Java POJO(Plain Old Java Objects)为数据库中的记录。MyBatis的主要特点有:

  • 简单易用:MyBatis可以消除几乎所有的JDBC代码和手动设置参数和获取结果集的工作。
  • 灵活强大:MyBatis可以使用动态SQL来适应各种复杂的查询需求,并且可以使用插件机制来扩展其功能。
  • 轻量高效:MyBatis占用资源少,运行速度快,并且可以与各种流行的数据库和缓存框架集成。

二、配置

要使用MyBatis,我们首先需要添加它的依赖到我们的项目中。如果我们使用Maven来管理项目,我们可以在pom.xml文件中添加如下代码:

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

然后,我们需要创建一个MyBatis的配置文件,通常命名为mybatis-config.xml。这个文件用于定义一些全局的属性和设置,例如数据源(DataSource),事务管理器(TransactionManager),日志实现(LogImpl)等。一个简单的配置文件示例如下:

<?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>
  <properties resource="jdbc.properties"/>
  <settings>
    <setting name="logImpl" value="STDOUT_LOGGING"/>
  </settings>
  <typeAliases>
    <package name="com.example.domain"/>
  </typeAliases>
  <mappers>
    <mapper class="com.example.mapper.UserMapper"/>
  </mappers>
</configuration>

在上面的配置文件中,我们做了以下几件事:

  • 我们引入了一个外部的属性文件jdbc.properties,用于存储数据库连接相关的信息,如驱动类名(driverClassName),连接地址(url),用户名(username)和密码(password)等。
  • 我们设置了日志实现为STDOUT_LOGGING,表示将日志输出到标准输出流中。
  • 我们定义了一个类型别名(TypeAlias),表示将com.example.domain包下的所有类注册为别名,这样我们就可以在后面的映射文件中使用简短的类名,而不是完整的限定名。
  • 我们指定了一个映射器(Mapper),表示将com.example.mapper.UserMapper类作为一个映射器,用于定义SQL语句和结果映射等。

三、基于注解的基本使用

有了配置文件后,我们就可以开始使用MyBatis来操作数据库了。MyBatis的核心接口是SqlSession,它表示和数据库的一次会话,可以用来执行SQL语句,提交或回滚事务,获取映射器等。我们可以通过SqlSessionFactory来创建SqlSession,而SqlSessionFactory可以通过SqlSessionFactoryBuilder来构建,传入配置文件的输入流即可。以下是一个创建SqlSession的示例:

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 MyBatisUtil {
  private static SqlSessionFactory sqlSessionFactory;

  static {
    try {
      // 读取配置文件
      InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
      // 构建SqlSessionFactory
      sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  // 获取SqlSession
  public static SqlSession getSqlSession() {
    return sqlSessionFactory.openSession();
  }
}

有了SqlSession后,我们就可以通过它来执行SQL语句了。MyBatis提供了两种方式来执行SQL语句:一种是通过XML映射文件来定义SQL语句和结果映射;另一种是通过注解来定义SQL语句和结果映射。我们以第二种方式为例,介绍如何使用MyBatis进行增删改查操作。

首先,我们需要定义一个实体类(Entity Class),用于表示数据库中的一张表。例如,我们有一张用户表(user),其结构如下:

id name age email
1 Tom 18 tom@gmail.com
2 Bob 20 bob@qq.com
3 Alice 19 alice@163.com

我们可以定义一个User类来对应这张表,代码如下:

package com.example.domain;

import java.io.Serializable;

public class User implements Serializable {
  private Integer id;
  private String name;
  private Integer age;
  private String email;

  // 省略构造方法,getter和setter方法,toString方法
}

然后,我们需要定义一个持久层接口(DAO Interface),用于声明对User表的操作方法。在这个接口中,我们可以使用MyBatis提供的注解来编写SQL语句,并指定参数和返回值类型。例如,我们可以定义一个UserMapper接口,代码如下:

package com.example.mapper;

import com.example.domain.User;
import org.apache.ibatis.annotations.*;

import java.util.List;

public interface UserMapper {

  // 查询所有用户
  @Select("select * from user")
  List<User> findAll();

  // 根据id查询用户
  @Select("select * from user where id = #{id}")
  User findById(Integer id);

  // 添加用户
  @Insert("insert into user (name, age, email) values (#{name}, #{age}, #{email})")
  void insert(User user);

  // 修改用户
  @Update("update user set name = #{name}, age = #{age}, email = #{email} where id = #{id}")
  void update(User user);

  // 删除用户
  @Delete("delete from user where id = #{id}")
  void delete(Integer id);

}

在上面的代码中,我们使用了@Select, @Insert, @Update, @Delete四个注解来分别表示查询,插入,更新和删除操作。在注解中,我们可以直接写SQL语句,并且可以使用#{参数名}来表示占位符。MyBatis会自动将参数对象的属性值替换到占位符中,并且会根据返回值类型进行结果集的映射。

四、测试

最后,我们需要编写测试类(Test Class),用于调用UserMapper接口中的方法,并验证其功能。我们可以使用JUnit来编写测试类,代码如下:

package com.example.test;

import com.example.domain.User;
import com.example.mapper.UserMapper;
import com.example.util.MyBatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.util.List;

public class UserMapperTest {

  private SqlSession sqlSession;
  private UserMapper userMapper;

  @Before
  public void init() {
    // 获取SqlSession
    sqlSession = MyBatisUtil.getSqlSession();
    // 获取UserMapper接口的代理对象
    userMapper = sqlSession.getMapper(UserMapper.class);
  }

  @After
  public void destroy() {
    // 提交事务
    sqlSession.commit();
    // 关闭资源
    sqlSession.close();
  }

  // 测试查询所有用户
  @Test
  public void testFindAll() {
    // 调用findAll方法
    List<User> users = userMapper.findAll();
    // 遍历打印结果
    for (User user : users) {
      System.out.println(user);
    }
  }

  // 测试根据id查询用户
  @Test
  public void testFindById() {
    // 调用findById方法,传入id为1
    User user = userMapper.findById(1);
    // 打印结果
    System.out.println(user);
  }

  // 测试添加用户
  @Test
  public void testInsert() {
    // 创建一个User对象,设置其属性值
    User user = new User();
    user.setName("Jack");
    user.setAge(22);
    user.setEmail("jack@outlook.com");
    // 调用insert方法,传入user对象
    userMapper.insert(user);
    // 打印结果,可以看到id已经自动赋值
    System.out.println(user);
  }

  // 测试修改用户
  @Test
  public void testUpdate() {
    // 先根据id查询一个用户,得到一个User对象
    User user = userMapper.findById(2);
    // 修改该对象的属性值
    user.setName("Bobo");
    user.setAge(21);
    user.setEmail("bobo@qq.com");
    // 调用update方法,传入user对象
    userMapper.update(user);
    // 打印结果,可以看到属性值已经更新
    System.out.println(user);
  }

  // 测试删除用户
  @Test
  public void testDelete() {
    // 调用delete方法,传入id为3
    userMapper.delete(3);
    // 查询所有用户,可以看到id为3的用户已经删除
    testFindAll();
  }
}

在上面的代码中,我们使用了@Before和@After两个注解来分别在每个测试方法执行前后进行一些初始化和销毁的操作,例如获取SqlSession,提交事务,关闭资源等。然后,我们使用@Test注解来标记每个测试方法,并在方法体中调用UserMapper接口中的相应方法,并打印结果。运行测试类,我们可以看到控制台输出了正确的结果,说明我们的数据库操作成功了。

总结

本文介绍了MyBatis这个持久层框架的简介,配置和基于注解的基本使用。通过MyBatis,我们可以方便地执行SQL语句,并将结果集映射为Java对象。MyBatis还提供了许多高级特性,如动态SQL,缓存,插件等,使得数据库操作更加灵活和高效。文章来源地址https://www.toymoban.com/news/detail-673552.html

到了这里,关于MyBatis:使用注解让数据库操作更简单的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用dynamic-datasource-spring-boot-starter动态切换数据源操作数据库(MyBatis-3.5.9)

    记录 :383 场景 :使用dynamic-datasource-spring-boot-starter动态切换数据源,使用MyBatis操作数据库。提供三种示例:一,使用@DS注解作用到类上。二,使用@DS注解作用到方法上。三,不使用注解,使用DynamicDataSourceContextHolder类在方法内灵活切换不同数据源。 源码: https://github.com/

    2024年01月20日
    浏览(56)
  • MyBatis操作数据库

    MyBatis 是⼀款优秀的 持久层框架 ,它⽀持⾃定义 SQL、存储过程以及⾼级映射。MyBatis 去除了⼏乎所有的 JDBC 代码以及设置参数和获取结果集的⼯作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接⼝和 Java POJO(Plain Old Java Objects,普通⽼式 Java 对象)为数据库中的

    2024年02月16日
    浏览(52)
  • MyBatis操作数据库实现

    说明:MyBatis是作用于三层架构开发,数据访问层(Data Access Object)的框架,用于访问数据库,对数据进行操作。 首先,创建一个SpringBoot模块,然后把MyBatis的环境搭建起来。因为MyBatis是作用于Dao层的,故先省去Service层,重点关注Dao层中与数据库的交流。 (1)创建Springboot模

    2024年02月08日
    浏览(54)
  • Maven和MyBatis框架简单实现数据库交互

    MyBatis是一种基于Java语言的持久层框架,它的主要目的是简化与数据库的交互过程。MyBatis通过XML或注解配置来映射Java对象和数据库表之间的关系,并提供了灵活的查询方式和结果集处理机制。MyBatis还提供了事务管理、缓存机制、插件扩展等特性。 使用MyBatis可以将SQL语句和

    2024年01月17日
    浏览(50)
  • 超细详解MyBatis操作数据库(1)

    MyBatis 是⼀款优秀的持久层框架,它⽀持⾃定义 SQL、存储过程以及⾼级映射。 MyBatis 去除了几乎所有的 JDBC 代码以及设置参数和获取结果集的⼯作。 MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接⼝和 Java POJO(Plain Old Java Objects,普通⽼式 Java 对象)为数据库中的

    2024年02月04日
    浏览(45)
  • 【JavaEE & Spring】MyBatis 操作数据库(基础操作)

    使⽤MyBatis完成简单的增删改查操作, 参数传递. 掌握MyBatis的两种写法: 注解 和 XML⽅式 掌握MyBatis 相关的⽇志配置 在应⽤分层学习时, 我们了解到web应⽤程序⼀般分为三层,即:Controller、Service、Dao . 之前的案例中,请求流程如下: 浏览器发起请求, 先请求Controller, Controller接收

    2024年01月24日
    浏览(44)
  • MySQL笔记——MySQL数据库介绍以及在Linux里面安装MySQL数据库,对MySQL数据库的简单操作,MySQL的外接应用程序使用说明

    MySQL笔记——MySQL数据库介绍以及在Linux里面安装MySQL数据库,对MySQL数据库的简单操作,MySQL的外接应用程序使用说明 MySQL笔记——表的分组查询、表的分页查询、表的约束、数据库设计 MySQL案例——多表查询以及嵌套查询 MySQL笔记——数据库当中的事务以及Java实现对数据库进

    2024年01月16日
    浏览(75)
  • Spring日志完结篇,MyBatis操作数据库(入门)

    目录 Spring可以对日志进行分目录打印 日志持久化(让日志进行长期的保存) MyBatis操作数据库(优秀的持久层框架) MyBatis的写法 开发规范: 单元测试的写法 传递参数 他的意思是说spring相关只打印INFO级别的标准,但是他也能获取到debug级别的日志 日志设置颜色(只能控制控制

    2024年02月04日
    浏览(38)
  • MyBatis-plus中的两种快捷操作数据库方式:1、mapper调用 2、ActiveRecord方式(简称AR) 二者的使用和区别介绍

            在使用MyBatis操作数据库时,需要频繁的写mapper层dao接口以及对应的配置文件和SQL语句,当功能方法繁杂,业务逻辑不复杂的时候,我们可以使用MyBatis的升级版MyBatis-Plus来代替我们写这些繁琐的配置文件和简单的SQL。 (1)书写或使用MP生成数据库表对应的实体类。

    2024年02月07日
    浏览(67)
  • 数据库操作不再困难,MyBatis动态Sql标签解析

    MyBatis缓存原理 Mybatis的CachingExecutor与二级缓存 Mybatis plugin 的使用及原理 MyBatis四大组件Executor、StatementHandler、ParameterHandler、ResultSetHandler 详解 MyBatis+Springboot 启动到SQL执行全流程 使用MyBatis,或者MyBatis-plus,有一项重要的开发技能就是写动态sql,动态sql能帮我们省略很多复杂逻

    2024年02月12日
    浏览(72)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包