关于视图的创建和简单使用

需求说明

这几天接了个新需求,说是将不同的对象返回到同一个List集合内并在页面展示。

思路

首先是2张不同的表,其次2张表也没啥关联,之后就是这2张表有相似的字段值,仔细的考虑了一下,还是用视图来做比较方便。以前没用过视图,为了验证一下准确性,先在自己的测试环境做个测试看看。

具体实现

1.建表

测试表1:TEST_A

create table TEST_A 
(
       a_id varchar(20) primary key,
       a_name varchar(20),
       a_age varchar(2),
       a_address varchar(20),
       a_phone varchar(20),
       a_differ varchar(20)
)

测试表2:

create table TEST_B
(
       b_id varchar(20) primary key,
       b_name varchar(20),
       b_age varchar(2),
       b_address varchar(20),
       b_phone varchar(20),
       b_same varchar(20)
)

2.插入数据

insert into TEST_A values('a_1','aa','10','上海','111111','小学生');
insert into TEST_A values('a_2','ab','18','北京','222222','高中生');
insert into TEST_A values('a_3','ac','16','天剑','122222','国中生');
insert into TEST_A values('a_4','ad','22','上海','333333','大学生');
insert into TEST_A values('a_5','ae','30','合肥','333444','AE工程师');
insert into TEST_A values('a_6','af','25','广州','444444','打工仔');
insert into TEST_B values('b_1','ba','10','上海','111111','玩游戏');
insert into TEST_B values('b_2','bb','18','北京','222222','看书考试');
insert into TEST_B values('b_3','bc','16','天剑','122222','开心混日子');
insert into TEST_B values('b_4','bd','22','上海','333333','纠结的小混球');
insert into TEST_B values('b_5','be','30','合肥','333444','剪辑开始');
insert into TEST_B values('b_6','bf','25','广州','444444','一个打5个');

3.建视图

测试视图:TEST_ALL

-- 将相似的字段放到同一张视图中,查询2张表所有的数据
create or replace view  TEST_ALL
as
(
select a.a_id id, a.a_name name, a.a_age age, a.a_address address, a.a_phone tel from TEST_A a
union
select b.b_id id, b.b_name name, b.b_age age, b.b_address address, b.b_phone tel from TEST_B b
)

查询视图数据如下图:
在这里插入图片描述

4.建对象TestView

@Entity
@Subselect(value = "TEST_ALL")
public class TestView {

	// id
	@Id
	@Column(name = "ID")
	private String id;

	// name
	@Column(name = "NAME")
	private String name;

	// age
	@Column(name = "AGE")
	private String age;

	// address
	@Column(name = "ADDRESS")
	private String address;

	// tel
	@Column(name = "TEL")
	private String tel;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getAge() {
		return age;
	}

	public void setAge(String age) {
		this.age = age;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	public String getTel() {
		return tel;
	}

	public void setTel(String tel) {
		this.tel = tel;
	}

	public TestView() {
		
	}

	@Override
	public String toString() {
		return "TestView [id=" + id + ", name=" + name + ", age=" + age + ", address=" + address + ", tel=" + tel + "]";
	}
}

PS:
1.如何将视图映射到Entity中,这里用的是@Subselect这个注解,value的值是视图的名称,如果需要添加一些特殊的条件,可以搜索一下这个注解的使用。
2.@Id注解必须添加,否则报未指定标识符的异常。

5.代码调用

service层和dao层的就不展现了,直接展示调用的地方:

	@Autowired
	@Qualifier("testViewService")
	private TestViewService testViewService;
	
	@Action(value = "testView")
	public void testView() throws Exception {
		// 查询条件
		Map<String, String> sortMap = new HashMap<String, String>();
		// 条件排序
		Map<String, Object> condMap = new HashMap<String, Object>();
		// 查询结果
		List<TestView> list = testViewService.findByList(condMap, sortMap);
		for(TestView view : list) {
			System.out.println(view);
		}
	}

6.结果展示

在这里插入图片描述
说明:目前我这边只对结果进行查看,并未做其他处理,所以用起来还是挺方便的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值