ebean的学习

来源:互联网 发布:mac酷我音乐桌面歌词 编辑:程序博客网 时间:2024/06/09 17:57

1.JPA Mapping

ebean使用了与JAP相同的注解。


ebean使用了名称惯例原则,例如数据库中的字段“student_name”和java中的studentName对应,

我们也可以使用@Column(name="自定义的名字") 来实现java和数据库中相关字段的对应。

默认的UnderscoreNamingConvention将带有下划线的列名转换成普通的java驼峰命名规则命名的属性名称。


@ManyToMany和@OneToMany都存在一个mappedBy属性而且该属性的功能也是一样的。但是@ManyToOne没有这个属性。@OneToOne也有这个属性,但和@ManyToMany和@oneToMany的不一样。@OneToOne的就不介绍了。mappedBy: 指定拥有这个关系(ManyToMany或OneToMany)的域的名字,除非是单向的联系,否则该属性必须得设置。


@JoinColulmn的name属性:指定数据表(代表多的一端)中使用外键的那个字段的名字。至于是哪个数据表要根据context上下文去判断。如果是OneToOne或ManyToOne,该数据表与source entity对应。如果是ManyToMany,该数据表与join table 对应。----其name属性的默认值是:该java实体所引用的属性名_数据表中被引用的主键名。或,java实体名_数据表中被引用的主键名(如果Java实体中没有对应的属性名)。 注意:一的一端永远不会存放多的一端的外键,外键永远只会存放在多的一端。


@JoinTable的name属性的默认值: 假设有学生(t_student),课程(t_course),成绩(t_score)这3个表, 成绩是中间表, 则name属性的默认值是t_student_t_course


@OneToOne、@ManyToOne和@ManyToMany注解只能表示实体之间的关联关系,但是不能指定“关联的字段”。

所以需要使用@JoinColumn注解来指定。

注意:@JoinColumn和@Column都用来注释表中的字段,但是@JoinColumn“注释”与表间关系有关的字段。 

而@Column主要是用来表示java和数据库中相关字段的对应,其可以“注释”任何字段。

@ManyToOne@JoinColumn(name = "roleid")private Role role;


@Table表示java与数据库表的关系,@JoinTable表示中间表


@Id   Ebean假定数据库ID生成是首选的,并且自动映射到基于数据库平台的标识或序列支持。


由于JPA没有提供与Enum相关的注解,所以Ebean提供了两个注解@DbEnumValue和@EnumValue


注意:在ebean中不要使用 Fetch Type eager/ lazy


@Size  定义字段的宽度,@Size(20) 和 @Column(length=50)是一样的。

@NotNull   约束字段的值不能为空,@Column(nullable = false) 和 @ManyToOne(optional = false)是一样的


如果java Bean中没有默认的构造器,Ebean's enhancement会自动地为我们添加一个默认的构造器。


// fetch partially populated beans that don't have the name property loaded

List<Customer> customers = 

Customer.find.where()

.name.startWith("Ronb")

.select("id") //only select id property

.findList():


得到关联的bean

Customer refBean = Customer.find.ref(42);

String name = refBean.getName();


没有Setter方法的bean

/**
 * Country entity bean with no default constructor and
 * no setters (only getters).
 */
 @Entity
 public class Country extends Model {
   public static final CountryFinder find = new CountryFinder();
   @Id @Size(max = 2)
   final String code;
   @NotNull @Size(max = 60)
   final String name;
   // enhancement will add a default constructor
   public Country(String code, String name) {
     this.code = code;
     this.name = name;
   }
   // getters only for Country bean
   public String getCode() { return code; }
   public String getName() { return name; }
 }

就算没有setter方法,ebean还是可以部分加载和引用bean

// insert a country
new Country("NZ", "New Zealand").save();
// reference bean (only has @Id property loaded)
Country nzRefBean = ebeanServer.getReference(Country.class, "NZ");
// reference bean using a "finder"
Country nzRefBean = Country.find.ref("NZ");


2.常用API

EbeanServer ebeanServer = new EbeanServer();

query = "select * from t_user t where 1=1 and t.a=? and t.b=?";

Query<T> query = ebeanServer.createQuery(Class<T> beanType, String query);

query.setParameter(int position, Object value);

query.findRowCount();

int count = query.findRowCount();PagedList<CustomDetail> list = query.setFirstRow(page.getStart()).setMaxRows(pageSize).order("whenCreated desc").findPagedList();for (CustomDetail customDetail : list.getList()) {    String content = customDetail.getFormContent();    if (StringUtils.isNotEmpty(content)) {        Map detail = FastJsonUtil.toObject(content, Map.class);        customDetail.setDetail(detail);    }}page.setRecords(count);page.setRows(list.getList());return page;
@Entity@Table(name = "")public class CustomDetail extends BaseModel {    @ManyToOne    private CustomForm form;    @ManyToOne    private User user;    @Column(columnDefinition = "text")    private String formContent;    @Column(length = 10)    private String status;    @Column(length = 10)    private String isSend;    @Transient    private Map detail;


ebean的where中如何应用对象的属性

@Overridepublic List<CustomDetail> findList(Integer formId) {   List<CustomDetail>  detailList=ebeanServer.find(CustomDetail.class).where().eq("form_id", formId).findList();   return detailList;}
public class CustomDetail extends BaseModel {    @ManyToOne    private CustomForm form;

String sql="select t.* from p_custom_item t where t.id="+dto.getId();SqlRow row = ebeanServer.createSqlQuery(sql).findUnique();String tempName = row.getString("field_id");

原创粉丝点击