常用注解介绍

 

这几年来注解开发越来越流行,MyBatis也可以使用注解开发方式,这样我们就可以减少编写Mapper映射文件了

@Insert: 实现新增 @Update: 实现更新 @Delete: 实现删除 @Select: 实现查询 @Result: 实现结果集封装 @Results: 可以与@Result一起使用,封装多个结果集 @One: 实现一对一结果集封装 @Many: 实现一对多结果集封装

 

实现MyBatis的增删改查 -- 基于xml

 

第一步: 在src/main/java目录,右键java目录,新建com.huanf.domain.User类,写入如下

 

第二步: 在src/main/java目录,右键java目录,新建com.huanf.mapper.UserMapper接口

 

第三步: 在src/main/resources目录,右键resources目录,新建File,文件名为jdbc.properties,写入如下

 

第四步: 在src/main/resources目录,右键resources目录,新建File,文件名为log4j.properties,写入如下

 

第五步: 在src/main/resources目录,右键resources目录,新建File,文件名为sqlMapConfig.xml,写入如下

第六步: 在src/main/resources目录,右键resources目录,新建Package,包名为com/huanf/mapper,右键com/huanf/mapper,新建File,文件名为UserMapper.xml,写入如下

 

第七步: 在pom.xml写入如下

 

第八步: 在src.test.java目录下,新建com.huanf.test.MyBatisTest类,写入如下,并分别执行5个test方法

 

实现MyBatis的增删改查 -- 基于注解 -- 简单查询

 

上面我们已经用注解完成了一次完整的配置,可以实现增删改查。现在开始我们将用注解,来替换掉UserMapper.xml里面配置的代码

@Insert: 实现新增 @Update: 实现更新 @Delete: 实现删除 @Select: 实现查询 @Result: 实现结果集封装 @Results: 可以与@Result一起使用,封装多个结果集 @One: 实现一对一结果集封装 @Many: 实现一对多结果集封装

 

具体操作如下:

 

第一步: 删掉src/main/java目录下的com/huanf/mapper目录、UserMapper.xml文件。如果不删,选择注释的话,就只留下如下即可

 

第二步: 删掉sqlMapConfig.xml文件里面的'加载映射文件'的三行代码。不删的话,注释也可

 

第三步: 最重要的一步,就是在UserMapper接口,修改为如下。可以发现我们把原先在UserMapper.xml写的sql语句搬到这里来了,注意这里就是注解的形式

 

第四步: 在sqlMapConfig.xml里面添加如下

 

第五步: 在MyBatisTest类进行测试,分别执行5个test方法执行

 

MyBatis注解开发 -- 复杂查询 -- 介绍

 

上面我们演示了基于MyBatis注解的简单查询,这里就演示复制查询

之前xml的时候,实现复杂关系映射,一般是在映射文件中通过配置来实现。 现在使用注解开发,我们就可以使用@Results注解、@Result注解、@One注解、@Many注解组合,来完成复制关系的配置。如下表

注解说明
@Results代替的是标签。该注解可以使用单个@Result注解,也可以使用@Result集合。使用格式: @Results({@Result(), @Result()}) 或 @Results(@Result())
@Result代替的是标签和标签。该注解会使用到4个属性,属性介绍如下column: 数据库的列名。one: 需要使用的@One注解 (@Result(one=@One) () ))。property: 需要装配的属性名。many: 需要使用的@Many注解 (@Result(many=@many ()))
@One该注解用于一对一查询。代替的是标签,是多表查询的关键,在注解中用来指定子查询返回单一对象。该注解会使用到1个属性,属性介绍如下。select: 指定用来多表查询的sqlmapper。使用格式: @Result(column="",property="",one=@One(select=""))
@Many该注解用于多对一查询。代替的是标签,是多表查询的关键,在注解中用来指定子查询返回对象集合。使用格式: @Result(property="",column="",many=@Many(select=""))

 

接下来是对上面4个注解进行具体的演示

 

MyBatis注解开发 -- 复杂查询 -- 一对一查询实现 -- 两张表一起查

 

需求: 查询订单的同时,查询出跟订单关联的用户

 

具体操作如下:

 

第一步: 在src/main/java/com.huanf/domain目录下新建Order类,写入如下

 

第二步: 在src/main/java/com.huanf/mapper目录下新建OrderMapper接口,写入如下

 

第三步: 在src/test/java/com.huanf.test目录下新建MyBatisTest2类,写入如下,并执行测试

 

 

MyBatis注解开发 -- 复杂查询 -- 一对一查询实现 -- 两张表分开查

 

具体操作:

 

第一步: 在OrderMapper接口,添加如下

 

第二步: 在MyBatisTest2类,添加如下,并执行测试

 

 

MyBatis注解开发 -- 复杂查询 -- 一对多查询实现

 

需求: 查询一个用户,并查询出该用户具有的订单

 

具体操作:

 

第一步: 在User类添加如下,并自行添加相应的get和set方法、toString方法

 

第二步: 在OrderMapper接口添加如下

 

第三步: 在UserMapper接口添加如下

 

第四步: 在src/test/java/com.huanf.test目录下新建MyBatisTest3类,写入如下,并执行测试

 

 

MyBatis注解开发 -- 复杂查询 -- 多对多查询实现

 

需求: 查询用户,同时查询出该用户的所有角色

 

具体操作:

 

第一步: 在src/main/java/com.huanf.domain目录下新建Role类,写入如下

 

第二步: 在User类添加如下,并自行添加相应的get和set方法、toString方法

 

第三步: 在UserMapper接口添加如下

 

第四步: 在src/main/java/com.huanf.mapper目录下新建RoleMapper接口,写入如下

 

第五步: 在src/test/java/com.huanf.test目录下新建MyBatisTest4类,写入如下,并执行测试