通过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 [email protected]
 * @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文件的配置:

  • 根标签必须是
  • 标签上必须配置namespace属性,此属性的值是接口的全限定名(包名与类名)
  • 标签内部,使用 /  /  /