Ebean-機能紹介
12751 ワード
Mapping
EbeanはJPAと同じマッピングを使用しているので、@Entity,@Table,@Column,@OneToManyなどを使用してエンティティに注釈を付けることができます.
Query
1.個々の結果を問い合わせる:
実行されるsqlは次のとおりです.
2.複数の結果を問い合わせる:
実行されるsqlは次のとおりです.
3.select()とfetch()
select()とfetch()を使用して、必要なプロパティをクエリーできます.
実行されるsqlは次のとおりです.
実行sqlは次のとおりです.
4.sqlクエリー言語の使用
実行されるsqlは次のとおりです.
次のように等価です.
RawSql
このようにsum()、count()、max()などの機能を使用することができます.
注意:外部キーは必ず検索しなければなりません.そうしないと、Query threw SQLException:Column Index out of range、0<1.エラーが表示されます.
Save & Delete
Transactions
注記@Transactional
注意:関数の例外はtry catchではキャプチャできません.そうしないと、トランザクションは機能しません.Playフレームワークは最外層Result controllerに置かなければなりません.そうしないと役に立ちません.
伝統的な方式.
EbeanはJPAと同じマッピングを使用しているので、@Entity,@Table,@Column,@OneToManyなどを使用してエンティティに注釈を付けることができます.
@Entity
public class B_Order extends CModel {
public String uuid = null;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Integer id;
@Constraints.Required
@Version
public Integer version = 1;
@ManyToOne
@Column(nullable = false)
public B_Customer customer;
public int status;
public String shipDate;
public String orderDate;
public int price;
}
Query
1.個々の結果を問い合わせる:
B_Customer customer = Ebean.find(B_Customer.class, 4);
実行されるsqlは次のとおりです.
select t0.id c0, t0.uuid c1, t0.name c2, t0.version c3 from b_customer t0 where t0.id = 4
2.複数の結果を問い合わせる:
List<B_Customer> customers = Ebean.find(B_Customer.class)
.where().like("name", "%a%")
.orderBy("name desc")
.findList();
実行されるsqlは次のとおりです.
select t0.id c0, t0.uuid c1, t0.name c2, t0.version c3 from b_customer t0 where t0.name like '%a%' order by t0.name desc
3.select()とfetch()
select()とfetch()を使用して、必要なプロパティをクエリーできます.
List orderList =Ebean.find(B_Order.class).select("id").where().eq("status",B_Order.STATUS_ACTIVE).findList();
実行されるsqlは次のとおりです.
select t0.id c0 from b_order t0 where t0.status = 1
List orderList =Ebean.find(B_Order.class).select("id")
.fetch("customer","name")
.where().eq("status",B_Order.STATUS_ACTIVE)
.findList();
実行sqlは次のとおりです.
select t0.id c0, t1.id c1, t1.name c2 from b_order t0 left outer join b_customer t1 on t1.id = t0.customer_id where t0.status = 1
4.sqlクエリー言語の使用
String q = "find b_order fetch customer where id=:id";
B_Order order = Ebean.createQuery(B_Order.class,q).setParameter("id", 23).findUnique();
実行されるsqlは次のとおりです.
select t0.id c0, t0.uuid c1, t0.status c2, t0.ship_date c3, t0.order_date c4, t0.version c5, t1.id c6, t1.uuid c7, t1.name c8, t1.version c9 from b_order t0 left outer join b_customer t1 on t1.id = t0.customer_id where t0.id = 23
次のように等価です.
B_Order order = Ebean.createQuery(B_Order.class).fetch("customer").where().eq("id",23).findUnique();
RawSql
このようにsum()、count()、max()などの機能を使用することができます.
String sql ="select o.id ,o.customer_id, c.name , sum(price) as price from b_order o join b_customer c on o.customer_id = c.id group by customer_id";
RawSql rawSql = RawSqlBuilder.parse(sql)
.columnMapping("c.name","customer.name")
.columnMapping("o.customer_id","customer.id")
.columnMapping("o.id","id")
.create();
Query query = Ebean.find(B_Order.class);
List orderList = query.setRawSql(rawSql).findList();
注意:外部キーは必ず検索しなければなりません.そうしないと、Query threw SQLException:Column Index out of range、0<1.エラーが表示されます.
Save & Delete
Order order = Ebean.find(Order.class, 12);
order.price = 2;
Ebean.save(order);
Order order = Ebean.find(Order.class, 12);
Ebean.delete(order);
Transactions
注記@Transactional
@Transactional
public void runFirst() throws IOException {
User u1 = Ebean.find(User.class, 1);
…
Customer cust = Ebean.find(Customer.class, 27);
…
Ebean.save(cust);
}
注意:関数の例外はtry catchではキャプチャできません.そうしないと、トランザクションは機能しません.Playフレームワークは最外層Result controllerに置かなければなりません.そうしないと役に立ちません.
伝統的な方式.
Ebean.beginTransaction();
try {
...
Ebean.save(customer);
Ebean.save(order);
Ebean.commitTransaction();
} finally {
Ebean.endTransaction();
}