springboot 2.1 实践教程(十五)-整合Mybatis

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连接池管理的,具体这块的配置请参考上一章节的配置

大家有什么不明白的问题,欢迎下方评论留言

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值