网易首页 > 网易号 > 正文 申请入驻

Spring Boot整合Mybatis的基本使用-使用注解读取数据

0
分享至

Mybatis和Hibernate是Java很常用的两款ORM框架,Hibernate框架强大,但是有些过重,Mybatis相对轻量级一些,总之这两种框架各有优劣势,在国内,Mybatis的使用率明显高于Hibernate。由于我也是比较倾向于自己写SQL,所以,在工作中,Mybatis用得较为多一些,某些项目也在使用Hibernate。虽然Mybatis用得较多,但是也只是会一些简单的单表增、删、改、查操作,没有进行深入,最近稍微时间充裕一些,便想着花点精力去学复杂一些的场景。

我们去start.spring.io新建一个Spring Boot项目,这里选择了四个组件:

  • spring-boot-starter-web
  • mybatis-spring-boot-starter
  • mysql-connector-java
  • lombok

创建完成后,直接导入到IDEA中,现在先新建一张表:

CREATE TABLE `mybatis`.`user` (

`id` int NOT NULL AUTO_INCREMENT,

`name` varchar(32) NULL,

`age` varchar(255) NULL,

`phone` varchar(11) NULL,

`address` varchar(255) NULL,

PRIMARY KEY (`id`)

并在user中加入几条测试数据,现在我们去程序新建一个User类型作为映射类

@Data

public class User {

private Long id;

private String name;

private int age;

private String address;

在application.yml配置数据库连接

spring:

#数据库连接配置

datasource:

driver-class-name: com.mysql.cj.jdbc.Driver

url: jdbc:mysql://127.0.0.1:3306/mybatis?characterEncoding=utf-8&useSSL=false

username: root

password: root

准备就绪后,新建一个UserMapper的接口,使用注解的方式来获取user表中的数据,

@Mapper

public interface UserMapper {

@Select("select * from user")

List

queryUser();

@Mapper用于注入该Mapper接口,注入后就可以在IOC容器中使用,@Select用于查询数据,现在我们来调用该UserMapper接口看看效果

@SpringBootApplication

public class DemoApplication {

public static void main(String[] args) {

SpringApplication.run(DemoApplication·class, args);

private UserMapper userMapper;

public DemoApplication(UserMapper userMapper){

this.userMapper=userMapper;

@Bean

CommandLineRunner commandLineRunner() {

return args -> {

List

users=userMapper.queryUser();

System.out.println(users);

运行起来后,会看到如下效果:

2021-08-27 09:48:28.523 INFO 21728 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...

2021-08-27 09:48:28.701 INFO 21728 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.

[User(id=1, name=张三, age=60, address=四川某隐秘地区), User(id=2, name=李四, age=58, address=山东某隐秘地区)]

我们也可以看到,Spring Boot默认会使用hikari作为我们的数据库连接池。

Mybatis除了@Select外,还有@Update、@Insert、@Delete、@Results等,前面三个注解,我相信大部分人并不陌生,顾名思义吗,就是单表的修改、新增和删除。那么@Results是做什么的呢?Mybatis作为ORM,那么它如何把表数据的字段和我们的类属性映射起来呢?一般是数据库的字段名和类的字段名能够匹配上,如果不能匹配上,那就想办法匹配上,比如在写查询语句的时候给字段加别名,或者是用 @Results建立一个映射关系,我们来演示一把吧。

我们在user表新增一个dept_name字段,在字段中添加任意内容,然后在User类中加上deptName属性,再次运行看看效果

2021-08-27 10:16:21.659 INFO 44628 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...

2021-08-27 10:16:22.064 INFO 44628 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.

[User(id=1, name=张三, age=60, address=四川某隐秘地区, deptName=null), User(id=2, name=李四, age=58, address=山东某隐秘地区, deptName=null)]

我们可以看到deptName没有值,接下来就想办法映射上,给字段加别名

@Mapper

public interface UserMapper {

@Select("select id,name,age,address,dept_name deptName from user")

List

queryUser();

2021-08-27 10:18:37.978 INFO 35624 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...

2021-08-27 10:18:38.078 INFO 35624 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.

[User(id=1, name=张三, age=60, address=四川某隐秘地区, deptName=OK), User(id=2, name=李四, age=58, address=山东某隐秘地区, deptName=OK)]

接下来我们尝试用@Results来建立映射关系

@Mapper

public interface UserMapper {

@Select("select * from user")

@Results(id="resultMap",value = {

@Result(id = true,column = "id",property = "id"),

@Result(column = "name",property = "name"),

@Result(column = "age",property = "age"),

@Result(column = "address",property = "address"),

@Result(column = "dept_name",property = "deptName"),

List

queryUser();

2021-08-27 10:22:17.198 INFO 35536 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...

2021-08-27 10:22:17.376 INFO 35536 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.

[User(id=1, name=张三, age=60, address=四川某隐秘地区, deptName=OK), User(id=2, name=李四, age=58, address=山东某隐秘地区, deptName=OK)]

创建好的Results是可以复用的,直接使用@ResultMap注解,引用前面定义好的映射关系即可,我们把代码稍作修改

@Mapper

public interface UserMapper {

@Select("select * from user")

@Results(id="resultMap",value = {

@Result(id = true,column = "id",property = "id"),

@Result(column = "name",property = "name"),

@Result(column = "age",property = "age"),

@Result(column = "address",property = "address"),

@Result(column = "dept_name",property = "deptName"),

List

queryUser();

@Select("select * from user where id=#{id}")

@ResultMap(value = "resultMap")

User queryUserById(Long id);

@SpringBootApplication

public class DemoApplication {

public static void main(String[] args) {

SpringApplication.run(DemoApplication·class, args);

private UserMapper userMapper;

public DemoApplication(UserMapper userMapper){

this.userMapper=userMapper;

@Bean

CommandLineRunner commandLineRunner() {

return args -> {

List

users=userMapper.queryUser();

System.out.println(users);

User user=userMapper.queryUserById(1L);

System.out.println(user);

2021-08-27 10:30:35.153 INFO 11916 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...

2021-08-27 10:30:35.275 INFO 11916 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.

[User(id=1, name=张三, age=60, address=四川某隐秘地区, deptName=OK), User(id=2, name=李四, age=58, address=山东某隐秘地区, deptName=OK)]

User(id=1, name=张三, age=60, address=四川某隐秘地区, deptName=OK)

当然,如果觉得定义Results和写字段别名很麻烦,Mybatis还给我们提供了另外一种方式,就是驼峰映射,只要我们的命名符合驼峰规则,便可使用,如果开启驼峰映射像上面的dept_name就会去掉下划线,自动映射到deptName上,那么我们如何开启驼峰映射呢?很简单,在配置文件中加入如下配置即可

mybatis:

#mapper配置文件

configuration:

map-underscore-to-camel-case: true

好了,这里先就说到简单的使用@Select、@Results注解来获取单表数据,后面,我使用xml文件来代替注解的方式

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
《繁花》后,央视再现“王炸”,才6集收视率就全国第一

《繁花》后,央视再现“王炸”,才6集收视率就全国第一

天保影视V3
2024-05-14 06:30:03
这几部可能是史上尺度最大的肉片,《五十度灰》都弱爆了

这几部可能是史上尺度最大的肉片,《五十度灰》都弱爆了

娱乐圈酸柠檬
2024-05-15 12:38:38
首航归来的福建舰,还没装拦阻索,参照美式航母或半年后就能服役

首航归来的福建舰,还没装拦阻索,参照美式航母或半年后就能服役

啸鹰评
2024-05-14 23:33:57
中韩谈了4小时,韩国想要的,中方终于给了,赵兑烈对华作出承诺

中韩谈了4小时,韩国想要的,中方终于给了,赵兑烈对华作出承诺

娱乐的宅急便
2024-05-15 08:48:29
公务舱变经济舱?南航擅自“降舱”无补偿,网友:好无语啊

公务舱变经济舱?南航擅自“降舱”无补偿,网友:好无语啊

趣味萌宠的日常
2024-05-16 00:14:43
查尔斯三世新画像揭幕,血红一片,褒贬不一,被评价“像撒旦”

查尔斯三世新画像揭幕,血红一片,褒贬不一,被评价“像撒旦”

KK说王室
2024-05-15 10:54:52
突发!5月14日,歌手解晓东,真的让人没想到!

突发!5月14日,歌手解晓东,真的让人没想到!

花花lo先森
2024-05-15 15:47:05
俄军的每一步都代价惨重!哈尔科夫传来振奋人心的消息

俄军的每一步都代价惨重!哈尔科夫传来振奋人心的消息

娱宙观
2024-05-14 20:10:36
后续!警车高速逼停私家车,官方回应,两男子身份曝光,律师发声

后续!警车高速逼停私家车,官方回应,两男子身份曝光,律师发声

影孖看世界
2024-05-15 17:50:34
火箭今夏手握全额中产特例,他们可以将目标对准这位超级投手?

火箭今夏手握全额中产特例,他们可以将目标对准这位超级投手?

稻谷与小麦
2024-05-15 23:58:48
央媒怒批!湖南这一夜,戳穿了那英的实力,也撕开了内娱的遮羞布

央媒怒批!湖南这一夜,戳穿了那英的实力,也撕开了内娱的遮羞布

慎独赢
2024-05-13 12:55:06
库尔图瓦终结皇马门将之争

库尔图瓦终结皇马门将之争

星耀国际足坛
2024-05-16 00:06:46
众歌手皆想去《歌手2024》请战支持那英,只有容祖儿说得一针见血

众歌手皆想去《歌手2024》请战支持那英,只有容祖儿说得一针见血

娱最资讯
2024-05-15 19:30:29
湖北:29岁女子相亲约700多海鲜,男生直接拒绝见面,不当大怨种

湖北:29岁女子相亲约700多海鲜,男生直接拒绝见面,不当大怨种

雅清故事汇
2024-05-15 17:14:23
听说这是大S刚刚离婚时候拍摄的照片,那个时候还是很年轻漂亮的

听说这是大S刚刚离婚时候拍摄的照片,那个时候还是很年轻漂亮的

青瓜娱评
2024-05-15 15:32:30
需要你站出来!阿不都41分钟仅得5分 空篮不中遭新疆冠军教头吐槽

需要你站出来!阿不都41分钟仅得5分 空篮不中遭新疆冠军教头吐槽

狼叔评论
2024-05-16 00:20:06
狂轰40+13+7!我不是个天才,赛马才是主业,打NBA顺便拿个MVP

狂轰40+13+7!我不是个天才,赛马才是主业,打NBA顺便拿个MVP

康泳哥看体育
2024-05-15 23:46:40
被挂上热搜的广州“肥头大耳”事件反转:逼疯一个人有多容易?

被挂上热搜的广州“肥头大耳”事件反转:逼疯一个人有多容易?

小椰子专栏
2024-05-14 13:04:53
哈马斯为什么不善待手中的“筹码”?

哈马斯为什么不善待手中的“筹码”?

古次伍牛爱音乐
2024-05-14 05:33:19
一股民吴女士空仓3个月,刚买入3天,竟亏去46个点,卖也卖不出去

一股民吴女士空仓3个月,刚买入3天,竟亏去46个点,卖也卖不出去

股海风云大作手
2024-05-15 22:09:38
2024-05-16 00:58:44
自学编程之道
自学编程之道
分享自学编程的心得,分享实用开源项目
48文章数 240关注度
往期回顾 全部

科技要闻

蔚来新品牌乐道L60预售价21.99万元起

头条要闻

合肥:购新房给予总房价1%补贴

头条要闻

合肥:购新房给予总房价1%补贴

体育要闻

乔丹-贝尔:CBA外援的另一种用法?

娱乐要闻

欧阳娜娜营销才女人设却没拿到学位?

财经要闻

楼市小作文来了,大招马上出?

汽车要闻

无感胜有感 驾驶沃尔沃EX30竟与众不同?

态度原创

健康
本地
游戏
教育
公开课

在中国,到底哪些人在吃“伟哥”?

本地新闻

云游中国|哪吒小镇,潮玩新地标!

聊天记录曝光,魔兽世界国服明年上线!假消息还能更离谱点吗?

教育要闻

TTS新传论文带读:叶赫那拉·英的梗图真的很有意思!

公开课

父亲年龄越大孩子越不聪明?

无障碍浏览 进入关怀版