【Spring Boot整合MyBatis教程】
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。
以下是Spring Boot整合MyBatis的详细教程,包含完整的代码示例。
1、创建一个Spring Boot项目
首先,我们需要创建一个Spring Boot项目。打开IDE(推荐使用IntelliJ IDEA),选择New Project,然后选择Spring Initializr,根据需要填写必要的信息(例如Group、Artifact、Dependencies等),最后确认创建项目。
2、添加必要的依赖关系
在pom.xml文件中添加以下依赖关系,以集成MyBatis框架:
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.0</version></dependency><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><version>1.4.195</version><scope>runtime</scope> </dependency></dependencies>
其中,spring-boot-starter-web 表示 Spring Boot 的 Web 开发起始依赖包,mybatis-spring-boot-starter 是 MyBatis 官方提供的集成 Spring Boot 的起步依赖包,h2 是一个内存数据库,可以用作我们测试环境的数据库。
3、创建实体类和Mapper接口
在 src/main/java 下创建一个名为 com.example.demo.domain 的包,这个包存放的是实体类。下面是一个简单的User实体类:
public class User {private Long id;private String username;private String password;// 省略setter和getter方法
}
接下来,我们需要定义一个Mapper接口来操作 User 实体类。在 src/main/java 下创建一个名为 com.example.demo.mapper 的包,然后创建一个名为 UserMapper 的接口:
public interface UserMapper {User findByUsername(String username);void save(User user);
}
4、创建Mapper映射文件
在 src/main/resources/mapper 下创建一个名为 UserMapper.xml 的文件,用于定义SQL语句。下面是一个简单的UserMapper.xml文件:
<?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.example.demo.mapper.UserMapper"><resultMap id="BaseResultMap" type="com.example.demo.domain.User"><id column="id" property="id" jdbcType="BIGINT" /><result column="username" property="username" jdbcType="VARCHAR" /><result column="password" property="password" jdbcType="VARCHAR" /></resultMap><select id="findByUsername" resultMap="BaseResultMap">SELECT * FROM users WHERE username = #{username}</select><insert id="save" useGeneratedKeys="true" keyProperty="id">INSERT INTO users (username, password) VALUES (#{username}, #{password})</insert></mapper>
5、编写服务层的代码
创建服务层来实现业务逻辑。在src/main/java 下创建一个名为 com.example.demo.service 的包,然后创建一个名为 UserService 的接口:
public interface UserService {User findByUsername(String username);void save(User user);
}
接下来,创建 UserServiceImpl 类实现 UserService 接口:
@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Overridepublic User findByUsername(String username) {return userMapper.findByUsername(username);}@Overridepublic void save(User user) {userMapper.save(user);}}
6、创建控制器层的代码
在src/main/java 下创建一个名为 com.example.demo.controller 的包,然后创建一个名为 UserController 的类:
@RestController
public class UserController {@Autowiredprivate UserService userService;@RequestMapping(value = "/findUser")public User findUser(HttpServletRequest request) {String username = request.getParameter("username");return userService.findByUsername(username);}@RequestMapping(value = "/saveUser")public String saveUser(HttpServletRequest request) {String username = request.getParameter("username");String password = request.getParameter("password");User user = new User();user.setUsername(username);user.setPassword(password);userService.save(user);return "SUCCESS";}}
7、修改配置文件
在 src/main/resources 下创建一个名为 application.properties 的文件。添加以下属性:
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.datasource.password=mybatis.configuration.map-underscore-to-camel-case=true
mybatis.mapper-locations=classpath:mapper/*.xml
这个文件用于配置一些参数,并将 MyBatis 的映射配置文件放在mapper文件夹中。
至此,我们已经完成了 Spring Boot 整合 MyBatis 框架的所有步骤。
最后,附上完整代码:
完整代码
User.java:
public class User {private Long id;private String username;private String password;// 省略setter和getter方法
}
UserMapper.java:
public interface UserMapper {User findByUsername(String username);void save(User user);
}
UserMapper.xml:
<?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.example.demo.mapper.UserMapper"><resultMap id="BaseResultMap" type="com.example.demo.domain.User"><id column="id" property="id" jdbcType="BIGINT" /><result column="username" property="username" jdbcType="VARCHAR" /><result column="password" property="password" jdbcType="VARCHAR" /></resultMap><select id="findByUsername" resultMap="BaseResultMap">SELECT * FROM users WHERE username = #{username}</select><insert id="save" useGeneratedKeys="true" keyProperty="id">INSERT INTO users (username, password) VALUES (#{username}, #{password})</insert></mapper>
UserServiceImpl.java:
@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Overridepublic User findByUsername(String username) {return userMapper.findByUsername(username);}@Overridepublic void save(User user) {userMapper.save(user);}}
UserController.java:
@RestController
public class UserController {@Autowiredprivate UserService userService;@RequestMapping(value = "/findUser")public User findUser(HttpServletRequest request) {String username = request.getParameter("username");return userService.findByUsername(username);}@RequestMapping(value = "/saveUser")public String saveUser(HttpServletRequest request) {String username = request.getParameter("username");String password = request.getParameter("password");User user = new User();user.setUsername(username);user.setPassword(password);userService.save(user);return "SUCCESS";}}
application.properties:
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=root
spring.datasource.password=123456mybatis.configuration.map-underscore-to-camel-case=true
mybatis.mapper-locations=classpath:mapper/*.xml
希望这个教程可以帮助到你!
相关文章:
【Spring Boot整合MyBatis教程】
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发…...
ThinkPHP3.2.3通过局域网手机访问项目
折腾一上午, 试了nginx, 试了修改Apache的httpd.conf 试了关闭代理 试了手动配置网络 试了关闭防火墙 试了添加防火墙入站出站规则 问了五个ChatGPT 都没解决。 记录一下 wampserver3.0.4 Apache2.4.18 PHP 5.6.19 MySQL 5.7.11 所有服务启…...
2306C++虚继承
构 B{无序映<串,串>列;整 大小0;空 f(){大小;} }; //虚继承其实不错,但是占位置,占空间.构 C:虚 公 B{空 g(){} };构 D:虚 公 C{空 h(){} }; 构 S{}; 构 T{}; //元<类 T>构 E:虚 公 D{}; 构 E:虚 公 D{};空 主(){//E<S>e;e.f();打印(e.大小);//E<T>m;m…...
使用oracle遇到问题笔记
一、oracle还原到不同版本的oracle数据库报错和解决办法 产生:执行imp导入dmp备份文件时报错 错误内容:导入失败提示:“不是有效的导出文件, 标头验证失败”解决方法 解决办法:http://t.csdn.cn/pJyhc...
我和老刘又被搞惨了
前两天在调试PHY的时候遇到了一堆问题,老刘都不耐其烦的搞定了,这次我们开始调试音频部分,音频部分很简单,无非就是录音,要是能把录音的音频拿到了,那就万事大吉了。老刘也是信心满满,老刘对我说…...
DDD--基本概念
最近项目组一直在推DDD领域驱动设计,现就一些个人理解分享如下。 DDD(领域驱动设计)是一种软件开发方法论,旨在解决复杂业务场景下的软件设计与开发问题。以下是DDD的基本概念: 领域(Domain)&…...
chatgpt赋能python:Python多行注释
Python 多行注释 在 Python 中,我们经常需要写注释来解释代码或者用于调试。Python 的注释分为单行注释和多行注释,本文主要介绍 Python 中如何多行注释。 单行注释 在 Python 中,单行注释以符号 # 开头,可以写在代码的任何位置…...
JSP详细基础教学
目录 前言 环境设置 创建JSP文件 编写基本的JSP代码 部署和运行JSP页面 基础语法 前言 JSP(JavaServer Pages)是一种用于开发动态网页的Java技术。它允许将Java代码嵌入HTML页面中,以便在服务器端生成动态内容。在本次教程中ÿ…...
mysql修改登录用户的密码
文章目录 mysql5.7即mysql7.0 的修改方式mysql5.8即mysql8.0的修改方式如果修改完密码,发现旧密码和新密码都登录不进来怎么办?发现设置密码老报错 mysql5.7即mysql7.0 的修改方式 1.如果是使用docker里装的mysql 首先使用 [rootlocalhost /]# docker p…...
SNAT和DNAT
SNAT和DNAT 一、SNAT的策略及应用: 1.SNAT: (1)定义:又称源地址转换。源地址转换是内网地址向外访问时,发起访问的内网ip地址转换为指定的ip地址(可指定具体的服务以及相应的端口或端口范围&…...
好程序员:月薪2万程序员的简历,原来长这个样子!
6月份现在正是招聘季节,不少同学java岗位投递不少,但回复不多,根本原因可能是java面试简历不够吸引人。 你的java简历不会写?看看别人就知道咋写了,这里给大家拆解一份好程序员月薪2万的java简历。 java自我评价模块&a…...
STM32之FreeRTOS
目录 FreeRTOS 介绍 什么是 FreeRTOS ? 为什么选择 FreeRTOS ? FreeRTOS 资料与源码下载 祼机开发与 FreeRTOS 祼机开发: FreeRTOS: FreeRTOS 实现多任务的原理 二、移植 FreeRTOS 手动移植 使用CubeMX快速移植 快速移植流程…...
有趣的图(二)(56)
小朋友们好,大朋友们好! 我是猫妹,一名爱上Python编程的小学生。 和猫妹学Python,一起趣味学编程。 今日主题 咱们书接上回,上次学了图的基本概念,你都学会了吗? 咱们今天要学习内容如下&a…...
Linux之环境变量
目录 Linux之环境变量 分类 环境变量 定义 设置环境变量 设置环境变量(永久) 用户环境变量配置所在文件: 全局环境变量配置所在文件: 显示与取消环境变量 通过echo或printf打印环境变量 通过env或set显示默认的环境变量 用 …...
python带你制作自动点赞小程序,让我看看谁还在呆呆的手动点赞
前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 知识点: 动态数据抓包 requests发送请求 开发环境: 代码所使用软件工具: python 3.8 >>>>>> 运行代码 pycharm 2022.3 >>>>>> 辅助敲代码 需下载的第三方模块&a…...
shell脚本编写辅助命令
目录 一、echo 命令 二、字符串相关操作 1.截取字符串 2.获取字符串长度 3.字符串追加字符 4.从开头或结尾删除字符串指定格式内容 三、随机数 1.使用 $RANDOM 2.指定RANDOM变量的范围 (1)从0开始的范围 (2)从指定数始…...
高并发编程:线程池
一、概述 线程池首先有几个接口先了解第一个是Executor,第二个是ExecutorService,在后面才是线程池的一个使用ThreadPoolExecutor。 二、Executor Executor看它的名字也能理解,执行者,所以他有一个方法叫执行,那么执…...
微信小程序开发uni-app-8分钟上手开发
本篇文章uni-app微信小程序开发-8分钟上手开发 -首先到微信小程序官网登录/注册微信小程序 微信小程序官网 uni-app 微信小程序 注册微信小程序 这里要注意: 激活邮箱之后,选择主体类型为 “个人类型”,并按要求登记主体信息。主体信息提…...
【C++11】 initializer_list | 右值引用 | 移动构造 | 完美转发
文章目录 1. 统一的列表初始化{ } 初始化initializer_list 2. 引用左值引用右值引用左值引用与右值引用的相互转换右值引用的真正使用场景移动构造 C98与C11传值返回问题注意事项总结 3. 完美转发 1. 统一的列表初始化 { } 初始化 C11 扩大了括号括起的列表(初始化列表)的使用…...
基于html+css的图展示122
准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…...
《Unix环境高级编程》/bin/sh: ./fixup.awk: Permission denied
我的代码是从http://www.apuebook.com/code3e.html下载的,先是在 使用cat /etc/redhat-release看到操作系统是CentOS Linux 7.6,使用uname -r看到内核是3.10.0-957.el7.x86_64。 在代码顶级目录下,执行make。 发现报错: ./fi…...
万字长文+示例代码详解DDD中常用的架构(含代码示例)
目录 分层架构(Layered Architecture) 概念 示例代码 总结 领域驱动设计的六边形架构(Hexagonal Architecture) 概念 示例代码 总结 CQRS(Command Query Responsibility Segregation) 概念 示例…...
Debezium UI On ECS编译安装及开放Web访问
1. 访问debezium-ui的代码仓库,下载源码 GitHub - debezium/debezium-ui: A web UI for Debezium; Please log issues at https://issues.redhat.com/browse/DBZ. 2. 解压zip源码包: TEST[hadoopshdcvfsla1894 ~]$ cd /data/module TEST[hadoopshd…...
【支付系统】核心支付流程
支付在产品中常见的用处为购买和充值.这两种功能操作大相径庭,其中购买相对充值多了很多步骤,它需要锁商品或者库存,还需要超时未支付取消订单等操作.在这篇文章中主要探讨支付部分,属于购买和充值公共部分. 下面是绘制的简易支付时序图 以上时序图并非完整,其实核心步骤就是, …...
电脑系统可以直接备份到其它硬盘上吗
在日常使用电脑的过程中,我们都希望能够保护好重要的系统数据,以防止意外数据丢失或系统崩溃。那么,能否将电脑系统直接备份到其他硬盘上呢?本文将为您解答这个问题,并探讨备份系统的方法和注意事项。 工具/原料&…...
springboot项目如何优雅停机
文章目录 前言kill -9 pid的危害如何优雅的停机理论步骤优雅方式1、kill -15 pid 命令停机2、ApplicationContext close停机3、actuator shutdown 停机4、ApplicationListener 监听延时停机 前言 相信很多同学都会用Kill -9 PID来杀死进程,如果用在我们微服务项目里…...
springboot mybatis-plus 代码生成工具
介绍 基于mybatis-plus代码生成工具 后续会不断完善 规划 后续会基于此功能搞低代码平台,会有前端VUE mybatis-plus介绍&特性 • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑 • 损耗小࿱…...
超全、超详细的Redis学习笔记总结
❤ 作者主页:欢迎来到我的技术博客😎 ❀ 个人介绍:大家好,本人热衷于Java后端开发,欢迎来交流学习哦!( ̄▽ ̄)~* 🍊 如果文章对您有帮助,记得关注、点赞、收藏、…...
Day05 04-MySQL分库分表介绍
文章目录 第十七章 MySQL分库分表17.1 什么是分库分表17.2 为什么要分库分表17.3 垂直切分17.3.1 垂直分库17.3.2 垂直分表 17.4 水平切分17.4.1 水平分库17.4.2 水平分表17.4.3 常见的水平切分规则 第十七章 MySQL分库分表 17.1 什么是分库分表 MySQL数据库常见的优化方案中…...
基于SpringBoot+vue的毕业生信息招聘平台设计和实现
博主介绍: 大家好,我是一名在Java圈混迹十余年的程序员,精通Java编程语言,同时也熟练掌握微信小程序、Python和Android等技术,能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架下…...
中国企业集成网网址电子商务/网站seo优化方案项目策划书
有时,程序中需要判断一个字符是否是字母。可以使用正则表达式或者PHP内置函数判断。本篇只讲解判断一个字符而非字符串,所以以下示例中的输入参数都是一个字符。以下函数只判断一个字符是否字母,如果输入的是字符串可能会有异常结果ÿ…...
四川蓉和建设公司网站/长尾关键词
alpha,4α alpha,5Α beta,4β beta,5Β gamma,4γ gamma,5Γ delta,4δ delta,5Δ epsilon,4ε epsilon,5Ε zeta,4ζ zeta,5Ζ eta,4η eta,5Η theta,4θ theta,5Θ iota,4ι iota,5Ι kappa,4κ kappa,5Κ lambda,4λ lambda,5Λ mu,4μ mu,5Μ nu…...
css做电商网站首页/分销平台
CListCtrl删除所有列: int int_itemcount m_CListCtrl1. GetHeaderCtrl()->GetItemCount ();for(int nIndex0; nIndex<int_itemcount ;nIndex) {m_CListCtrl1.DeleteColumn (0);}转载于:https://www.cnblogs.com/bibo/p/3897843.html...
关于网站建设的题目/线上推广的公司
SAP EWM和AGV机器人究竟是如何连接 很多攻城狮都对EWM如何与AGV对接的问题感兴趣,那么本文就来探讨一下如何让EWM和AGV做朋友吧。 先举个栗子,某天你和心中的女神约饭,你打开点评软件找到了合适的餐馆,然后打开导航软件ÿ…...
8x8x域名解析ip地址查询 1080p/北京seo做排名
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 基本思路:建立一个包含K个元素的大顶堆。 注:python中貌似只能直接建小顶堆。 # -*- coding:utf-8 -*- class Solution:def …...
做网站等保收费/怎么申请建立网站
[aligncenter][sizex-large][b][colorred] 在myeclipse配置subclipse插件,使用SVN服务器[/color][/b][/size][/align][colorgreen]项目管理软件:Subversion(SVN服务器客户端)下载[/color]:[url]http://subversion.apache.org/[/url][colorgre…...