Spring Boot整合Mybatis(注解方式和XML方式)
其实对我个人而言还是不够熟悉JPA、hibernate,所以觉得这两种框架使用起来好麻烦啊。
一直用的Mybatis作为持久层框架,
JPA(Hibernate)主张所有的SQL都用Java代码生成,
而Mybatis则更主张用原生SQL。
准备
#引入依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
配置参数
修改application.yml:
spring:
datasource:
url: jdbc:mysql://localhost:3306/database_name?characterEncoding=utf-8//有的电脑需要加入时区参数zone不然会报错
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
初始化数据库
-- create database springboot_mybatis charset utf8; DROP TABLE IF EXISTS `user`; CREATE TABLE `user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`username` varchar(255) DEFAULT NULL COMMENT '用户名',
`password` varchar(255) DEFAULT NULL COMMENT '密码',
`create_time` datetime DEFAULT NULL COMMENT '创建日期',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
注解版
Mybatis提供了一些注解实现快速CRUD,比如:@Select,@Update,@Insert,@Delete
相信你在看这篇文章之前已经用过Mybatis了(比如之前的SSM开发),
所以呢,使用注解方式按照XML方式的SQL写法就好。
写在前面之前在SSM开发时,
会在MapperScannerConfigurer中配置:
<property name="basePackage" value="xxx.mapper"/>用于使用Mybatis的接口代理开发模式(且接口和XML需要名称相同)。
那么在SpringBoot整合Mybatis中也要有对应的配置:
方式一:在每个interface Mapper前添加@Mapper注解
方式二:在Application.java启动类前添加@MapperScan("mapper所在的包名")注解
增删改查操作如下:
创建Entity /entity/User.java
@Data
@ToString
public class User implements Serializable {
private Long id;
private String username;
private String password;
private Date createTime;
//用lombok插件注解不用再写getter和setter
}
创建interface/mapper/UserMapperAno.java
public interface UserMapperAno {
@Select("select * from user")
|
其中@Result注解用于修饰返回结果集,若Entity和数据表字段不一致可以用其修饰
测试
创建测试类 /mapper/UserMapperAnoTest.java
1 |
@SpringBootTest |
小结
以上是常用CRUD操作的Mybatis注解版实现,对于基本的操作,使用注解确实比传统的XML简单好多,虽然也是SQL写在注解中,但是感觉比JPA的方式要简便一些(个人理解)。
XML版
使用Mybatis的XML开发方式应该是我们比较熟悉的,和注解版最大的不同就是Dao层,XML版会自动根据Dao层接口的方法名自动映射到XML中同名id对应的SQL。
修改application.yml
添加如下Mybatis配置属性
1 |
#mybatis配置 |
CRUD
创建interface UserMapperXML.java
1 |
public interface UserMapperXML {
List<User> findAll();
User findById(Long id);
void save(User user);
void update(User user);
void delete(Long id);
|
在resources/下创建/mapper/UserMapperXML.xml
1 |
<?xml version="1.0" encoding="UTF-8" ?> |
测试
创建测试类UserMapperXMLTest.java
1 |
@SpringBootTest |
小结
练习了Mybatis注解版和XML版开发模式,更觉得两者配合使用最好,
简单的CRUD操作使用注解完全可以实现;
复杂的查询,比如Mybatis的动态SQL特性在注解中应该很难体现,而在XML中就很容易实现了。
Spring Boot整合Mybatis(注解方式和XML方式)的更多相关文章
- Spring Boot整合MyBatis(非注解版)
Spring Boot整合MyBatis(非注解版),开发时采用的时IDEA,JDK1.8 直接上图: 文件夹不存在,创建一个新的路径文件夹 创建完成目录结构如下: 本人第一步习惯先把需要的包结构创建 ...
- Spring Boot整合Mybatis完成级联一对多CRUD操作
在关系型数据库中,随处可见表之间的连接,对级联的表进行增删改查也是程序员必备的基础技能.关于Spring Boot整合Mybatis在之前已经详细写过,不熟悉的可以回顾Spring Boot整合Myb ...
- Spring Boot系列(三):Spring Boot整合Mybatis源码解析
一.Mybatis回顾 1.MyBatis介绍 Mybatis是一个半ORM框架,它使用简单的 XML 或注解用于配置和原始映射,将接口和Java的POJOs(普通的Java 对象)映射成数据库中的记 ...
- Spring Boot整合Mybatis并完成CRUD操作
MyBatis 是一款优秀的持久层框架,被各大互联网公司使用,本文使用Spring Boot整合Mybatis,并完成CRUD操作. 为什么要使用Mybatis?我们需要掌握Mybatis吗? 说的官 ...
- spring boot 整合 mybatis 以及原理
同上一篇文章一样,spring boot 整合 mybatis过程中没有看见SqlSessionFactory,sqlsession(sqlsessionTemplate),就连在spring框架整合 ...
- Spring Boot 整合mybatis时遇到的mapper接口不能注入的问题
现实情况是这样的,因为在练习spring boot整合mybatis,所以自己新建了个项目做测试,可是在idea里面mapper接口注入报错,后来百度查询了下,把idea的注入等级设置为了warnin ...
- 太妙了!Spring boot 整合 Mybatis Druid,还能配置监控?
Spring boot 整合 Mybatis Druid并配置监控 添加依赖 <!--druid--> <dependency> <groupId>com.alib ...
- Spring Boot整合Mybatis报错InstantiationException: tk.mybatis.mapper.provider.base.BaseSelectProvider
Spring Boot整合Mybatis时一直报错 后来发现原来主配置类上的MapperScan导错了包 由于我使用了通用Mapper,所以应该导入通用mapper这个包
- 【spring boot】14.spring boot集成mybatis,注解方式OR映射文件方式AND pagehelper分页插件【Mybatis】pagehelper分页插件分页查询无效解决方法
spring boot集成mybatis,集成使用mybatis拖沓了好久,今天终于可以补起来了. 本篇源码中,同时使用了Spring data JPA 和 Mybatis两种方式. 在使用的过程中一 ...
随机推荐
- C:函数 注意点
形参 在定义函数时指定的形参,在未出现函数调用时,它们并不占内存中的存储单元,因此称它们是形式参数或虚拟参数,简称形参,表示它们并不是实际存在的数据,所以,形参里的变量不能赋值. C不像C++里一样可 ...
- Apache的虚拟主机功能(基于IP地址、基于虚拟主机、基于端口)
1. 安装Apache服务程序(系统用户,1-199之间) 第一步:在虚拟机软件里选中光盘镜像: 第二步:将光盘设备挂载到/media/cdrom目录 输入:mkdir -p /media/cdrom ...
- 学习笔记(21)- texar 文本生成
今天试了文本生成框架texar https://github.com/asyml/texar 这个texar框架里面,也有端到端的实现 pwd /Users/huihui/git/ git clone ...
- vue项目打包后运行报错400如何解决
昨天一个Vue项目打包后,今天测试,发现无论localhost还是服务器上都运行不了,报错如下: Failed to load resource: the server responded with ...
- Django模型model Field详解:
类型说明 AutoField一个自动增加的整数类型字段.通常你不需要自己编写它,Django会自动帮你添加字段:id = models.AutoField(primary_key=True),这是一个 ...
- [JLOI2009]神秘的生物
题目链接 题目大意 给定一个\(n*n\)的矩阵,从其中选取恰好一个连通块,使选取的格子所对应的权值和最大. \(n\leq 9\) 解题思路 由于\(n\)特别小,考虑插头dp. 和一般的插头dp不 ...
- 【代码学习】PYTHON中的静态方法和类方法
一.类方法 是类对象所拥有的方法,需要用修饰器@classmethod来标识其为类方法,对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数(当然可以用其他名称的变量作为其第一个参数,但是大 ...
- Vue 项目中使用less
首先 你得有 完整的 Vue开发环境第一步 安装less 依赖 npm install less less-loader --save 第二步 修改webpack.config.js文件,配置load ...
- 有未经处理的异常: 0xC00000FD: Stack overflow
将“项目属性.链接器.系统.堆栈保留大小”设大一点比如16000000 这是我在网上找到的答案,很好的解决了我的问题,忘了是哪位大神了,总之,向大神致敬
- node express 应用笔记关键点
1.处理客户端 POST数据(标签 <form>), req.body 对象 app.js var bodyParser = require('body-parser'); ... ... ...