详说—极速分布式ORM框架---Mango注解

Mango注解大全

(1)@DB(table=”表名”) 或@DB   全名为 

@org.jfaster.mango.annotation.DB ,dao接口必须使用它来修饰,这样这个dao接口才能被mango框架接受。

(2)@SQL(“增删改查SQL语句”) 注解的全名为 @org.jfaster.mango.annotation.SQL ,它被用来修饰下面对应的方法。

(3)@ReturnGeneratedId 用于修饰方法的返回值,注解 的全名为@org.jfaster.mango.annotation.ReturnGeneratedId ,被修饰的方法具有以下两种返回值类型:

int或java.lang.Integer:返回int类型的自增id

long或java.lang.Long:返回long类型的自增id

(4)@Rename 对参数进行重命名

(5)@Results/@Result 注解 @org.jfaster.mango.annotation.Results 和注解 @org.jfaster.mango.annotation.Result 来完成自定义映射规则匹配。

(6)@Mapper 定义映射类

(7)@ID    指定表的自增主键

(8)@ID(autoGenerateId = false)  指定表的非自增主键

(9)@column(“uid”)定义映射字段,将类A的userId属性映射到表的uid字段中

     private Integer userId 

(10)@Ignore  表中没有这个字段,可以使用该注解忽略这个属性

(11)@DB(name=””)  用于指定所使用的数据源工厂的名字

(12)@Sharding(tableShardingStrategy= xxx.class) 用于将表分片策略与DAO接口进行绑定

(13)@TableShardingBy(“”)  用于指定给表分片策略传入的参数。

(14)@Sharding(databaseShardingStrategy = xxx.class)  用于将数据库分片策略与DAO接口进行绑定

(15)@DatabaseShardingBy(“”)  用于指定给数据库分片策略传入参数。

(16)@ShardingBy  使用@ShardingBy注解等于同时使用@DarabaseShardingBy注解与@TableShardingBy注解

(17)@Getter(IntegerListToStringFunction.class)  用于将整型列表转化为字符串

    @Getter(IntegerListToStringFunction.class)

    public List<Integer> getStudentIds() {

        return studentIds;

    }

@Getter注解的全名为@org.jfaster.mango.annotation.Getter,它使用在get方法上。

IntegerListToStringFunction类的全名为org.jfaster.mango.invoker.function.IntegerListToStringFunction,它用于将整型列表转化为字符串。

(18)@Setter(StringToIntegerListFunction.class)   用于将字符串转化为整型列表

   @Setter(StringToIntegerListFunction.class)

    public void setStudentIds(List<Integer> studentIds) {

        this.studentIds = studentIds;

    }

@Setter注解的全名为@org.jfaster.mango.annotation.Setter,它使用在set方法上。

StringToIntegerListFunction类的全名为org.jfaster.mango.invoker.function.StringToIntegerListFunction,它用于将字符串转化为整型列表。

(19)@Getter(EnumToIntegerFunction.class)  调用枚举对象的ordinal方法,将枚举对象转化为数字

    @Getter(EnumToIntegerFunction.class)

    public Gender getGender() {

        return gender;

    }

EnumToIntegerFunction类的全名为org.jfaster.mango.invoker.function.enums.EnumToIntegerFunction。

(20)@Setter(IntegerToEnumFunction.class) 用于将数字转化为枚举对象

    @Setter(IntegerToEnumFunction.class)

    public void setGender(Gender gender) {

        this.gender = gender;

    }

IntegerToEnumFunction类的全名为org.jfaster.mango.invoker.function.enums.IntegerToEnumFunction。

(21)Getter(ObjectToGsonFunction.class) ObjectToGsonFunction类的全名为org.jfaster.mango.invoker.function.json.ObjectToGsonFunction,它使用gson包,能将任意对象转化为json字符串。

    @Getter(ObjectToGsonFunction.class)

    public SubCard getSubCard() {

        return subCard;

    }

(22)Setter(GsonToObjectFunction.class) GsonToObjectFunction类的全名为org.jfaster.mango.invoker.function.json.GsonToObjectFunction,它使用gson包,能将json字符串转化为任意对象。

    @Setter(GsonToObjectFunction.class)

    public void setSubCard(SubCard subCard) {

        this.subCard = subCard;

    }

(23)@Cache(prefix=”user”, expire=Hour.class, num = 2)  表示需要使用缓存,参数prefix表示key前缀,比如说传入uid=1,那么缓存中的key就等于user_1,参数expire表示缓存过期时间,Hour.class表示小时,配合后面的参数num=2表示缓存过期的时间为2小时。

(24)@CacheBy用于修饰key后缀参数,在delete,update,getUser方法中@CacheBy都是修饰的uid,所以当传入uid=1时,缓存中的key就等于user_1。

(25)@CacheIgnored表示该方法不需要缓存。需要注意的是,如果使用了@Cache注解,@CacheBy和@CacheIgnored二者必须有一个存在。

实例(1):

@DB
@Cache(prefix = "user", expire = Hour.class, num = 2)
public interface SingleKeySingeValueDao {
 
    @CacheIgnored
    @SQL("insert into user(uid, name) values(:1, :2)")
    public int insert(int uid, String name);
 
    @SQL("delete from user where uid=:1")
    public int delete(@CacheBy int uid);
 
    @SQL("update user set name=:2 where uid=:1")
    public int update(@CacheBy int uid, String name);
 
    @SQL("select uid, name from user where uid=:1")
    public User getUser(@CacheBy int uid);
}

实例(2):

@DB(table = "t_order")
@Sharding(databaseShardingStrategy = OrderDatabaseShardingStrategy.class)  // @Sharding 注解中的databaseShardingStrategy参数,将数据库分片策略与DAO接口进行绑定
public interface DatabaseShardingOrderDao {

    @SQL("insert into #table(id,uid,price,status) values(:id,:uid,:price,:status)")
    public void addOrder(@DatabaseShardingBy("uid") Order order);  //引入了 @DatabaseShardingBy 注解用于指定给数据库分片策略传入的参数

    @SQL("select id,uid,price,status from #table where uid =:1")
    public List<Order> getOrdersByUid(@DatabaseShardingBy int uid);
}

实例(3):

@DB(table = "t_order")
//绑定分表分库策略
@Sharding(
        databaseShardingStrategy = OrderDatabaseShardingStrategy.class,
        tableShardingStrategy = OrderTableShardingStrategy.class
)
public interface ShardingOrderDao {

    /**
     * @DatabaseShardingBy  用于指定给数据库分片策略传入的参数
     * @TableShardingBy  用于指定给表分片策略传入的参数
     */
    @SQL("insert into #table(id, uid, price, status) values(:id,:uid,:price,:status)")
    public void addOrder(@DatabaseShardingBy("uid") @TableShardingBy("uid")Order order);

    @SQL("select id, uid, price, status from #table where uid = :1")
    public List<Order> getOrderByUid(@DatabaseShardingBy @TableShardingBy int uid);
}

后续会继续更新关于Mango的相关知识,请诸君多多支持!喜欢就点个赞,不喜勿喷!

点赞