IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 通过Mybatis实现数据库编程 -> 正文阅读

[Java知识库]通过Mybatis实现数据库编程




?

?通过Mybatis实现数据库编程

1. 关于Mybatis框架

Mybatis是目前主流的解决数据库编程相关问题的框架,主要是简化了数据库编程。

Mybatis框架的基础依赖项的artifactId是:mybatis

Mybatis框架虽然可以不依赖于Spring等其它框架,但是,直接使用比较麻烦,需要自行编写大量的配置,所以,通常结合Spring一起使用,需要添加的依赖项的artifactId是:mybatis-spring

在Spring Boot项目中,直接添加mybatis-spring-boot-starter将包含以上依赖项,和其它必要的、常用的依赖项。

Mybatis框架简化数据库编程的表现为:你只需要定义访问数据的抽象方法,并配置此抽象方法映射的SQL语句即可!

2. 关于抽象方法

使用Mybatis框架时,访问数据的抽象方法必须定义在接口中!因为Mybatis框架是通过“接口代理”的设计模式,生成了接口的实现对象!

关于Mybatis的抽象方法所在的接口,通常使用Mapper作为名称的最后一个单词!

则可以在项目的根包下创建mapper.AlbumMapper接口,例如:

public interface AlbumMapper {
}

关于抽象方法:

  • 返回值类型:如果要执行的SQL操作是增、删、改类型的,使用int作为返回值类型,表示“受影响的行数”,不建议使用void
  • 方法名称:自定义的,但推荐遵循规范
  • 参数列表:取决于需要执行的SQL语句需要哪些参数,在抽象方法中,可以将这些参数一一列举出来,也可以将这些参数封装到自定义类中,使用自定义类作为抽象方法的参数
  • 抛出异常:无

关于抽象方法命名参考(来自《阿里巴巴Java开发手册》):

  • 获取单个对象的方法用 get 做前缀
  • 获取多个对象的方法用 list 做前缀
  • 获取统计值的方法用 count 做前缀
  • 插入的方法用 save / insert 做前缀
  • 删除的方法用 remove / delete 做前缀
  • 修改的方法用 update 做前缀。

另外,还需要使得Mybatis框架能明确这个接口是数据访问接口,可以采取的做法有:

  1. 【不推荐】在接口上添加@Mapper注解
    • 每个数据访问接口上都需要此注解
  2. 【推荐】在配置类上添加@MapperScan注解,并配置数据访问接口所在的包
    • 在根包(含子孙包)下的任何添加了@Configuration注解的类都是配置类
    • 只需要一次配置,各数据访问接口不必添加@Mapper注解

则在根包下创建config.MybatisConfiguration类,配置@MapperScan

package cn.tedu.csmall.product.config;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;

/**
 * Mybatis的配置类
 *
 * @author java@tedu.cn
 * @version 0.0.1
 */
@Configuration
@MapperScan("cn.tedu.csmall.product.mapper")
public class MybatisConfiguration {

    public MybatisConfiguration() {
        System.out.println("创建配置类:MybatisConfiguration");
    }

}

2.3. 关于配置SQL语句

在Spring Boot中,整合了Mybatis框架后,可以在数据访问接口的抽象方法上使用@Insert等注解来配置SQL语句,这种做法是不推荐的!

提示:在不是Spring Boot项目中,需要额外的配置,否则,将不识别抽象方法上的@Insert注解。

不推荐使用@Insert等注解配置SQL语句的主要原因有:

  • 长篇的SQL语句不易于阅读
  • 不便于实现特殊的配置
  • 部分配置不易于复用
  • 不便于实现与DBA(Database Administrator)协作

建议使用XML文件来配置SQL语句,这类XML文件需要有固定的、特殊的声明部分,推荐通过复制粘贴得到此文件,或从?http://doc.canglaoshi.org/config/Mapper.xml.zip?下载得到。

src/main/resources下创建mapper文件夹,并将以上压缩包中的SomeMapper.xml复制到此mapper文件夹中:

关于XML文件的配置:

  • 根标签必须是<mapper>
  • <mapper>标签上必须配置namespace属性,此属性的值是接口的全限定名(包名与类名)
  • <mapper>标签内部,使用<insert>?/?<delete>?/?<update>?/?<select>标签来配置增 / 删 / 改 / 查的SQL语句
  • 各配置SQL语句的标签必须配置id属性,取值为对应的抽象方法的名称
  • 各配置SQL语句的标签内部是配置SQL语句的
    • SQL语句不需要使用分号表示结束
    • 不可以随意添加注释

例如:配置为:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="cn.tedu.csmall.product.mapper.AlbumMapper">

    <!-- int insert(Album album); -->
    <insert id="insert">
        INSERT INTO pms_album (
            name, description, sort
        ) VALUES (
            #{name}, #{description}, #{sort}
        )
    </insert>

</mapper>

另外,还需要在application.properties中配置XML文件所在的位置:

# 配置Mybatis的XML文件的位置
mybatis.mapper-locations=classpath:mapper/*.xml

至此,关于“插入相册数据”的功能已经开发完成!

2.4. 测试

在Spring Boot项目中,当需要编写测试时,可以在src/test/java下的根包下创建测试类,并在类中编写测试方法。

则在测试的根包下创建mapper.AlbumMapperTests测试类:

package cn.tedu.csmall.product.mapper;

import cn.tedu.csmall.product.pojo.entity.Album;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class AlbumMapperTests {

    @Autowired
    AlbumMapper mapper;

    @Test
    void testInsert() {
        Album album = new Album();
        album.setName("测试相册001");
        album.setDescription("测试简介001");
        album.setSort(99); // 注意:取值必须是 [0, 255]

        int rows = mapper.insert(album);
        System.out.println("插入数据完成,受影响的行数=" + rows);
    }

}
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-09-25 23:07:17  更:2022-09-25 23:08:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 6:56:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码