Mybatis介绍
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。
Mybatis特点
简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。
解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
提供映射标签,支持对象与数据库的orm字段关系映射
提供对象关系映射标签,支持对象关系组建维护
提供xml标签,支持编写动态sql。
在整合Mybatis前,我们先做些准备工作,建立Mysql数据的表信息及内容
下面给出sql脚本,一个简单的用户信息表
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
`user_name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户名',
`age` int(11) NULL DEFAULT NULL COMMENT '年龄',
`address` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '地址',
`mobile_phone` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '联系电话',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, 'admin', 25, 'beijing', '13001092823');
INSERT INTO `user` VALUES (2, 'testuser', 34, 'shanghai', '18888888888');
INSERT INTO `user` VALUES (3, 'zhangsan', 21, 'shanghai', '13666666666');
INSERT INTO `user` VALUES (4, 'lisi', 15, 'guangzhou', '13111111111');
SET FOREIGN_KEY_CHECKS = 1;
Spring Boot 整合Mybatis详细步骤
- pom文件引入相关依赖 mybatis-spring-boot-starter
<!-- Mysql驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- Mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
- application.yml配置Mybatis相关属性
# MyBatis
mybatis:
# 搜索指定包别名
typeAliasesPackage: org.learn
# 配置mapper的扫描,找到所有的mapper.xml映射文件
mapperLocations: classpath*:mapper/*Mapper.xml
# 加载全局的配置文件
configLocation: classpath:mapper/mybatis-config.xml
- 创建mybatis-config.xml
从上面的配置文件我们可以看出,mybatis-config.xml的路径是在resources/mapper目录下
<?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> <settings> <setting name="cacheEnabled" value="true" /> <!-- 全局映射器启用缓存 --> <setting name="useGeneratedKeys" value="true" /> <!-- 允许 JDBC 支持自动生成主键 --> <setting name="defaultExecutorType" value="REUSE" /> <!-- 配置默认的执行器 --> <setting name="logImpl" value="SLF4J" /> <!-- 指定 MyBatis 所用日志的具体实现 --> <!-- <setting name="mapUnderscoreToCamelCase" value="true"/> 驼峰式命名 --> </settings> </configuration>
- 创建User对象
package org.learn.bean; public class User { private static final long serialVersionUID = 1L; private Integer id; private String userName; private Integer age; private String address; private String mobilePhone; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getMobilePhone() { return mobilePhone; } public void setMobilePhone(String mobilePhone) { this.mobilePhone = mobilePhone; } }
- 创建UserService接口
package org.learn.service; import org.learn.bean.User; import java.util.List; public interface UserService{ /** * 查詢用戶信息列表 * @return */ public List<User> queryAll(); }
- 创建UserServiceImpl类
package org.learn.service.impl; import org.learn.bean.User; import org.learn.mapper.UserMapper; import org.learn.service.UserService; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; @Service public class UserServiceImpl implements UserService { @Resource private UserMapper userMapper; @Override public List<User> queryAll() { return userMapper.queryAll(); } }
- 创建UserMapper接口
package org.learn.mapper; import org.learn.bean.User; import java.util.List; public interface UserMapper { public List<User> queryAll(); }
- 创建UserMapper.xml
我们在application.yml文件中设置了查找XXmapper.xml文件的路径是在resources/mapper下
<?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="org.learn.mapper.UserMapper"> <resultMap type="User" id="UserResult"> <id property="id" column="id" /> <result property="userName" column="user_name" /> <result property="age" column="age" /> <result property="mobilePhone" column="mobile_phone" /> </resultMap> <select id="queryAll" resultMap="UserResult"> select id,user_name,age,address,mobile_phone from user </select> </mapper>
- 创建UserController
package org.learn.controller; import org.learn.bean.User; import org.learn.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import java.util.List; @Controller @RequestMapping("/user") public class UserController { @Autowired private UserService userService; /** * 查询用户信息列表 * @return */ @GetMapping("/list") @ResponseBody public List<User> List(){ List<User> userList = userService.queryAll(); return userList; } }
- SpringBoot启动类增加@MapperScan注解扫描相应的Mapper接口
package org.learn; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication @MapperScan("org.learn.mapper") public class SpringBootLearnApplication { public static void main(String[] args) { SpringApplication.run(SpringBootLearnApplication.class, args); } }
- 浏览器发起Http请求
浏览器输入 http://localhost:8080/user/list 返回json格式的user信息,表明我们成功的通过Mybatis将数据库数据查询至前台
通过以上步骤我们就成功整合了Mybatis框架,我们需要注意的是
1.application.yml中关于Mybatis的配置信息,以及实际映射的文件地址
2.SpringBoot启动类记得增加@MapperScan用于扫描mapper接口类
3.关于数据库连接使用的是druid连接池管理的,具体这块的配置请参考上一章节的配置
大家有什么不明白的问题,欢迎下方评论留言