(六): ORM Bee多表查询(面向对象方式)

205 篇文章 0 订阅

Bee简单易用:单表操作、多表关联操作,可以不用写sql,极少语句就可以完成SQL操作;10分钟即可学会使用。

Bee功能强大:复杂查询也支持向对象方式,分页查询性能更高,一级缓存即可支持个性化优化。高级需求,还可以方便自定义SQL语句。

Bee多表查询(面向对象方式)

Bee一对多(一对一,多对多)查询不需要List. 呈现方式,像我们用DB客户端查询数据,结果是一个二维表. Bee是将这个二维表的
每一行封装在一个主对象里,每个主对象会有一个从对象保存从表的数据.

1. 多表查询介绍

Bee v1.7 增加面向对象方式多表查询支持.
1).支持一对一,一对多,多对一,多对多。
2).支持join(inner join), left join,right join, no join。
3).单表、多表的查询操作互不干扰。

多表查询由MoreTable接口负责,MoreTable提供三个方法:

public <T> List<T> select(T entity);  
public <T> List<T> select(T entity, int start, int size);
public <T> List<T> select(T entity, Condition condition);

2. 使用实例

2.1 MoreTable详细使用实例

  这里,我们要将某条订单信息及相应的用户详细信息查询出来。其中订单放在Orders 表,用户放在User表。
/**
 * @author Kingstar
 * @since  1.7
 */
public class MoreTableExam {

  public static void main(String[] args) {
    test();
  }

  public static void test() {
    try {
      MoreTable moreTable = BeeFactory.getHoneyFactory().getMoreTable();

      Orders orders1 = new Orders();
      orders1.setUserid("bee");
      orders1.setName("Bee(ORM Framework)");

      User user = new User();
      user.setEmail("beeUser@163.com");
      orders1.setUser(user);

      //默认不处理null和空字符串.不用再写一堆的判断;其它有值的字段全部自动作为过滤条件
      //List<Orders> list1 =moreTable.select(orders1);  //select
      List<Orders> list1 = moreTable.select(orders1, 0, 10); //select 查询前10条记录
      Logger.info("size of records:"+list1.size() + "");
      for (int i = 0; i < list1.size(); i++) {
        Logger.info(list1.get(i).toString());
      }

      Condition condition = new ConditionImpl();
      condition
      //.op("myuser.id", Op.gt,6)//模糊查询   取别名
      //.op("user.id", Op.gt,6) //模糊查询  
      .op("orders.id", Op.ge, 100001) //模糊查询  
      .start(2).size(5) //分页
      ;

      //默认不处理null和空字符串.不用再写一堆的判断;其它有值的字段全部自动作为过滤条件
      //List<Orders> list2 =moreTable.select(orders1,0,10);  //select 查询前10条记录
      List<Orders> list2 = moreTable.select(orders1, condition); //select
      Logger.info("size of records:"+list2.size() + "");
      for (int i = 0; i < list2.size(); i++) {
        Logger.info(list2.get(i).toString());
      }

    } catch (BeeException e) {
      e.printStackTrace();
      Logger.error(e.getMessage());
    }
  }
}

2.2 Javabean

/**
*@author Honey
*Create on 2020-03-03 11:33:21
*/
public class Orders implements Serializable {

  private static final long serialVersionUID = 1592526978329L;

  private Long id;
  private String userid;
  private String name;
  private BigDecimal total;
  private Timestamp createtime;
  private String remark;
  private String sequence;
  private String abc;
  private Timestamp updatetime;
  
//  @JoinTable(mainField="userid", subField="username")
  @JoinTable(mainField="userid", subField="username", joinType=JoinType.LEFT_JOIN)
//  @JoinTable(mainField="userid", subField="username",subAlias="myuser" , joinType=JoinType.FULL_JOIN)
//  @JoinTable()
  private User user;
  
  public User getUser() {
    return user;
  }
  
  // ... get,set methods.
 }
/**
*@author Honey
*Create on 2020-03-03 11:33:21
*/
public class User implements Serializable {

  private static final long serialVersionUID = 1599097617870L;

  private Integer id;
  private String email;
  private String lastName;
  private String name;
  private String password;
  private String username;
  private Timestamp createtime;
  
  // ... get,set methods.
 }

2.3 运行结果

[Bee] select SQL: 
select * from orders left join user on orders.userid=user.username where orders.userid=? and orders.name=? and user.email=? limit 0,10   [values]: bee,Bee(ORM Framework),beeUser@163.com
size of records:3
Orders[id=100027,userid=bee,name=Bee(ORM Framework),total=91.99,createtime=2020-04-25 17:59:15.0,remark=test transaction,sequence=null,abc=null,updatetime=2020-04-25 17:59:15.0,User[id=800001,email=beeUser@163.com,lastName=null,name=Bee,password=bee,username=bee,createtime=2020-04-17 20:27:03.0]]
Orders[id=100030,userid=bee,name=Bee(ORM Framework),total=91.99,createtime=2020-05-02 22:58:46.0,remark=null,sequence=null,abc=null,updatetime=2020-05-02 22:58:46.0,User[id=800001,email=beeUser@163.com,lastName=null,name=Bee,password=bee,username=bee,createtime=2020-04-17 20:27:03.0]]
Orders[id=100031,userid=bee,name=Bee(ORM Framework),total=91.99,createtime=2020-05-02 22:59:10.0,remark=null,sequence=null,abc=null,updatetime=2020-05-02 22:59:10.0,User[id=800001,email=beeUser@163.com,lastName=null,name=Bee,password=bee,username=bee,createtime=2020-04-17 20:27:03.0]]
[Bee] select SQL: 
select * from orders left join user on orders.userid=user.username where orders.userid=? and orders.name=? and user.email=? and orders.id>=? limit 2,5   [values]: bee,Bee(ORM Framework),beeUser@163.com,100001
size of records:1
Orders[id=100031,userid=bee,name=Bee(ORM Framework),total=91.99,createtime=2020-05-02 22:59:10.0,remark=null,sequence=null,abc=null,updatetime=2020-05-02 22:59:10.0,User[id=800001,email=beeUser@163.com,lastName=null,name=Bee,password=bee,username=bee,createtime=2020-04-17 20:27:03.0]]

到这里, Bee多表查询(面向对象方式)就介绍完了。是不是觉得多表查询简单易用。要是有什么问题,记得告诉我们哦!

互联网刷新了整个软件技术栈。微服务、大数据,软件需求变化快,编码量大。全新理念的ORM框架Bee, 以应对互联网时代软件需求快速变化的代码编写。Bee入门简单,使用方便,功能强大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值