一、批量添加品牌信息到数据表
一、业务实现类实现
@Override public void batch(List<MchBrandShopEntityReq> reqList, MchUser user) { if (CollectionUtil.isEmpty(reqList)) { throw new SaasNetworkException(SaasExceptionCode.REQUEST_PARAM_IS_NULL); } Date now = DateUtils.getNow(); List<MchBrandShop> shopList = new ArrayList<>(); reqList.forEach(sopEntityReq -> { MchBrandShop mchBrandShop = new MchBrandShop(); BeanUtils.copyProperties(sopEntityReq, mchBrandShop); CityRes cityRes = getCityRes(sopEntityReq.getLng(), sopEntityReq.getLat()); if (null != cityRes) { mchBrandShop.setProvince(cityRes.getProvinceName()); mchBrandShop.setProvinceCode(cityRes.getProvinceCode()); mchBrandShop.setCity(cityRes.getCityName()); mchBrandShop.setCityCode(cityRes.getCityCode()); mchBrandShop.setRegion(cityRes.getRegionName()); mchBrandShop.setRegionCode(cityRes.getRegionCode()); mchBrandShop.setMerchantId(user.getBelongId()); mchBrandShop.setGmtCreate(now); mchBrandShop.setGmtCreateBy(user.getTelphone()); mchBrandShop.setGmtCreateUid(user.getId()); mchBrandShop.setGmtModifiedUid(user.getId()); mchBrandShop.setGmtModified(now); mchBrandShop.setGmtModifiedBy(user.getTelphone()); shopList.add(mchBrandShop); } }); if (CollectionUtil.isNotEmpty(shopList)) { brandShopDaoMapper.bSave(shopList); } }
二、批量保存-mybatis
<insert id="bSave"> insert into mch_brand_shop ( merchant_id, brand_id, shop_name, province, city, region, address, lng, lat, min_area, max_area, day_income, min_day_income, max_day_income, open_time, floor, rent_month_amount, rent_time, gmt_create, gmt_create_uid, gmt_create_by, gmt_modified_uid, gmt_modified_by, gmt_modified ) values <foreach collection="list" item="shop" separator="," index="index"> ( #{shop.merchantId}, #{shop.brandId}, #{shop.shopName}, #{shop.province}, #{shop.city}, #{shop.region}, #{shop.address}, #{shop.lng}, #{shop.lat}, #{shop.minArea}, #{shop.maxArea}, #{shop.dayIncome}, #{shop.minDayIncome}, #{shop.maxDayIncome}, #{shop.openTime}, #{shop.floor}, #{shop.rentMonthAmount}, #{shop.rentTime}, #{shop.gmtCreate}, #{shop.gmtCreateUid}, #{shop.gmtCreateBy}, #{shop.gmtModifiedUid}, #{shop.gmtModifiedBy}, #{shop.gmtModified} ) </foreach> </insert>
二、反射的理解及如何通过反射获取和设置对象私有字段的值
下面代码实现反射通过反射获取和设置对象私有字段的值
public class Teste { public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { String str = "are you ok"; Method method = str.getClass().getMethod("toUpperCase"); System.out.println(method.invoke(str)); //ARE YOU OK } }
回顾反射的定义
视为Java动态语言的关键,本身Java是偏静态的。
1、反射的三种方式
Class a = String.class;
Class b = person.getClass();
Class c = Class.forName(String classPath);//常用—》体现反射的动态性
2、创建类的对象的方式
1 new + 构造器
2 要创建Xxx类的对象,可以考虑:Xxx、Xxxs、XxxFactory、XxxBuilder类中查看是否有静态方法的存在。可以调用它的静态方法,创建Xxx对象。(其实把new + 构造器封装了)
3 反射
3、反射的应用:动态代理
动态代理与AOP
AOP代理的方法 动态代理增加的通用方法
回调目标对象的方法,动态代理增加的通用方法
三、堆、栈、方法区(2.0)
1、String a=new String(“fdsdfs”);
堆 存放的是new出来的对象 jvm中只有一个堆区 被所有的线程共享
栈 是变量a 每个栈中的数据私有的 其他栈不能访问。栈中分配的是基本类型和自定义对象的引用。
方法区 是“fdsdfs”;被所有的线程共享,方法区包含所有的class static变量。
方法区存放的是类信息和static变量。
2、也可以这么理解:堆是用来存放对象的,栈是用来运行程序的。
堆:java的垃圾回收器会自动的回收这些不用的数据。缺点是由于要动态的分配内存,存储效率会比较的慢。
栈:栈的优势是存取效率比较快,仅次于寄存器,栈数据可以共享。但缺点是栈中的数据大小和生存期的固定的,缺乏灵活性。
3、堆和栈的区别可以用如下的比喻来看出:(来自csdn/weixin_41254254)
使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。
使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。
四、SpringCloud微服务再整理
1、什么是分布式?
不同模块部署在不同服务器上
作用解决高并发
解耦
让开发者更关注业务
等等
2、什么是集群?
多台服务器部署相同应用构成一个集群
作用:通过负载均衡设备共同对外提供服务
负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务
3、Restful
Restful是一种架构设计风格,提高设计原则和约束条件
但不是架构
而满足这些约束条件和原则的应用程序或设计就是 RESTful架构或服务。
4、什么是微服务
架构设计概念,各服务间隔离(分布式也是隔离),自治(分布式依赖整体组合)其它特性(单一职责,边界,异步通信,独立部署)是分布式概念的跟严格执行
SOA到微服务架构的演进过程
作用:各服务可独立应用,组合服务也可系统应用(巨石应用[monolith]的简化实现策略-平台思想)
五、Oracle和Mysql的区别
简述解释
MySQL比较小,而且免费,开源的缘故,现在也很健壮,若不是大型应用的话,MySQL足以应付一切。
oracle比较庞大,整个体系都很健全。
简单的说MySQL是实用很好用,oracle就是很好很强大
详细解释
1.Oracle是大型数据库,Mysql是中小型数据库
2.Oracle占有内存空间大,Mysql占有小
3.Oracle支持大并发访问量,是OLTP最好的工具,Mysql并发小,面对大访问量可以做分表分库优化
4.Oracle没有自动增长类型,Mysql一般使用自动增长类型
5.Oracle处理翻页的SQL语句就比较繁琐了。每个结果集只有一个ROWNUM字段标明它的位置,并且只能用ROWNUM<100,不能用ROWNUM>80,MYSQL处理翻页的SQL语句比较简单,用LIMIT开始位置,记录个数
6.MYSQL的非空字段有空的内容,ORACLE里定义了非空字段就不容许有空的内容。按MYSQL的NOT NULL来定义Oracle是is null
7.MYSQL里用 字段名 like ‘%字符串%’,ORACLE用 字段名like '%字符串%'但不能使用索引,速度不快。【like ‘%’开头 无法使用索引 不使用开头 可以使用索引】
8.Oracle实现了ANSII SQL中事务的隔离级别、传播特性等比Mysql强;