Skip to content

DasClient 表实体和查询实体设计

He, Jiehui edited this page Oct 28, 2019 · 2 revisions

简介

das consle会根据逻辑数据库中指定的表和用户提供的查询语句分别生成表实体和查询实体。表实体可以用于数据库的CRUD操作和构造SQL,查询实体仅用于表示查询结果

表实体

表结构字段

表类型静态常量

实体类型定义里面会有一个静态公开字段,名字是表名大写,类型是TableDefinition的子类,子类名字是驼峰形式表名+Definition;

public static final PersonDefinition PERSON = new PersonDefinition();

表的类型定义

表对应的TableDefinition的子类定义

public static class PersonDefinition extends TableDefinition<PersonDefinition>

字段常量

每个列会有一个列定义与之对应

public final ColumnDefinition PeopleID;

表定义方法简介

方法 用途
PersonDefinition as(String alias) 用指定别名生成新的表定义的实例
PersonDefinition inShard(String shardId) 用指定的shard id生成新的表定义的实例,使用该表定义和表定义对应字段生成的SQL会指向shard id规定的分片
PersonDefinition shardBy(String shardValue) 用指定的shard value生成新的表定义的实例,使用该表定义和表定义对应字段生成的SQL会指向shard value进过分片策略计算所获取的对应分片

构造函数

用于构造表定义的缺省单例

public PersonDefinition()

字段映射

查询结果所映射的字段上面加@Column标注,name="字段名"

例如:@Column(name="PeopleID")

如果是主键,则通过@Id标注

主键如果是自动生成的,则用@GeneratedValue(strategy = GenerationType.AUTO)标注

    @Id
    @Column(name="PeopleID")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer peopleID;

完整示例

package com.ppdai.das.client.delegate.imp.ctrip;
import java.sql.JDBCType;
import java.sql.Timestamp;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import com.ppdai.das.client.ColumnDefinition;
import com.ppdai.das.client.TableDefinition;
@Table(name="person")
public class Person {
    public static final PersonDefinition PERSON = new PersonDefinition();
    
	public static class PersonDefinition extends TableDefinition {
	    public final ColumnDefinition PeopleID;
	    public final ColumnDefinition Name;
	    public final ColumnDefinition CityID;
	    public final ColumnDefinition ProvinceID;
	    public final ColumnDefinition CountryID;
	    public final ColumnDefinition DataChange_LastTime;
        public PersonDefinition as(String alias) {return _as(alias);}
        public PersonDefinition inShard(String shardId) {return _inShard(shardId);}
        public PersonDefinition shardBy(String shardValue) {return _shardBy(shardValue);}

        public PersonDefinition() {
            super("person");
            setColumnDefinitions(
                    PeopleID = column("PeopleID", JDBCType.INTEGER),
                    Name = column("Name", JDBCType.VARCHAR),
                    CityID = column("CityID", JDBCType.INTEGER),
                    ProvinceID = column("ProvinceID", JDBCType.INTEGER),
                    CountryID = column("CountryID", JDBCType.INTEGER),
                    DataChange_LastTime = column("DataChange_LastTime", JDBCType.TIMESTAMP)
                    );
        }	    
	}
    @Id
	@Column(name="PeopleID")
    @GeneratedValue(strategy = GenerationType.AUTO)
	private Integer peopleID;
	
	@Column(name="Name")
	private String name;
	
	@Column(name="CityID")
	private Integer cityID;
	
	@Column(name="ProvinceID")
	private Integer provinceID;
	
	@Column(name="CountryID")
	private Integer countryID;
	
	@Column(name="DataChange_LastTime")
	private Timestamp dataChange_LastTime;
	public Integer getPeopleID() {
		return peopleID;
	}
	public void setPeopleID(Integer peopleID) {
		this.peopleID = peopleID;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getCityID() {
		return cityID;
	}
	public void setCityID(Integer cityID) {
		this.cityID = cityID;
	}
	public Integer getProvinceID() {
		return provinceID;
	}
	public void setProvinceID(Integer provinceID) {
		this.provinceID = provinceID;
	}
	public Integer getCountryID() {
		return countryID;
	}
	public void setCountryID(Integer countryID) {
		this.countryID = countryID;
	}
	public Timestamp getDataChange_LastTime() {
		return dataChange_LastTime;
	}
	public void setDataChange_LastTime(Timestamp dataChange_LastTime) {
		this.dataChange_LastTime = dataChange_LastTime;
	}
}

查询实体

查询实体只有get方法,没有set方法,用于代表查询结果集中的行记录。

字段映射

查询结果集中的每一列都会被映射为一个对象字段。为了防止NULL的情况,数值类型使用包装类表示。

	@Column(name="PeopleID")
	private Integer peopleID;

完整示例

package com.ppdai.das.client.delegate.imp.ctrip;
import java.sql.Timestamp;
import javax.persistence.Column;
public class FreeEntityPojo {
	
	@Column(name="PeopleID")
	private Integer peopleID;
	
	@Column(name="Name")
	private String name;
	
	@Column(name="CityID")
	private Integer cityID;
	
	@Column(name="ProvinceID")
	private Integer provinceID;
	
	@Column(name="CountryID")
	private Integer countryID;
	
	@Column(name="DataChange_LastTime")
	private Timestamp dataChange_LastTime;
	public Integer getPeopleID() {
		return peopleID;
	}
	public String getName() {
		return name;
	}
	public Integer getCityID() {
		return cityID;
	}
	public Integer getProvinceID() {
		return provinceID;
	}
	public Integer getCountryID() {
		return countryID;
	}
	public Timestamp getDataChange_LastTime() {
		return dataChange_LastTime;
	}
}
Clone this wiki locally