-
Notifications
You must be signed in to change notification settings - Fork 60
6、多表查询(面向对象方式)
Bee edited this page May 6, 2021
·
2 revisions
Bee简单易用:单表操作、多表关联操作,可以不用写sql,极少语句就可以完成SQL操作;10分钟即可学会使用。
Bee功能强大:复杂查询也支持向对象方式,分页查询性能更高,一级缓存即可支持个性化优化。高级需求,还可以方便自定义SQL语句。
Bee一对多(一对一,多对多)查询不需要List. 呈现方式,像我们用DB客户端查询数据,结果是一个二维表. Bee是将这个二维表的
每一行封装在一个主对象里,每个主对象会有一个从对象保存从表的数据.
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.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入门简单,使用方便,功能强大。