SpringBoot+MySQL,如何整合并使用MyBatis框架
概述
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。 MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs映射成数据库中的记录。
相比Hibernate而言,MyBatis 应该算是半ORM框架,它比Hibernate更灵活,灵活在需要自己写sql语句,当然这是对于那些想自己手动写sql语句的人而言的,因为如何写好sql也是一个很重要的课题。
接下来我们就进入正题,如何整合MyBatis框架
整合MyBatis框架
在原先的demo数据库中建表sys_admin_user,并插入测试数据
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- Table structure for sys_admin_user
DROP TABLE IF EXISTS sys_admin_user;
CREATE TABLE sys_admin_user (
admin_user_id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
user_name varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户名',
password varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '密码',
nick_name varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '昵称',
dept_id bigint(20) DEFAULT NULL COMMENT '部门ID',
phone varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '电话',
email varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '电子邮箱',
avatar varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '头像',
status tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态{0:停用,1:正常}',
deleted_flag tinyint(1) NOT NULL DEFAULT 0 COMMENT '删除标记{0:未删,1:删除}',
login_ip varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '最后登陆IP',
login_time datetime(0) DEFAULT NULL COMMENT '最后登陆时间',
created_at datetime(0) DEFAULT NULL COMMENT '创建时间',
updated_at datetime(0) DEFAULT NULL COMMENT '更新时间',
deleted_at datetime(0) DEFAULT NULL COMMENT '删除时间',
created_by bigint(20) DEFAULT 0 COMMENT '创建者ID',
updated_by bigint(20) DEFAULT 0 COMMENT '更新者ID',
deleted_by bigint(20) DEFAULT 0 COMMENT '删除者ID',
remark varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '备注',
PRIMARY KEY (admin_user_id) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 14 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- Records of sys_admin_user
INSERT INTO sys_admin_user VALUES (1, 'admin', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '卡卡罗特', 1, '123456', 'admin@qq.com', NULL, 1, 0, '127.0.0.1', '2020-10-17 16:16:11', '2020-10-17 16:16:16', '2020-10-17 16:16:18', NULL, 0, 0, 0, '超级管理');
INSERT INTO sys_admin_user VALUES (2, 'singlezhang', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '张三', 1, '123456', 'admin@qq.com', NULL, 1, 0, '127.0.0.1', '2020-10-17 16:16:11', '2020-10-17 16:16:16', '2020-10-17 16:16:18', NULL, 0, 0, 0, '普通管理');
INSERT INTO sys_admin_user VALUES (4, 'xiaoli', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '小李', 3, '123456', 'admin@qq.com', NULL, 1, 0, '127.0.0.1', '2020-10-17 16:16:11', '2020-10-17 16:16:16', '2020-10-17 16:16:18', NULL, 0, 0, 0, '普通员工');
INSERT INTO sys_admin_user VALUES (6, 'yiming', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '一鸣', 3, '123456', 'admin@qq.com', NULL, 1, 0, '127.0.0.1', '2020-10-17 16:16:11', '2020-10-17 16:16:16', '2020-10-17 16:16:18', NULL, 0, 0, 0, '普通员工');
INSERT INTO sys_admin_user VALUES (7, 'lisan', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '李三', 4, '123456', 'admin@qq.com', NULL, 1, 0, '127.0.0.1', '2020-10-17 16:16:11', '2020-10-17 16:16:16', '2020-10-17 16:16:18', NULL, 0, 0, 0, '普通员工');
INSERT INTO sys_admin_user VALUES (8, 'laoqian', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '老钱', 3, '123456', 'admin@qq.com', NULL, 1, 0, '127.0.0.1', '2020-10-17 16:16:11', '2020-10-17 16:16:16', '2020-10-17 16:16:18', NULL, 0, 0, 0, '普通员工');
INSERT INTO sys_admin_user VALUES (9, 'xiaomi', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '小米', 5, '123456', 'admin@qq.com', NULL, 1, 0, '127.0.0.1', '2020-10-17 16:16:11', '2020-10-17 16:16:16', '2020-10-17 16:16:18', NULL, 0, 0, 0, '普通员工');
INSERT INTO sys_admin_user VALUES (10, 'jiekema', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '杰克马', 5, '123456', 'admin@qq.com', NULL, 1, 0, '127.0.0.1', '2020-10-17 16:16:11', '2020-10-17 16:16:16', '2020-10-17 16:16:18', NULL, 0, 0, 0, '普通员工');
INSERT INTO sys_admin_user VALUES (11, 'misschen', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '小陈', 4, '123456', 'admin@qq.com', NULL, 1, 0, '127.0.0.1', '2020-10-17 16:16:11', '2020-10-17 16:16:16', '2020-10-17 16:16:18', NULL, 0, 0, 0, '普通员工');
INSERT INTO sys_admin_user VALUES (12, 'jiekema2', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '杰克马2', 3, '123456', 'admin@qq.com', NULL, 1, 0, '127.0.0.1', '2020-10-17 16:16:11', '2020-10-17 16:16:16', '2020-10-17 16:16:18', NULL, 0, 0, 0, '普通员工');
INSERT INTO sys_admin_user VALUES (13, 'jiekema3', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '杰克马3', 3, '123456', 'admin@qq.com', NULL, 1, 0, '127.0.0.1', '2020-10-17 16:16:11', '2020-10-17 16:16:16', '2020-10-17 16:16:18', NULL, 0, 0, 0, '普通员工');
SET FOREIGN_KEY_CHECKS = 1;
在 pom.xml中添加mybatis依赖(文中只涉及本文相关依赖,其他的依赖在前文中参考)
<!-- Mysql驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- SpringBoot集成mybatis框架 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.boot.version}</version>
</dependency>
3.使用mybatis-generator插件生成 DAO,Model,XML映射文件,如下图:
mybatis-generator
※说明:关于mybatis-generator插件的使用,可以在《如何使用mybatis-generator插件,自动生成mybatis相关文件》一文中了解。
4.添加MyBatis配置类:MybatisConfig.java
package com.zhlab.demo.config;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;
/**
@ClassName MybatisConfig
@Description //MybatisConfig配置类
@Author singleZhang
@Email 405780096@qq.com
@Date 2020/10/31 0031 上午 9:37
**/
@Configuration
@MapperScan("com.zhlab.demo.mapper") //mapper
public class MybatisConfig {
@Autowired
private DataSource dataSource;@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);sessionFactory.setTypeAliasesPackage("com.zhlab.demo.model"); // model PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
sessionFactory.setMapperLocations(resolver.getResources("classpath*:mapper/*.xml")); // 扫描映射文件 return sessionFactory.getObject();
}
}
在DAO层的SysAdminUserMapper.java中添加selectAll()
package com.zhlab.demo.mapper;
import com.zhlab.demo.model.SysAdminUser;
import java.util.List;
public interface SysAdminUserMapper {
int insert(SysAdminUser record);
// 获取用户列表
List<SysAdminUser> selectAll();
}
在对应的xml映射文件SysAdminUserMapper.xml中增加selectAll
select u.*
from sys_admin_user u
在service层增加SysAdminUserService.java,并调用DAO层中SysAdminUserMapper的方法
import org.springframework.stereotype.Service;
import java.util.List;
/**
@ClassName SysAdminUserService
@Description //TODO
@Author singleZhang
@Email 405780096@qq.com
@Date 2020/10/31 0031 上午 9:45
**/
@Service
public class SysAdminUserService {@Autowired
SysAdminUserMapper sysAdminUserMapper;// 获取用户列表
public List findAll(){
return sysAdminUserMapper.selectAll();
}
}
在接口层创建一个UserController.java,来测试一下
package com.zhlab.demo.controller;
import com.zhlab.demo.model.SysAdminUser;
import com.zhlab.demo.service.SysAdminUserService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
@ClassName UserController
@Description //TODO
@Author singleZhang
@Email 405780096@qq.com
@Date 2020/10/31 0031 上午 9:43
**/
@RestController
@RequestMapping("/user")
public class UserController {@Autowired
SysAdminUserService sysAdminUserService;/* 方法注解 */
@ApiOperation(value = "方法名:用户列表", notes = "获取用户列表")
@GetMapping("/list")
public List list(){
List list = sysAdminUserService.findAll();return list;
}
}
运行项目,打开http://localhost:8080/swagger-ui.html看执行效果
用户列表接口
运行这个接口,可以得到想要的所有用户的列表
用户列表
总结
Mybatis的集成还是比较简单的,后续还会讲解分页以及复杂查询,对于插件的使用可以选择一种mybatis-generator或者mybatis-plus,两种不可同时使用,会发生冲突。
返回【Spring Boot学习】目录
作者:https://www.hbfzb.com/index.php
链接:http://www.autono1.com/
来源:http://szgc.glodon.com/news.php
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
SpringBoot+MySQL,如何整合并使用MyBatis框架的更多相关文章
- OSGI企业应用开发(九)整合Spring和Mybatis框架(二)
上篇文章中,我们完成了在OSGI应用中整合Spring和Mybatis框架的准备工作,本节我们继续Spring和Mybatis框架的整合. 一.解决OSGI整合Spring中的Placeholder问 ...
- OSGI企业应用开发(八)整合Spring和Mybatis框架(一)
到目前为止,我们已经学习了如何使用Blueprint將Spring框架整合到OSGI应用中,并学习了Blueprint&Gemini Blueprint的一些使用细节.本篇文章开始,我们將My ...
- OSGI企业应用开发(十)整合Spring和Mybatis框架(三)
上篇文章中,我们已经完成了OSGI应用中Spring和Mybatis框架的整合,本文就来介绍一下,如何在其他Bundle中,使用Mybatis框架来操作数据库. 为了方便演示,我们新建一个新的Plug ...
- 框架整合——Spring与MyBatis框架整合
Spring整合MyBatis 1. 整合 Spring [整合目标:在spring的配置文件中配置SqlSessionFactory以及让mybatis用上spring的声明式事务] 1). 加入 ...
- 阶段3 3.SpringMVC·_07.SSM整合案例_07.ssm整合之编写MyBatis框架测试保存的方法
再写一个测试的方法,测试save保存的方法 需要提交事务才能保存到数据库
- 阶段3 3.SpringMVC·_07.SSM整合案例_06.ssm整合之编写MyBatis框架
需要先搭建Mybits的环境. 用Mybits的注解的方式.把两个方法的sql语句写完 SqlMapConfig.xml resources下新建xml文档 把约束粘贴过来 两步操作 环境标签叫做en ...
- SpringBoot 整合jdbc和mybatis
摘要 该文章主要为记录如何在SpringBoot项目中整合JDBC和MyBatis,在整合中我会使用简单的用法和测试用例,毕竟该文章目的是为了整合,而不是教大家如何去使用.希望大家多多包涵. 通用配置 ...
- SpringBoot入门篇--整合mybatis+generator自动生成代码+druid连接池+PageHelper分页插件
原文链接 我们这一篇博客讲的是如何整合Springboot和Mybatis框架,然后使用generator自动生成mapper,pojo等文件.然后再使用阿里巴巴提供的开源连接池druid,这个连接池 ...
- Spring Boot:整合MyBatis框架
综合概述 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单 ...
随机推荐
- ansible-playbook流程控制-when条件判断
1. ansible-playbook添加判断 when相当于shell脚本里的if 判断,when语句就是用来实现这个功能的,它是一个jinja2的语法,但是不需要双大括号,用法很简单 1 ...
- 技术心得丨一种有效攻击BERT等模型的方法
Is BERT Really Robust? A Strong Baseline for Natural Language Attack on Text Classification and Enta ...
- Hudi on Flink在顺丰的实践应用
获取PDF版本 请关注"实时流式计算" 后台回复 "flink1015"
- MeteoInfoLab脚本示例:AMSR-E卫星数据投影
AMSR-E(http://nsidc.org/data/amsre/index.html)数据中的Land3数据是HDF-EOS4格式,投影是Cylindrical_Equal_Area.这里示例读 ...
- Martyr2项目实现——Number部分的问题求解 (1) Find Pi to Nth Digit
Martyr2项目实现--Number部分的问题求解 (1) Find Pi to Nth Digit Find Pi to Nth Digit 问题描述: Find PI to the Nth Di ...
- Afinal简介和使用方法
Afinal简介 Afinal 是一个android的sqlite orm 和 ioc 框架.同时封装了android中的http框架,使其更加简单易用: 使用finalBitmap,无需考虑bitm ...
- linux修改环境变量后无法登录
在登陆界面按Ctrl+Alt+F1(F1~F6), 进入 tty 后登陆账号. 执行以下命令: /usr/bin/sudo /usr/bin/vi /etc/environment 将PATH的值复原 ...
- oracle强制修改字符集
首先查看服务端字符集 select * from v$nls_parameters where parameter = 'NLS_CHARACTERSET' NLS_CHARACTERSET WE8M ...
- Docker指令整理
date: 2018-11-18 11:09:28 updated: 2018-11-18 11:09:28 Docker指令整理 管理员权限!!! 查看docker版本 docker -v 启动 s ...
- JAVA NIO 基础学习
package com.hrd.netty.demo.jnio; import java.io.BufferedReader; import java.io.IOException; import j ...