博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MyBatis知识点复习-13Mybatis注解开发
阅读量:3959 次
发布时间:2019-05-24

本文共 3363 字,大约阅读时间需要 11 分钟。

MyBatis知识点复习-13Mybatis注解开发

在开始讲解之前,如果你对注解不太熟悉,可以先看看这篇对注解的讲解。由于注解其实与xml本质上是一样的,因此我们注解不会像前面那样还很多篇幅来讲解。

在开始本章的讲解前,我们需要说明一下,现在我们的那些映射配置文件就不再有用了,而是依靠全局配置文件。其内容为:

除了配置数据库连接外,要想使用注解,上面的

是必要的,第一个指明返回值类所在位置,第二个指明接口所在包。还有一点就是使用注解开发时在接口同一目录下是不允许有他的xml配置文件的。

文章目录

一.单表操作

1.CRUD操作

在mybatis中CRUD一共有四个注解

@Select

@Insert
@Update
@Delete

我们用UserMapper这个接口来演示,首先把它里面的方法全部删掉,我们重新来。

下面只演示前两个演示:
1.@Select
在UserMapper下面添加如下方法:

@Select("select * from  user")    public List
findById(int user_id);

执行下面代码:

SqlSession sqlSession1 = build.openSession();        UserMapper mapper = sqlSession1.getMapper(UserMapper.class);        List
byId = mapper.findById(1); for (User user : byId) {
System.out.println(user); } sqlSession1.commit();//提交事务,否则会事务回滚

在这里插入图片描述

我们发现由于字段名是name,而属性名是username,他们并不对应导致查询到的结果username为null。后面我会讲注解来解决。
那么他是如何实现的呢?我们先来看看如果不用注解,用xml文件配置应该是这样的:

从上面我们可以看得到我们需要的信息为:namespace,id,resultType,parameterType

那么我们看这些信息在UserMapper里面都是有的。
在这里插入图片描述
2.>@Insert
在UserMapper下面添加如下方法:

@Insert("insert into user (name,birthday,sex,address) value(#{username},#{birthday},#{sex},#{address})")    public int saveUser(User user);

执行下面代码:

SqlSession sqlSession1 = build.openSession();        UserMapper mapper = sqlSession1.getMapper(UserMapper.class);        User user = new User();        user.setUsername("jack");        user.setSex("1");        user.setAddress("湖北");        user.setBirthday(new Date());        int byId = mapper.saveUser(user);        sqlSession1.commit();//提交事务,否则会事务回滚

在这里插入图片描述

2.属性别名

前面我们说了username查询结果为空,现在我们来解决。

我们能做如下修改:

@Select("select * from  user")    @Results(value={
@Result(id=true,column="id",property = "id"), @Result(column="name",property = "username"), @Result(column="sex",property = "sex"), @Result(column="birthday",property = "birthday"), @Result(column="address",property = "address") }) public List
findById(int user_id);

再次查询:

在这里插入图片描述
成功查到了username。
那么问题来了,这个@Results注解只是作用于findById一个方法,难道以后其他的方法也要再把上面的内容再写一遍?这显然是不合理的,于是我们可以给这个
Results起一个别名,操作如下:
在这里插入图片描述
关于上个图中报红错是因为我的mybatis版本是低于3.5.0的,他不支持这功能,但在高版本的情况下是可以使用的,这里我就不去做这些麻烦事了。

二.多表操作

1.一对一

在前面查询user的时候我们没有把orders也查到。现在我们来为大家操作一下。

在这里插入图片描述
执行之前的查询代码有:
在这里插入图片描述

2.多对多

为方便演示,对orders表数据修改如下:

在这里插入图片描述
在这里插入图片描述
红框处是对一对一的修改。
我们发现张小明的结果确实查到了两个

User{id=16, username='张小明', sex='1', birthday=null, address='河南郑州', orders=[Orders [id=3, userId=null, number=1000010, createtime=Wed Feb 04 13:22:35 CST 2015, note=null, user=null, orderdetails=null], Orders [id=4, userId=null, number=1000011, createtime=Tue  Feb 03 13:22:41 CST 2015, note=null, user=null, orderdetails=null]]}

其实如果用一对多的方式查询也可以查到,不过效率会差一些。

三.缓存配置

由于一级缓存是默认开启的,我们就直接讲二级缓存。如果缓存忘记了可以再复习一下:。

第一步当然是先在全局配置文件里开启二级缓存,步骤忘记的可以在复习一下上面这篇文章,这里我跳过。
在接口上面加上注解即可
在这里插入图片描述
关于上个图中报红错是因为我的mybatis版本是低于3.5.0的,他不支持这功能,但在高版本的情况下是可以使用的,这里我就不去做这些麻烦事了。
剩下的演示还是参考上面的文章复习即可。

四.方法有多个参数

这种情况下我们需要使用@Param参数来指定参数名字

在这里插入图片描述
总结:终于把mybatis讲完了,不过我要说明的是,这些都只是一些浅层的CRUD,简单说,你会,别人也会,因此后面我会在抽空出一个mybatis的源码解读的的系列文章,来一个质的提升。敬请期待吧!

转载地址:http://utlzi.baihongyu.com/

你可能感兴趣的文章
STL里的multimap使用详解
查看>>
STL 库其中的 std::string用法总结
查看>>
模态对话框的销毁过程与非模态对话的几种销毁方法
查看>>
C++实现http下载 && 24点计算编码风格
查看>>
memcached了解使用和常用命令详解
查看>>
GDB调试各功能总结
查看>>
"undefined reference to" 多种可能出现的问题解决方法
查看>>
类结构定义
查看>>
Windows下关于多线程类 CSemaphore,CMutex,CCriticalSection,CEvent,信号量CSemaphore的使用介绍
查看>>
图像处理基本算法(汇总)以及实现
查看>>
C++编程获取本机网卡信息 本机IP 包括Windows和Linux
查看>>
C++连接CTP接口实现简单量化交易
查看>>
服务端使用c++实现websocket协议解析及通信
查看>>
C# string.Format使用说明
查看>>
Linux下安装Mysql数据库开发环境
查看>>
Linux用户及用户组添加和删除操作
查看>>
通用 Makefile 的编写方法以及多目录 makefile 写法
查看>>
C++的4种智能指针剖析使用
查看>>
RPC框架实现之容灾策略
查看>>
Docker私库
查看>>