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,参考上面的地址,里面已经给出了很详细的用法和释义。