您现在的位置是:首页 > 后台技术 > MyBatisMyBatis

MyBatis注解方式的基本用法(第三章)(图文)

第十三双眼睛2020-04-18【MyBatis】人已围观

简介注解就是将sql语句直接写在接口上,这种方式的优点是,对于需求比较简单的系统,效率较高,缺点是,当sql有变化时,都需要重新编译,一般情况下不建议使用注解的方式。

在mybatis中,最基本的就是@Select,@Insert,@Update,@Delete.
@Select注解
在接口中如下:
@Select({"select * from sys_user where id = #{id}"})
    User getUser3(Integer id);

使用注解就是在接口方法基础上添加需要的注解,并写上相应的sql语句,@Select,@Insert,@Update,@Delete这四个基本注解的参数可以是字符串数组,也可以是字符串类型。
使用注解同样需要考虑表字段和java属性的映射关系,第一种是使用别名的方式来实现,第二种是使用下划线转驼峰的配置方式来实现,第三种是使用定义resultMap的方式来实现。
使用下划线转驼峰命名的方式来实现。
这种方式只需要在配置文件中开启即可,不需要手动指定别名,mybatis会自动按照下划线转别名的方式自动映射。

使用resultMap方式
xml中的resultMap元素有一个对应的java注解@Results,使用这个注解来实现属性映射,新增一个getUser4方法
@Results({
        @Result(property="id", column="id", id=true),
        @Result(property="userName",column="user_name"),
    })
    @Select({"select * from sys_user where id = #{id}"})
    User getUser4(Integer id);
这里的@Result注解对应着xml文件中的result标签。id=true就对应<id>元素。
使用Results注解的时候,在3.3.0以及之前的版本中,都需要写一遍,但是到了3.3.1以后,@Results注解增加一个id属性,设置了id属性以后,就可以通过id属性引用一个@Results配置了。示例代码如下:
@Results(id="userResultMap",value={
        @Result(property="id", column="id", id=true),
        @Result(property="userName",column="user_name"),
    })
    @Select({"select * from sys_user where id = #{id}"})
    User getUser4(Integer id);
如何引用这个@Results呢,示例如下:
@ResultMap("userResultMap")
    @Select({"select * from sys_user "})
    List<User> getAll();
使用@ResultMap注解即可,注解的参数就是上面代码中设置的id的值,当配合着使用xml时,也可以是xml文件中<resultMap>元素的id.

@Insert注解
@Insert注解本身是很简单的,但是如果需要返回主键的值,会变得稍微麻烦一点
不需要返回主键的时候,比较简单,代码如下:
@Insert("insert into sys_user(id,user_name,password) values(#{id},#{userName},#{password})")
    int insertUser(User user);
需要返回自增主键的时候,示例如下:
@Insert("insert into sys_user(user_name,password) values(#{userName},#{password})")
    @Options(useGeneratedKeys=true,keyProperty="id")
    int insertUser2(User user);
和上面的相比,多个options注解,在这个注解中设置了useGeneratedKeys和keyProperty属性,用法和xml相同。当需要配置多个列的时候,这个注解提供了keyColumn属性,可以像xml中一样使用。
返回非自增主键时代码如下:
@Insert("insert into sys_user(user_name,password) values(#{userName},#{password})")
    @SelectKey(statement="select last_insert_id()",keyProperty="id",resultType=Long.class,before=false)
    int insertUser3(User user);
道理和xml一样,before为false时功能等同于order=after,before=true时功能等同于order=false.不同的数据库,order的配置不同。

@Update注解和@Delete注解
在接口中新增updateById方法和deleteById方法,如下:
@Update("update sys_user set user_name='张三' where id =#{id}")
    int updateById(Integer id);
 
@Delete("delete from sys_user where id =#{id}")
    int deleteById(Integer id);

Provider注解
除了上面4种注解可以使用简单的sql外,mybatis还提供了4种provider注解,分别是@SelectProvider,@InsertProvider@UpdateProvider@DeleteProvider
同样可以实现增删改查。
下面通过@SelectProvider注解来介绍使用方法
创建UserProvider类,添加selectById方法,代码如下:
package com.xjava.mybatis.provider;
import org.apache.ibatis.jdbc.SQL;
import com.xjava.mybatis.entity.User;
public class UserProvider {
    
    public String selectById(final Integer id){
        return new SQL(){
            {
                SELECT("id,user_name,password");
                FROM("sys_user");
                WHERE("id = #{id}");
            }
        }.toString();
            
    }
}
接口中的代码如下:
@SelectProvider(type=UserProvider.class,method="selectById")
User selectById(Integer id);
最常用的注解基本介绍完毕,由于MyBatis的注解方式不是主流,所以一般不用。如果项目中用到,自己查询即可。



 

Tags:

很赞哦! ()

文章评论

    共有条评论来说两句吧...

    用户名:

    验证码:

本站推荐

站点信息

  • 网站名称:JavaStudy
  • 建站时间:2019-1-14
  • 网站程序:帝国CMS7.5
  • 文章统计108篇文章
  • 标签管理标签云
  • 统计数据百度统计
  • 微信公众号:扫描二维码,关注我们