ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

(十七)ORM Bee多表关联查询实例,及用List和不用List的区别

2021-10-24 14:03:50  阅读:238  来源: 互联网

标签:多表 List private Bee str table id append


ORM Bee多表关联查询, 用List和不用List的区别

Tables表:

 Columns表:

 在Columns表添加一条记录:

public class Tables implements Serializable {

	private static final long serialVersionUID = 1592797891739L;

	private Integer tableId;
	private String tableName;
	
	@JoinTable(mainField="table_id", subField="table_id",subClass="Columns", joinType=JoinType.JOIN)
	private Columns columns; 
//	private List<Columns> list;


//...set, get

	 public String toString(){	
		 StringBuffer str=new StringBuffer();	
		 str.append("Tables[");			
		 str.append("tableId=").append(tableId);		 
		 str.append(",tableName=").append(tableName);
		 
		 if(columns==null) {
//			 str.append(",list").append("=null");	
		 }else { 
		   str.append(",").append(columns.toString());
		 }
		 
		 str.append("]");
		 
		 return str.toString();			 
	 }		 
}

public class Columns implements Serializable {

	private static final long serialVersionUID = 1596238224595L;

	private Integer tableId;
	private Integer columnId;
	private String columnName;

   //... get, set

 public String toString(){	
		 StringBuffer str=new StringBuffer();	
		 str.append("Columns[");			
		 str.append("tableId=").append(tableId);		 
		 str.append(",columnId=").append(columnId);		 
		 str.append(",columnName=").append(columnName);		 
		 str.append("]");			 
		 return str.toString();			 
	 }		 
}

运行,得到以下日志:

[Bee] LoggerFactory Use the Logger is : org.teasoft.honey.logging.SystemLogger
[INFO] [Bee] ========= get the dbName from the Connection is :MySQL
[INFO] [Bee] select SQL: select table_id,table_name from tables where table_id=?   [values]: 1
[INFO] [Bee] select SQL:  ( ExecutableSql )
select table_id,table_name from tables where table_id=1
[INFO] [Bee]  | <--  select rows: 1
[Tables[tableId=1,tableName=t1]]
[INFO] [Bee] select SQL: select table_id,column_id,column_name from columns where table_id=?   [values]: 1
[INFO] [Bee] select SQL:  ( ExecutableSql )
select table_id,column_id,column_name from columns where table_id=1
[INFO] [Bee]  | <--  select rows: 2
[Columns[tableId=1,columnId=1,columnName=c1], Columns[tableId=1,columnId=2,columnName=C2]]
[INFO] [Bee] select SQL: select tables.table_id,tables.table_name,columns.table_id,columns.column_id,columns.column_name from tables,columns where tables.table_id=columns.table_id and tables.table_id=?   [values]: 1
[INFO] [Bee] select SQL:  ( ExecutableSql )
select tables.table_id,tables.table_name,columns.table_id,columns.column_id,columns.column_name from tables,columns where tables.table_id=columns.table_id and tables.table_id=1
[INFO] [Bee]  | <--  select rows: 2
[Tables[tableId=1,tableName=t1,Columns[tableId=1,columnId=1,columnName=c1]], Tables[tableId=1,tableName=t1,Columns[tableId=1,columnId=2,columnName=C2]]]

用数据库客户端查询:

 得到两条记录, 和用Bee查询回来的是一样的.

一行记录,对应一个实体对象.

[Tables[tableId=1,tableName=t1,Columns[tableId=1,columnId=1,columnName=c1]], Tables[tableId=1,tableName=t1,Columns[tableId=1,columnId=2,columnName=C2]]]

下面再来看下,用List的情况, 看下用List和不用List的区别;

在Tables类,主要修改以下代码:

    @JoinTable(mainField="table_id", subField="table_id",subClass="Columns",       joinType=JoinType.JOIN)
//    private Columns columns; 
    private List<Columns> list;

public class Tables implements Serializable {

	private static final long serialVersionUID = 1592797891739L;

	private Integer tableId;
	private String tableName;
	
	@JoinTable(mainField="table_id", subField="table_id",subClass="Columns", joinType=JoinType.JOIN)
	private List<Columns> list;
//注解里subClass属性,当两个实体在同一个包,包名,是可以省略的.

//...get ,set


	 public String toString(){	
		 StringBuffer str=new StringBuffer();	
		 str.append("Tables[");			
		 str.append("tableId=").append(tableId);		 
		 str.append(",tableName=").append(tableName);
		 
		 if(list==null) {
//			 str.append(",list").append("=null");	
		 }else { 
		   str.append(",").append(list.toString());
		 }
		 
		 str.append("]");
		 
		 return str.toString();			 
	 }		 
}

,然后运行:

[Bee] LoggerFactory Use the Logger is : org.teasoft.honey.logging.SystemLogger
[INFO] [Bee] ========= get the dbName from the Connection is :MySQL
[INFO] [Bee] select SQL: select table_id,table_name from tables where table_id=?   [values]: 1
[INFO] [Bee] select SQL:  ( ExecutableSql )
select table_id,table_name from tables where table_id=1
[INFO] [Bee]  | <--  select rows: 1
[Tables[tableId=1,tableName=t1]]
[INFO] [Bee] select SQL: select table_id,column_id,column_name from columns where table_id=?   [values]: 1
[INFO] [Bee] select SQL:  ( ExecutableSql )
select table_id,column_id,column_name from columns where table_id=1
[INFO] [Bee]  | <--  select rows: 2
[Columns[tableId=1,columnId=1,columnName=c1], Columns[tableId=1,columnId=2,columnName=C2]]
[INFO] [Bee] select SQL: select tables.table_id,tables.table_name,columns.table_id,columns.column_id,columns.column_name from tables,columns where tables.table_id=columns.table_id and tables.table_id=?   [values]: 1
[INFO] [Bee] select SQL:  ( ExecutableSql )
select tables.table_id,tables.table_name,columns.table_id,columns.column_id,columns.column_name from tables,columns where tables.table_id=columns.table_id and tables.table_id=1
[INFO] [Bee]  | <--  ( select raw record rows: 2 )
[INFO] [Bee]  | <--  select rows: 1
[Tables[tableId=1,tableName=t1,[Columns[tableId=1,columnId=1,columnName=c1], Columns[tableId=1,columnId=2,columnName=C2]]]]

一条主数据里,关联了一个List, 而List里有两条数据.

 Bee自动, 帮我们将同一条主表数据关联的从表数据放到List里了.

另个, 当我们只想查Tables实体的数据,  不想用多表关系,  就可以用Suid接口,  Suid默认会忽略关联注解@JoinTable,  这样,可以提高查询效率, 也不用重新另外定义实体.

注: 从表用List类型, 从V1.9.8开始.

另外, 导入bee.jar, honey.jar(或maven方式),

bee.properties里配置数据库连接连接信息.

标签:多表,List,private,Bee,str,table,id,append
来源: https://blog.csdn.net/abckingaa/article/details/120933357

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有