MyBatis简介

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或 注解 来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

整合步骤

1. pom.xml添加依赖:
<!--Mybatis 的依赖包-->
<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>1.3.2</version>
</dependency>
<!--mysql依赖 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
<!--第三方连接池:druid-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.0</version>
</dependency>
2. application.yml添加数据源,连接池,mybaits等配置
# 配置MySQL数据源
spring:
  datasource:
     # MySQL连接驱动和版本都是8.0以上需要添加时区:serverTimezone=GMT%2B8
    url: jdbc:mysql://localhost:3307/weather_forecast?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
    username: xxwei3
    password: xxxxxx
    driver-class-name: com.mysql.jdbc.Driver
    # 使用druid连接池
    type: com.alibaba.druid.pool.DruidDataSource
    # 配置druid连接池
    #配置初始化大小/最小/最大
    initialSize: 5
    minIdle: 5
    maxActive: 20
    #获取连接等待超时时间
    maxWait: 60000
    # 间隔多久进行一次检测,检测需要关闭的空闲连接
    timeBetweenEvictionRunsMillis: 60000
    # 一个连接在池中最小生存的时间
    minEvictableIdleTimeMillis: 30000
    # 监控统计拦截的filters
    filters: stat
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    #打开PSCache,并指定每个连接上PSCache的大小。oracle设为true,mysql设为false。分库分表较多推荐设置为false
    poolPreparedStatements: true
    maxOpenPreparedStatements: 20
    sql-script-encoding: utf-8

# mybatis配置
mybatis:
  # 映射文件所在路径
  mapper-locations:  classpath:mappers/*.xml
  # pojo类所在包路径
  type-aliases-package: com.xxwei.demo.entity.po
  # 驼峰命名规范 如:数据库字段是  order_id 那么 实体字段就要写成 orderId
  configuration:
    map-underscore-to-camel-case: true
3. 开发流程

持久层接口(DAO层)
package下新建mapper目录,定义持久化接口,格式如OrderMapper,映射SQL语句有2种方式:

@Mapper
public interface OrderMapper {
    // 第一种:基于xml
    List<Order> getOrderInfoById(@Param("id") String id);

    //第二种:基于注解
    @Delete("delete from `order` where order_id = #{id}")
    void deleteOrderById(@Param("id") String id);
}

如果选择基于xml映射SQL语句,在resource目录下新建mappers目录,定义xml文件,格式如OrderMapper.xml,xml里书写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="com.xxwei.demo.mapper.OrderMapper">
    <select id="getOrderInfoById" resultType="com.xxwei.demo.entity.po.Order">
        SELECT order_id,order_seq,order_name FROM `order` where order_id = #{id}
    </select>
</mapper>

业务层接口(service接口及其实现层)

// service层接口
public interface OrderService {
    List<Order> findOrderById(String id);
}

// 实现层逻辑
@Service
public class OrderServiceImpl implements OrderService {

    @Autowired
    private OrderMapper orderMapper;

    @Override
    public List<Order> findOrderById(String id) {
        return orderMapper.getOrderInfoById(id);
    }
}

控制层接口(controller层)

@RestController
@RequestMapping("/order")
public class OrderController {
    Logger logger = LoggerFactory.getLogger(OrderController.class);

    @Autowired
    private OrderService orderService;

    @RequestMapping("/getOrdersById")
    public String getOrderInfoById(String id){
        List<Order> list = orderService.findOrderById(id);
        return list.get(0).getOrderName();
    }
}

最后,在启动类上加@MapperScan注解:

@SpringBootApplication
@MapperScan("com.xxwei.demo.mapper")
public class MySportHealthyApplication {
   public static void main(String[] args) {
      SpringApplication.run(MySportHealthyApplication.class, args);
   }
}

测试
在浏览器输入url测试:http://localhost:8081/order/getOrdersById?id=1001

拓展

上面是简单的整合了mybatis框架,但是实际项目中还需要用到一些插件,如通用 Mapper 、分页插件等。下面介绍下这2款插件的用途:

  • 通用 Mapper4 是一个可以实现任意 MyBatis 通用方法的框架,项目提供了常规的增删改查操作以及Example 相关的单表操作。通用 Mapper 是为了解决 MyBatis 使用中 90% 的基本操作,使用它可以很方便的进行开发,可以节省开发人员大量的时间。注意:它支持单表操作,不支持通用的多表联合查询。
  • PageHelper支持任何复杂的单表,多表查询,是最方便的分页插件。

1. pom文件添加与插件相关的依赖:

<!-- 通用Mapper插件-->
<dependency>
    <groupId>tk.mybatis</groupId>
    <artifactId>mapper-spring-boot-starter</artifactId>
    <version>2.0.2</version>
</dependency>
<!-- 分页插件-->
<dependency>
	<groupId>com.github.pagehelper</groupId>
	<artifactId>pagehelper-spring-boot-starter</artifactId>
	<version>1.2.5</version>
</dependency>

2.application-pro.yml添加与插件相关的配置:

# 通用Mapper配置
mapper:
  identity: MYSQL
  mappers: tk.mybatis.mapper.common.BaseMapper
  # 设置 insert 和 update 中,是否判断字符串类型!=''
  not-empty: true
  # 枚举按简单类型处理
  enum-as-simple-type: true

# 分页插件配置
pagehelper:
  #  设置数据库方言
  helper-dialect: mysql
  params: count=countSql
  #  分页合理化参数,默认值为false。
  #  当该参数设置为 true 时,pageNum<=0 时会查询第一页, 
  #    pageNum>pages(超过总数时),会查询最后一页。
  #  默认false 时,直接根据参数进行查询
  reasonable: false
  support-methods-arguments: true

分页插件有关的API,参考上面的地址,里面已经给出了很详细的用法和释义。