[一起学Java]

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介: 一、批量添加品牌信息到数据表一、业务实现类实现

一、批量添加品牌信息到数据表

一、业务实现类实现

    @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强;


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
Oracle Java 关系型数据库
认识Java
认识Java
21 2
|
6月前
|
Java 物联网 编译器
Java
Java
50 0
|
监控 Dubbo 安全
JAVA问答8
JAVA问答8
104 0
|
存储 自然语言处理 运维
JAVA问答11
JAVA问答11
101 0
1062 最简分数(JAVA)
一个分数一般写成两个整数相除的形式:N/M,其中 M 不为0。最简分数是指分子和分母没有公约数的分数表示形式。
1062 最简分数(JAVA)
|
Java
Java常见的坑(二)
你猜上述程序输出的是什么? 是 ABC easy as 123 吗? 你执行了输出操作,你才发现输出的是 ABC easy as [C@6e8cf4c6 ,这么一串丑陋的数字是什么鬼? 实际上我们知道字符串与任何数值的相加都会变为字符串,上述事例也不例外, numbers输出其实实际上是调用了Object.toString()方法,让numbers转变为'[c' + '@' + 无符号的十六进制数。
70 0
|
Java
Java - 9 个小技巧让你的 if else 看起来更优雅(四)
Java - 9 个小技巧让你的 if else 看起来更优雅(四)
111 0
|
Java
java if..else
java if..else
131 0
java if..else
|
Java
Java的nanoTime()
java有两个获取和时间相关的秒数方法,一个是广泛使用的 System.currentTimeMillis()   返回的是从一个长整型结果,表示毫秒。 另一个是 System.nanoTime()   返回的是纳秒。
1762 0
|
Java 存储