原 JAVA懒开发:对象虚拟化,全程无实体

直接对比

1、以前Mapper多表查询类似如下

<select id="getUserRolePage" parameterType="com.lazy.develop.model.UserRolQuery" 
	resultType="com.lazy.develop.model.UserRolePage">
	SELECT
		u.id,
		u.login_name AS loginName,
		u.`password`,
		u.create_time AS createTime,
		r.role_name AS roleName
	FROM
		`user` u
	JOIN role r ON u.`level` = r.id
	<where>
		<if test="startTime != null">
			u.create_time &gt;= #{startTime,jdbcType=TIMESTAMP}
		</if>
		<if test="endTime != null">
			AND u.create_time &lt;= #{endTime,jdbcType=TIMESTAMP}
		</if>
		<if test="level != null">
			AND u.level &gt; #{level,jdbcType=BIGINT}
		</if>
	</where>
</select>

这种情况多数,我们需要2个model(UserRolQuery和UserRolePage)

2、用Record.class(用map封装的)时如下

<select id="getUserRolePage" parameterType="com.lazy.develop.model.Record" 
	resultType="com.lazy.develop.model.Record">
	SELECT
		u.id,
		u.login_name AS loginName,
		u.`password`,
		u.create_time AS createTime,
		r.role_name AS roleName
	FROM
		`user` u
	JOIN role r ON u.`level` = r.id
	<where>
		<if test="startTime !='' and startTime != null">
			u.create_time &gt;= #{startTime,jdbcType=TIMESTAMP}
		</if>
		<if test="endTime !='' and endTime != null">
			AND u.create_time &lt;= #{endTime,jdbcType=TIMESTAMP}
		</if>
		<if test="level !='' and level != null">
			AND u.level &gt; #{level,jdbcType=BIGINT}
		</if>
	</where>
</select>

parameterType与resultType都是Record.class,但是因为是map,在取的时候都是字符串取值的,所以加空字符串判断。

3、service和serviceImpl都是一样的,只参数类与返回类不一样

4、以前的Controller

@RequestMapping(value="/getById", method = RequestMethod.GET)
public Object getUserRolePage(@ModelAttribute UserRolQuery userRolQuery){
	List<UserRolePage> user = userServiceImpl.getUserRolePage(userRolQuery);
	return user;
}

①一旦参数发生变化,UserRolQuery就的发生修改 ②一旦返回结果变化,UserRolePage也得发生修改 ③以上2中情况发生,Mapper配置文件都得改

5、使用Record.class的Controller

@RequestMapping(value="/getUserRolePage", method = RequestMethod.GET)
public Object getUserRolePage(HttpServletRequest request){
	Record Record=new Record(request);
	List<Record> user = userServiceImpl.getUserRolePage(Record);
	return user;
}

4中①和②的情况,都只需要执行步骤③

6、使用Record执行结果

给参数赋值什么的都不影响哈

Record赋值,取值

@RequestMapping(value="/getUserRolePage", method = RequestMethod.GET)
public Object getUserRolePage(HttpServletRequest request){
	Record record=new Record(request);
	//record.put("name", "name"); //和普通的map使用一样
	//String name=record.getString("name");
	//Integer id=record.getInteger("id");
	//Long id2=record.getLong("id");
	//Object obj=record.get("user"); //目前就写了这几个,大家可以根据自己的需求改哈
	
	List<Record> user = userServiceImpl.getUserRolePage(record);
	return user;
}

这种开发模式,因为没的bean,所以要求注释就比较严谨,不然过段时间,自己都不知道里面有啥了,不过对与有bean的来说,内容多的话,你也不知道那个字段在用,那个没用了吧,总体来说,优缺点都很明显。

Record.class源码:https://my.oschina.net/bianxin/blog/1589597

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏技术小站

SpringMVC:数据绑定入门(二)

1.为了实现所输入的数据格式与所需要的匹配该如何做到?例如:http://localhost:8080/date1.do?date1=2018-01-01,其中...

702
来自专栏枕边书

Java高级特性之泛型

874
来自专栏mathor

2018年全国多校算法寒假训练营练习比赛(第一场)大吉大利,今晚吃鸡——枪械篇

 说实话,一开始看到这个题,还以为是动态规划,后来想了一下好像并不存在什么子问题,就是单纯要求个最大值而已,枪的威力由强本身的威力加上配件的加成,那么配件加...

702
来自专栏Code_iOS

Objective-c 知识总结 -- 继承

观察发现,它们属性和方法声明是相同的,都有 填充色(fillcolor)、尺寸+位置(bounds)、绘制方法;

831
来自专栏coolblog.xyz技术专栏

MyBatis 源码分析 - 配置文件解析过程

由于本篇文章篇幅比较大,所以这里拿出一节对本文进行快速概括。本篇文章对 MyBatis 配置文件中常用配置的解析过程进行了较为详细的介绍和分析,包括但不限于se...

522
来自专栏Android知识点总结

SpringBoot-08-之统一化json输出与自定义异常捕获

811
来自专栏desperate633

LeetCode 6. ZigZag Conversion分析代码

这道题就是要根据z字形遍历,我们模拟一遍过程可以发现遍历的规律,可以用循环解决,先遍历下去,又向上。然后重复这个步骤,向下,向上!

631
来自专栏跟着阿笨一起玩NET

设计模式之UML类图的常见关系(一)

本篇会讲解在UML类图中,常见几种关系: 泛化(Generalization),依赖(Dependency),关联(Association),聚合(Aggreg...

381
来自专栏Kotlin源码阅读

kotlin源码阅读——字符串

filename:String.kt/StringsJVM.kt/Arrays.kt/CharSequence.kt

2554
来自专栏智能算法

Python学习(七)---- 面向对象学习(类)

原文地址: https://blog.csdn.net/fgf00/article/details/52449707 编辑:智能算法,欢迎关注!

692

扫码关注云+社区