精华内容
下载资源
问答
  • @Accessor public interface UserAccessor { @Query ( "SELECT * FROM complex.users WHERE id = ?" ) User getOnePosition(UUID userId); @Query ( "SELECT * FROM complex.users" ) Result...

    如果说,入门二的用法是hibernate,那么这篇入门三的用法就更像ibatis。

    完整的代码请参考:https://github.com/yankai913/cassandra-java-userguide。

    由于本文复用了入门二的部分代码,所以这里只贴新增的。

    新增表:

    1

    2

    3

    4

    5

    CREATE TABLE complex.users (

    id uuid PRIMARY KEY,

    name text,

    addresses map<text,frozen<address>>

    );

    UserAccessor类:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    import java.util.Map;

    import java.util.UUID;

    import com.datastax.driver.core.ResultSet;

    import com.datastax.driver.mapping.Result;

    import com.datastax.driver.mapping.annotations.Accessor;

    import com.datastax.driver.mapping.annotations.Param;

    import com.datastax.driver.mapping.annotations.Query;

    import com.google.common.util.concurrent.ListenableFuture;

    import com.zoo.Address;

    @Accessor

    public interface UserAccessor {

    @Query("SELECT * FROM complex.users WHERE id = ?")

    User getOnePosition(UUID userId);

    @Query("SELECT * FROM complex.users")

    Result<User> getAll();

    @Query("SELECT * FROM complex.users")

    ListenableFuture<Result<User>> getAllAsync();

    @Query("insert into complex.users(id, name, addresses) values (:id, :name, :addresses)")

    ResultSet insertUser(@Param("id") UUID id, @Param("name") String name,

    @Param("addresses") Map<String, Address> addresses);

    @Query("UPDATE complex.users SET name= :name WHERE id= :id")

    ResultSet updateName(@Param("id") UUID id, @Param("name") String name);

    @Query("UPDATE complex.users SET addresses[:name]=:address WHERE id= :id")

    ResultSet updateAddress(@Param("id") UUID id, @Param("name") String addressName,

    @Param("address") Address address);

    @Query("DELETE FROM complex.users WHERE id = ?")

    ResultSet deleteOne(UUID userId);

    }

    User类:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    import java.util.Map;

    import java.util.UUID;

    import com.datastax.driver.mapping.annotations.Column;

    import com.datastax.driver.mapping.annotations.Frozen;

    import com.datastax.driver.mapping.annotations.Table;

    import com.zoo.Address;

    import com.zoo.BaseEntity;

    @Table(keyspace = "complex", name = "users")

    public class User extends BaseEntity {

    private UUID id;

    private String name;

    @Column(name = "addresses")

    @Frozen("map<text,frozen<address>>")

    private Map<String, Address> address;

    public UUID getId() {

    return id;

    }

    public void setId(UUID id) {

    this.id = id;

    }

    public String getName() {

    return name;

    }

    public void setName(String name) {

    this.name = name;

    }

    public Map<String, Address> getAddress() {

    return address;

    }

    public void setAddress(Map<String, Address> address) {

    this.address = address;

    }

    }

    BaseEntity类,就是做了toString()重写:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    import com.alibaba.fastjson.JSON;

    public class BaseEntity {

    @Override

    public String toString() {

    return JSON.toJSONString(this);

    }

    }

    测试类AccessorClient:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    62

    63

    64

    65

    66

    67

    68

    69

    70

    71

    72

    73

    74

    75

    76

    77

    78

    79

    80

    81

    82

    83

    84

    85

    86

    87

    88

    89

    90

    91

    92

    93

    94

    95

    96

    97

    98

    99

    100

    101

    102

    103

    104

    105

    106

    107

    108

    109

    110

    111

    112

    113

    114

    115

    116

    117

    118

    119

    120

    121

    122

    123

    124

    125

    126

    127

    128

    129

    130

    131

    132

    133

    134

    135

    136

    137

    138

    139

    140

    141

    142

    143

    144

    145

    146

    147

    148

    149

    150

    151

    152

    153

    154

    155

    156

    157

    import java.util.ArrayList;

    import java.util.HashMap;

    import java.util.List;

    import java.util.Map;

    import java.util.UUID;

    import com.datastax.driver.core.Cluster;

    import com.datastax.driver.core.Host;

    import com.datastax.driver.core.Metadata;

    import com.datastax.driver.core.Session;

    import com.datastax.driver.mapping.MappingManager;

    import com.datastax.driver.mapping.Result;

    import com.google.common.util.concurrent.ListenableFuture;

    import com.zoo.Address;

    import com.zoo.Phone;

    /**

    *

    * @author yankai913@gmail.com

    * @date 2015-11-4

    *

    */

    public class AccessorClient {

    private Cluster cluster;

    private Session session;

    // 放一个公共userId

    private UUID userId = UUID.fromString("fbdf82ed-0063-4796-9c7c-a3d4f47b4b25");

    public Session getSession() {

    return this.session;

    }

    /**

    * 连接集群,创建执行cql的session对象。

    *

    * @param node

    */

    public void connect(String node) {

    cluster = Cluster.builder().addContactPoint(node).build();

    Metadata metadata = cluster.getMetadata();

    System.out.printf("Connected to cluster: %s\n", metadata.getClusterName());

    for (Host host : metadata.getAllHosts()) {

    System.out.printf("Datacenter: %s; Host: %s; Rack: %s\n", host.getDatacenter(),

    host.getAddress(), host.getRack());

    }

    session = cluster.connect();

    System.out.println();

    }

    public void insert() {

    MappingManager manager = new MappingManager(getSession());

    UserAccessor userAccessor = manager.createAccessor(UserAccessor.class);

    Map<String, Address> addresses = new HashMap<String, Address>();

    Address address = new Address();

    address.setCity("Honolulu");

    address.setStreet("123 Arnold Drive");

    address.setZipCode(95476);

    List<Phone> phones = new ArrayList<Phone>();

    Phone phone1 = new Phone("job1", "10086");

    Phone phone2 = new Phone("job2", "10000");

    phones.add(phone1);

    phones.add(phone2);

    address.setPhones(phones);

    addresses.put("Work", address);

    userAccessor.insertUser(userId, "tom", addresses);

    }

    public void select() {

    // getAll

    MappingManager manager = new MappingManager(getSession());

    UserAccessor userAccessor = manager.createAccessor(UserAccessor.class);

    Result<User> users = userAccessor.getAll();

    for (User user : users) {

    System.out.println("getAll:" + user);

    }

    // getOne

    User user = userAccessor.getOnePosition(userId);

    System.out.println("getOne:" + user);

    // getAllAsync

    ListenableFuture<Result<User>> future = userAccessor.getAllAsync();

    try {

    for (User _user : future.get()) {

    System.out.println("getAsync:" + _user);

    }

    }

    catch (Exception e) {

    e.printStackTrace();

    }

    }

    public void update() {

    MappingManager manager = new MappingManager(getSession());

    UserAccessor userAccessor = manager.createAccessor(UserAccessor.class);

    userAccessor.updateName(userId, "jack");

    }

    public void update2() {

    MappingManager manager = new MappingManager(getSession());

    UserAccessor userAccessor = manager.createAccessor(UserAccessor.class);

    Address address = new Address();

    List<Phone> phones = new ArrayList<Phone>();

    Phone phone2 = new Phone("job2", "10010");

    phones.add(phone2);

    address.setPhones(phones);

    userAccessor.updateAddress(userId, "Work", address);

    }

    public void delete() {

    MappingManager manager = new MappingManager(getSession());

    UserAccessor userAccessor = manager.createAccessor(UserAccessor.class);

    userAccessor.deleteOne(userId);

    }

    public void dropSchema() {

    session.execute("DROP KEYSPACE complex;");

    }

    public void close() {

    session.close();

    cluster.close();

    }

    public static void main(String[] args) {

    AccessorClient client = new AccessorClient();

    try {

    client.connect("127.0.0.1");

    client.select();

    client.insert();

    client.select();

    client.update();

    client.select();

    client.update2();

    client.select();

    client.delete();

    client.select();

    client.dropSchema();

    }

    catch (Exception e) {

    e.printStackTrace();

    }

    finally {

    client.close();

    }

    }

    }

    打印结果部分显示做对比:
    Connected to cluster: Test Cluster
    Datacenter: datacenter1; Host: /127.0.0.1; Rack: rack1

    getOne:null

    getOne:{“address”:{“Work”:{“city”:”Honolulu”,”phones”:[{"alias":"job1","number":"10086"},{"alias":"job2","number":"10000"}],”street”:”123 Arnold Drive”,”zipCode”:95476}},”id”:”fbdf82ed-0063-4796-9c7c-a3d4f47b4b25″,”name”:”tom”}

    getOne:{“address”:{“Work”:{“city”:”Honolulu”,”phones”:[{"alias":"job1","number":"10086"},{"alias":"job2","number":"10000"}],”street”:”123 Arnold Drive”,”zipCode”:95476}},”id”:”fbdf82ed-0063-4796-9c7c-a3d4f47b4b25″,”name”:”jack”}

    getOne:{“address”:{“Work”:{“phones”:[{"alias":"job2","number":"10010"}],”zipCode”:0}},”id”:”fbdf82ed-0063-4796-9c7c-a3d4f47b4b25″,”name”:”jack”}

    getOne:null


    展开全文
  • 在使用easyexcel(github.com/alibaba/eas…) 导出的时候,发现以前的实体类导出都很正常,但是现在新加的实体类不正常了,比对了发现,新加的实体类增加了@Accessor(chain = true)注解,我们的目的主要是方便我们...

    问题发现:

    在使用easyexcel(github.com/alibaba/eas…) 导出的时候,发现以前的实体类导出都很正常,但是现在新加的实体类不正常了,比对了发现,新加的实体类增加了@Accessor(chain = true)注解,我们的目的主要是方便我们链式调用set方法:

    new UserDto()
    .setUserName("")
    .setAge(10)
    ........
    .setBirthday(new Date());

    导致结果:
    1、无法读取到excel表格中的数据到dto属性中

    原因:
    easyexcel底层使用的是cglib来做反射工具包的:

    com.alibaba.excel.read.listener.ModelBuildEventListener 类的第130行
    BeanMap.create(resultModel).putAll(map);

    最底层的是cglib的BeanMap的这个方法调用

    abstract public Object put(Object bean, Object key, Object value);

    解决方案:

    1、去掉Accessor注解

    2、等待EasyExcel的作者替换掉底层的cg

    展开全文
  •  Ruby 语言与Python和Perl的一个很大区别,在于Ruby中,所有的实例变量都是在类中完全私有的,只能通过accessor 方法来进行变量访问,引用一段代码来说明具体的使用方法: class Rectangle attr_accessor :...

    (Ruby/Python/Perl)

      Ruby 语言与Python和Perl的一个很大区别,在于Ruby中,所有的实例变量都是在类中完全私有的,只能通过accessor 方法来进行变量访问,引用一段代码来说明具体的使用方法:

    class Rectangle
        attr_accessor :width
        attr_accessor :height
        attr_accessor :width2
        attr_accessor :height2
    
        def initialize(wdth, hgt)
            @width = wdth
            @height = hgt
        end
    
        def area()
            return @width * @height
        end
    
        def area2()
            return @width2 * @height2
        end
    
    end
    
    r = Rectangle.new(2,3)
    r.width = 5    # give samename's variable value 给同名变量的变量赋值
    r.height = 5
    puts r.area()  # outputs is 25
    
    r.width2 = 6   # not samename's variable create 无同名变量的变量创建
    r.height2 = 6
    puts r.area2() # outputs is 36

    attr_reader: 实例变量只读  attr_writer: 实例变量可写  attr_accessor: 变量可读可写

       近来学习ruby的过程中,看到了拟态方法的概念,感觉很有意思。我们都知道拟态方法在ruby中无处不在,可以让代码更清爽更容易理解,比如

      obj.my_attribute=""就不必写成obj.my_attribute=(""),而更进一步的,像attr_accessor这样的类宏的实现方式也引起了我的兴趣。

    看了网上的实现方式,自己动手试了一下。

     

    class Module
        def var( method_name )
            inst_variable_name = "@#{method_name}".to_sym    # .to_sym
            p inst_variable_name        #:=>:@bar
    
            define_method method_name do
                instance_variable_get inst_variable_name
            end
    
            define_method "#{method_name}=" do |new_value|
                instance_variable_set inst_variable_name, new_value
            end
    
        end
    end
    
    class Foo
        var :bar
    end
    
    f = Foo.new            # p f.bar
    p f.class              #:=>Foo
    p f.class.instance_methods(false)      #:=>["bar", "bar="]
    f.bar = "good"                         #:=>"good" method bar=
    p f.bar                                #:=>"good" method bar

    上面的var方法就类似于attr_accessor,对其中的instance_variable_get用代码进行一下说明:

    class Fred
    #attr_accessor :a #不要去掉注释,先直接运行
    #attr_accessor :b
    
        def initialize(p1, p2)
            @a, @b = p1, p2
        end
    end
    fred = Fred.new('cat', 99)
    puts fred.instance_variable_get(:@a)  #=> "cat"
    puts fred.instance_variable_get("@b") #=> 99
    #puts fred.a,fred.b,fred.a.class,fred.b.class 
    =begin 上一句结果
    cat
    99
    String
    Fixnum
    =end

     我们都知道在ruby中:a等价于"a"但用前面的方法会更清爽,并且少写一个符号。

    转载于:https://www.cnblogs.com/Chary/p/No000011.html

    展开全文
  • 平时喜欢使用这个注解, 因为链式的set 主要是因为方便美观. 今天在开发中因为父类新增了一个@Accessor(chain=true) 但是子类没有使用, 导致原本可以编译通过的老代码 现在编译错误, 提示“子类 不能覆盖 父类的 *** ...

    平时喜欢使用这个注解, 因为链式的set 主要是因为方便美观.
    今天在开发中因为父类新增了一个@Accessor(chain=true) 但是子类没有使用, 导致原本可以编译通过的老代码 现在编译错误, 提示“子类 不能覆盖 父类的 *** 字段”.
    查了一下 原因是: 编译之后的set方法 默认为 返回set了字段值之后的对象, 而不是通常@setter对应的 void方法.
    建议还是少用@Accessor(chain=true), 多用builder.

    见图:
    在这里插入图片描述

    感兴趣的可以看下这个博文: https://www.debugger.wiki/article/html/1573112792320496

    展开全文
  • 使用注解@Validated和@Valid做入参校验,结果报错: "JSR-303 validated property 'xxx.id' does not have a corresponding accessor for Spring data binding - check your DataBinder's configuration (bean ...
  • MyBatisGenerator修改源码实现model类增加Lombok注解及实现数据库注释 1. 增加自定义Lombok插件类 /** * Copyright 2006-2020 the original author or authors. * * Licensed under the Apache License, Version...
  • 下面的方法是修改hibernate3.6.10源码、添加注解配置的处理信息: package org.hibernate.cfg; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation...
  • 解决方案

    2020-10-21 12:04:45
    1.去掉Accessor注解 2.要么就等待easyexcel的作者替换掉底层的cglib或者是其他,反正是支持获取返回值不是void的setxxx方法就行
  • Lombok使用与注解说明

    2019-12-03 13:39:08
    Lombok是j一款开发工具,它可以通过注释的形式,消除java的冗余代码,特别是简单的java对象。例如hashCode()和equals()这样的方法以及以往用来分类各种accessor和mutator的大量时间。 如何要使用,首先在pom.xml中...
  • @JsonIgnore注解的作用

    2020-07-13 23:57:25
    要想了解一个包或者一个注解的作用,最直接有效的办法,就是ctrl+鼠标左键,点进去,你发现,国外大佬们跟我们不一样,人家是喜欢写注释的(手动滑稽),注释里面就会详细的介绍这个包或者这个注解是干什么用的,有...
  • 之前整理过《Java注解(批注)的基本原理》,在java里面,,注解(Annotation)是油盐,对于JavaScript来说,还中世纪欧洲的东方香料 装饰器和注解 装饰器和注解之前也搞不清他们的具体理念,觉得都是基于元编程实现...
  • Lombok的注解使用

    2021-06-10 09:01:33
    在开发环境中使用Lombok插件后,Java开发人员可以节省出重复构建,诸如hashCode和equals这样的方法以及各种业务对象模型的accessor和ToString等方法的大量时间。对于这些方法,它能够在编译源代码期间自动帮我们生成...
  • Accessor的中文含义是存取器,@Accessors注解用来配置lombok如何产生和显示getter和setter的方法。 该注解既可以注解在类上也可以注解在属性上。 @Accessors有三个属性 fluent chain prefix 下面用代码举例说明...
  • lombok依赖相关注解

    2019-12-12 09:14:40
    1.SuppressWarnings注解 @SuppressWarnings("serial") 压制警告,将警告去除 2.AllArgsConstructor注解 @AllArgsConstructor 实现全参构造 3.NoArgsConstructor注解 @NoArgsConstructor 实现无参构造 4.Accessors注解...
  • 在 Spring Boot常用注解(一) - 声明Bean的注解 中学习了Spring Boot中声明Bean的注解 那Spring容器中的Bean是怎么实现自动装配(依赖)的呢? 这就是接下来学习的注入注解咯 注入Bean的注解: @Autowired @...
  • 代码:spring-annotation 扫描的时候,如果是自定义扫描规则,需要写一个实现类 实现 TypeFilter接口 配置类2 MainConfig2 @scope 单实例或者多实例 ...@import注解导入类 @importselector 需要写代码 ...
  • 自定义注解 自定义 DistributeExceptionHandler 注解,该注解接收一个参数 attachmentId 。 该注解用在方法上,使用该注解作为切点,实现标注该注解的方法抛异常后的统一处理。 @Target(ElementType.METHOD) @...
  • SpringBoot注解学习之@Accessors

    千次阅读 2020-07-20 16:13:35
    Accessor的中文含义是存取器; 包含的属性: fluent(布尔型)、chain(布尔型)、prefix(String型) 作用域: 既可以注解在类上也可以注解在属性上 作用: 用来配置lombok如何产生和显示getter和setter的...
  • lombok @Accessors注解

    2021-01-22 16:03:49
    Accessor的中文含义是存取器,@Accessors用于配置getter和setter方法的生成结果,下面介绍三个属性 fluent fluent的中文含义是流畅的,设置为true,则getter和setter方法的方法名都是基础属性名,且setter方法返回...
  • lombok里的@Accessors注解

    2020-05-10 08:34:46
    lombok里的@Accessors注解 Accessor的中文含义是存取器,@Accessors用于配置getter和setter方法的生成结果。 有三个属性 fluent–一个布尔值。如果属实,对于吸气pepper只是pepper(),并且设置器pepper(T ...
  • @ConfigurationProperties 注解

    万次阅读 2018-03-08 23:25:35
    我们在上一篇spring boot 源码解析12-servlet容器的建立 中 分析 ServerProperties时,发现其类上有@ConfigurationProperties 注解,加上该注解后,就会注入在application.properties中server开头的属性,那么它是怎么...
  • Lombok常用注解

    2020-10-23 20:46:45
    Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法。 官方地址:https://projectlombok.org/ github地址:...
  • lombok注解

    2019-08-24 23:08:27
    @Data 所有 类上, 为所有属性的getter和setter方法,还提供了equals,canEqual,hashCode,toString方法 @Setter,@Getter 有get、set ...@NoArgsConstructor @...Accessor的中文含义是存取器,
  • Hibernate也可以直接访问这些field,而使用访问方法(accessor method)的好处是提供了重构时的健壮性(robustness)。为了通过反射机制(Reflection)来实例化这个类的对象,我们需要提供一个无参的构造器(no-...
  • 对Java中常用注解的用法详解什么叫注解@Controller@RequestMapping@Autowired 什么叫注解 Java 注解(Annotation) 为我们在代码中添加信息提供了一种形式化的方法,是我们可以在稍后某个时刻方便地使用这些数据...
  • 常用注解笔记

    2021-08-21 20:59:59
    常用注解笔记 pojo包 @Date 简化代码 前提:需要引入lombok依赖和IDEA安装lombok插件 <!--Lombok (提供对类的字节码功能增强(类中添加 set,get,toString,...))--> <dependency> <groupId>org....
  • Lombok@Accessors实验注解

    2021-05-06 17:22:28
    Accessor的中文含义是存取器,@Accessors用于配置getter和setter方法的生成结果,下面介绍三个属性。 fluent fluent的中文含义是流畅的,设置为true,则getter和setter方法的方法名都是基础属性名,且setter方法...
  • @autowired @Qualifier注解静态变量

    千次阅读 2015-10-19 09:49:40
    遇到通过自动注入的方式实例化静态变量,可是总是报NullPointException的错误,网上好多说Spring注解只能对对象进行处理,而静态变量是属于类成员,所以Spring注解不可以注解静态对象。说的还蛮有道理的,可是事实...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,735
精华内容 1,894
关键字:

accessor注解