成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

利用Java實(shí)體bean對(duì)象批量數(shù)據(jù)傳輸處理方案小結(jié)

瀏覽:105日期:2022-08-12 13:00:06

javaBean在MVC設(shè)計(jì)模型中是model,又稱模型層,在一般的程序中,我們稱它為數(shù)據(jù)層,就是用來(lái)設(shè)置數(shù)據(jù)的屬性和一些行為,然后我會(huì)提供獲取屬性和設(shè)置屬性的get/set方法JavaBean是一種JAVA語(yǔ)言寫(xiě)成的可重用組件。為寫(xiě)成JavaBean,類(lèi)必須是具體的和公共的,并且具有無(wú)參數(shù)的構(gòu)造器。

下面通過(guò)本文給大家分享利用Java實(shí)體bean對(duì)象批量數(shù)據(jù)傳輸處理的解決方案。

需求

現(xiàn)在有兩方數(shù)據(jù)庫(kù)表結(jié)構(gòu)相同,一方A、另一個(gè)方B,現(xiàn)想從A處查詢出多個(gè)表的數(shù)據(jù),傳輸?shù)紹地保存起來(lái)。

解決方案1

最簡(jiǎn)單粗暴的方法就是,查詢出A處相關(guān)表的數(shù)據(jù)封裝到實(shí)體對(duì)象中,之后放到List集合中,再傳遞給B處,B處再遍歷集合,將數(shù)據(jù)保存到B處。但是此處的問(wèn)題是想要再添加一個(gè)表的數(shù)據(jù)時(shí),需要改查詢的代碼還需要改保存的代碼,非常麻煩,所以不建議使用。

方案2

新建一個(gè)需要準(zhǔn)備哪些數(shù)據(jù)的實(shí)體類(lèi)對(duì)象

待查詢的貓

@Data@AllArgsConstructor@NoArgsConstructorpublic class Cat { private String id; private String food; private String weight; private String height;}

待查詢的狗

@Data@AllArgsConstructorpublic class Dog { private String id; private String food; private String weight; private String height;}

待查詢的豬

@Data@AllArgsConstructorpublic class Pig { private String id; private String food; private String weight; private String height; private String pid;}

自定義傳輸實(shí)體對(duì)象,這里定義了需要查詢那些集合對(duì)象

@Data@AllArgsConstructor@NoArgsConstructorpublic class CustomDataTransferDTO{ /** * =============================================================== * 數(shù)據(jù)查詢結(jié)果 * =============================================================== */ /** * 待查詢的貓信息 */ private List<Cat> catList; /** * 待查詢的狗信息 通過(guò)注解來(lái)明確關(guān)聯(lián)關(guān)系 */ @CustomAnnotation.connectTable(tablePath = 'com.study.customdatatransfer.Pig') private List<Dog> dogList; /** * 待查詢的豬信息 */ @Ignore private List<Pig> pigList;

2,新建參數(shù)關(guān)系類(lèi)

公共參數(shù)關(guān)系類(lèi)

/** * 這里為共通參數(shù)信息設(shè)置 * @author jieya */@Data@AllArgsConstructor@NoArgsConstructorpublic class CommonParameterDTO { /** * =============================================================== * 這里配置所有集合查詢的公共查詢條件 * =============================================================== */ /** * 主鍵信息 */ public String id;}

自定義查詢參數(shù)

/** * 自定義查詢條件及關(guān)聯(lián)表信息查詢實(shí)體對(duì)象 * @author Administrator */@Data@AllArgsConstructor@NoArgsConstructorpublic class TableAndParamsDTO { /** * 主表名 這里是查詢那個(gè)實(shí)體對(duì)象的數(shù)據(jù),這里的table值一定要和CustomDataTransferDTO中的List的泛型對(duì)上 */ @CustomAnnotation.Table private String table; /** * =============================================================== * 自定義參數(shù) * =============================================================== */ /** * 自定義查詢參數(shù) search 標(biāo)記這是一個(gè)查詢參數(shù) */ @CustomAnnotation.search private String food; /** * connectSearchTerm(term = 'id') 這個(gè)標(biāo)記為這是連表查詢的副表,主表的id等于副表的pid */ @CustomAnnotation.connectSearchTerm(term = 'id') private String pid;}

新建自定義處理主方法

/** * 自定義數(shù)據(jù)處理主方法 * * @author Administrator */public class CustomDataMain { private static final List<Cat> catList = new ArrayList<>(); private static final List<Dog> dogList = new ArrayList<>(); private static final List<Pig> pigList = new ArrayList<>(); private static List<TableAndParamsDTO> tableAndParamsList = new ArrayList(); private static CommonParameterDTO commonParameter = new CommonParameterDTO(); static {catList.add(new Cat('1', '面包1', '10', '12'));catList.add(new Cat('2', '面包2', '10', '12'));catList.add(new Cat('3', '面包3', '10', '12'));catList.add(new Cat('4', '面包4', '10', '12'));dogList.add(new Dog('1', '米飯1', '10', '12'));dogList.add(new Dog('2', '米飯2', '10', '12'));dogList.add(new Dog('3', '米飯3', '10', '12'));dogList.add(new Dog('4', '米飯4', '10', '12'));pigList.add(new Pig('1', '麻辣燙1', '10', '12', '1'));pigList.add(new Pig('2', '麻辣燙2', '10', '12', '2'));pigList.add(new Pig('3', '麻辣燙3', '10', '12', '3'));pigList.add(new Pig('4', '麻辣燙4', '10', '12', '4')); } public static void main(String[] args) throws Exception {// 共通參數(shù)commonParameter.setId('1');//TableAndParamsDTO tableAndParamsDTO = new TableAndParamsDTO();tableAndParamsDTO.setTable('Pig');tableAndParamsDTO.setFood('麻辣燙1');tableAndParamsDTO.setPid('id');tableAndParamsList.add(tableAndParamsDTO);findCustomData(CustomDataTransferDTO.class); } public static Object findCustomData(Class<?> clazz) throws Exception {// 實(shí)例化數(shù)據(jù)傳輸類(lèi)Object obj = clazz.newInstance();// 首先得到pojo所定義的字段Field[] fields = clazz.getDeclaredFields();for (Field curField : fields) { // 設(shè)置字段可訪問(wèn)(必須,否則報(bào)錯(cuò)) curField.setAccessible(true); // 如果 if (!curField.isAnnotationPresent(Ignore.class)) {CustomAnnotation.connectTable annotation = curField.getAnnotation(CustomAnnotation.connectTable.class);String sideTablePath = null;if (annotation != null) { sideTablePath = annotation.tablePath();}Class<?> curFieldType = curField.getType();// 集合List元素if (curFieldType.equals(List.class)) { // 當(dāng)前集合的泛型類(lèi)型 Type genericType = curField.getGenericType(); if (null == genericType) {continue; } if (genericType instanceof ParameterizedType) {ParameterizedType pt = (ParameterizedType) genericType;// 得到泛型里的class類(lèi)型對(duì)象Class<?> actualTypeArgument = (Class<?>) pt.getActualTypeArguments()[0];// 獲取完整路徑信息String tablePath = actualTypeArgument.getName();// 獲取實(shí)體對(duì)象名稱String tableName = actualTypeArgument.getSimpleName();// 獲取該實(shí)體對(duì)象設(shè)置的自定義信息TableAndParamsDTO tableAndParams = tableAndParamsList.stream().filter(o -> o.getTable().equals(tableName)).findAny().orElse(null);// 拼接hql和執(zhí)行獲取數(shù)據(jù)obj = connectSqlAndExexute(obj, clazz, tablePath, tableAndParams, sideTablePath); }} else { System.out.println(curField.getName() + '--暫不支持的類(lèi)型--' + curFieldType.getSimpleName());} } else {System.out.println('Ignore----'); }}return null; } /** * 連接sql并獲取數(shù)據(jù) * * @param obj * @param clazz * @param tablePath * @param tableAndParams * @param sideTablePath * @return * @throws Exception */ private static Object connectSqlAndExexute(Object obj, Class<?> clazz, String tablePath, TableAndParamsDTO tableAndParams, String sideTablePath) throws Exception {int lastIndex = tablePath.lastIndexOf('.');String tableName = tablePath.substring(lastIndex + 1);List<Object> param = new ArrayList<>();// 查詢語(yǔ)句StringBuilder selectBuilder = new StringBuilder(' select * from ' + tableName + ' where 1=1');// 查詢條件StringBuilder whereBuilder = new StringBuilder();// 拼接共通參數(shù)if (commonParameter != null) { // 拼接共通參數(shù) Field[] fields = commonParameter.getClass().getDeclaredFields(); for (Field curField : fields) {// 設(shè)置字段可訪問(wèn)(必須,否則報(bào)錯(cuò))curField.setAccessible(true);String name = curField.getName();whereBuilder.append(' and ' + name + '=?');Object vlaue = ReflectionUtil.getVlaue(commonParameter, name, '');param.add(vlaue); }}// 如果設(shè)置了表和特殊參數(shù)則按照特殊情況處理,否則使用共通參數(shù)拼接條件if (tableAndParams != null) { // 遍歷該實(shí)體對(duì)象設(shè)置的配置信息 // 獲取主表 String table = tableAndParams.getTable(); // 拼接自定義經(jīng)營(yíng)范圍 Field[] fields = tableAndParams.getClass().getDeclaredFields(); for (Field field : fields) {// 判斷是否為查詢條件if (field.isAnnotationPresent(CustomAnnotation.search.class)) { whereBuilder.append(' and ' + field.getName() + '=?'); Object vlaue = ReflectionUtil.getVlaue(tableAndParams, field.getName(), ''); param.add(vlaue);}// 關(guān)聯(lián)查詢if (field.isAnnotationPresent(CustomAnnotation.connectSearchTerm.class)) { String name = field.getName(); String values = GsUtils.blankNull(ReflectionUtil.getVlaue(tableAndParams, name, '')); String[] split = values.split(','); String sideWhere = ''; for (int i = 0; i < split.length; i++) {sideWhere += ' and ' + name + ' in(';sideWhere += '’' + split[i] + '’' + ','; } ; sideWhere = sideWhere.substring(0, sideWhere.length() - 1); sideWhere += ' )'; whereBuilder.append(sideWhere);} }}// 獲取查詢對(duì)象的class對(duì)象Class tableClazz = Class.forName(tablePath);// hql不為空和hql中不包含and符號(hào)時(shí),禁止執(zhí)行sql,防止全庫(kù)掃描if (StringUtils.isEmpty(whereBuilder.toString())) { throw new Exception('hql錯(cuò)誤,因不存在and查詢條件,會(huì)導(dǎo)致全庫(kù)掃描' + selectBuilder.toString());}// TODO 執(zhí)行sql 將查詢到數(shù)據(jù)封裝到list<bean>對(duì)象中// List list = baseDao.findByHql(selectBuilder.toString()+whereBuilder.toString(),tableClazz,param);// TODO 這段代碼為無(wú)用的為獲取數(shù)據(jù)的代碼List list = findDataInfo(tableName,whereBuilder,param);// 將查詢到的信息添加到傳輸文件實(shí)體對(duì)象中if (list != null && list.size() > 0) { obj = ReflectionUtil.setValue(obj, clazz, tableName, list);}// 連表查詢if (sideTablePath != null) { String sideTableName = Class.forName(sideTablePath).getSimpleName(); // 獲取該實(shí)體對(duì)象設(shè)置的自定義信息 TableAndParamsDTO sideTableAndParams = tableAndParamsList.stream().filter(o -> o.getTable().equals(sideTableName)).findAny().orElse(null); // 拼接自定義經(jīng)營(yíng)范圍 Field[] sideFields = sideTableAndParams.getClass().getDeclaredFields(); for (Field field : sideFields) {// 關(guān)聯(lián)查詢if (field.isAnnotationPresent(CustomAnnotation.connectSearchTerm.class)) { String term = field.getAnnotation(CustomAnnotation.connectSearchTerm.class).term(); String sideParam = ''; for (Object obj1 : list) {Object value = ReflectionUtil.getVlaue(obj1, (String) term, '');if (value != null) { sideParam += value + ',';} } if (StringUtils.isEmpty(sideParam)) {throw new Exception('關(guān)聯(lián)表但為獲取到關(guān)聯(lián)條件信息' + selectBuilder.toString()); } // 將值設(shè)置到對(duì)象中 field.setAccessible(true); field.set(sideTableAndParams, sideParam);} } // 拼接hql和執(zhí)行獲取數(shù)據(jù) obj = connectSqlAndExexute(obj, clazz, sideTablePath, sideTableAndParams, null);}System.out.println('tableAndParams:' + tableAndParams + 'commonParams:' + commonParameter + '執(zhí)行sql語(yǔ)句:' + selectBuilder.toString() + whereBuilder.toString() + '查詢條件:' + param + '查詢結(jié)果:' + list);return obj; } private static List findDataInfo(String tableName, StringBuilder whereBuilder, List<Object> param) {List<Object> list = new ArrayList<Object>();if('Cat'.equals(tableName)){ list.add(catList.get(0)); return list;}if('Dog'.equals(tableName)){ list.add(dogList.get(0)); return list;}return list; }}

執(zhí)行完成之后,就可以獲取到咱們需要的數(shù)據(jù)了。

4.獲取到數(shù)據(jù)后,發(fā)送給另一端,進(jìn)行解析保存

/** * 保存待處理數(shù)據(jù) * * @param obj */ @Override public void saveOtherInfo(Object obj) throws Exception {// 首先得到pojo所定義的字段Field[] fields = obj.getClass().getDeclaredFields();for (Field curField : fields) { // 設(shè)置字段可訪問(wèn)(必須,否則報(bào)錯(cuò)) curField.setAccessible(true); Class<?> curFieldType = curField.getType(); // 集合List元素 if (curFieldType.equals(List.class)) {// 當(dāng)前集合的泛型類(lèi)型Type genericType = curField.getGenericType();if (null == genericType) { continue;}if (genericType instanceof ParameterizedType) { Object object = ReflectionUtil.getVlaue(obj,(String) curField.getName(),''); if(object!=null){List list = (List)object;for (int i=0;i<list.size();i++){ Object o = list.get(i);// baseDao.saveOrUpdate(o);} }} }else{System.out.println((curField.getName() + '--暫不支持的類(lèi)型--' + curFieldType.getSimpleName())); }} }

這樣兩端進(jìn)行數(shù)據(jù)傳輸就完成了,或中間使用消息中間件進(jìn)行傳輸也是可以的。

以上就是利用Java實(shí)體bean對(duì)象批量數(shù)據(jù)傳輸處理的詳細(xì)內(nèi)容,更多關(guān)于java bean對(duì)象數(shù)據(jù)傳輸?shù)馁Y料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
国产一区二区网址| 国产欧美一区二区三区鸳鸯浴 | 中文成人av在线| 成人av高清在线| 日韩欧美一区二区视频| 国产一区二区三区四区在线观看| 久久精品在线| 亚洲欧美综合| 久久久国产精品不卡| 国产成人精品亚洲777人妖| 欧美卡1卡2卡| 国产精品一区在线观看你懂的| 欧美性淫爽ww久久久久无| 视频一区二区三区在线| 久久精品日产第一区二区| 午夜久久福利影院| 在线免费观看日本一区| 精品一区二区三区欧美| 欧美精品第1页| 国产精品99久久久久久有的能看| 日韩视频在线你懂得| 99天天综合性| 欧美韩国一区二区| 国语自产精品视频在线看抢先版结局 | 美女网站在线免费欧美精品| 久久综合图片| 免费观看日韩电影| 欧美日韩激情在线| 国产精品中文字幕日韩精品| 日韩一区二区麻豆国产| 成人app软件下载大全免费| 精品国产乱码久久久久久闺蜜| 成人黄色在线视频| 久久免费午夜影院| 欧美永久精品| 日韩理论片网站| 国产精品欧美久久| 日本不卡视频在线| 91精品欧美综合在线观看最新| 国产·精品毛片| 久久精品欧美一区二区三区麻豆| 韩日成人在线| 亚洲一区二区三区影院| 欧美在线你懂得| 国产一区二区三区久久久| 精品少妇一区二区三区视频免付费 | 蜜臀av性久久久久蜜臀aⅴ流畅| 国产精品区一区| 美脚の诱脚舐め脚责91| 日韩欧美你懂的| 国产在线成人| 天堂一区二区在线| 9191成人精品久久| 午夜久久99| 亚洲国产精品久久一线不卡| 欧美在线免费视屏| av在线综合网| 亚洲另类春色校园小说| 欧美综合一区二区| 波多野结衣欧美| 亚洲免费观看高清完整版在线观看熊| 久久一区精品| 国产成人免费视频网站高清观看视频| 国产亚洲女人久久久久毛片| 亚洲精品欧洲精品| 蜜桃av一区二区| 久久午夜色播影院免费高清| 亚洲看片免费| 麻豆精品视频在线观看| 精品动漫一区二区三区在线观看| 99国产精品久久久久久久成人热 | 欧美剧在线免费观看网站| 99久久777色| 一区二区三区在线免费观看| 欧美日韩dvd在线观看| 欧美激情日韩| 青青草伊人久久| 国产亚洲美州欧州综合国| 久久天天综合| 91亚洲国产成人精品一区二三 | 日韩国产精品久久久久久亚洲| 日韩视频一区二区三区在线播放| 亚洲一二三区在线| 人人爽香蕉精品| 国产欧美一区二区精品仙草咪 | 精品久久久影院| 亚洲国产一区二区在线| 精品一区二区精品| 最新高清无码专区| 91麻豆精品国产91久久久更新时间| 国产一区二区无遮挡| 一区二区三区免费看视频| 日韩免费在线观看| 美女日韩在线中文字幕| a亚洲天堂av| 日韩专区在线视频| 欧美激情综合网| 欧美日韩情趣电影| 亚洲看片免费| www.亚洲国产| 图片区小说区国产精品视频| 国产色婷婷亚洲99精品小说| 在线日韩av片| 亚洲国产欧美国产综合一区 | 亚欧色一区w666天堂| 久久蜜桃av一区精品变态类天堂| 美女成人午夜| 欧美午夜精品久久久久免费视| 国精产品一区一区三区mba桃花 | gogogo免费视频观看亚洲一| 性做久久久久久久久| 久久久av毛片精品| 欧美日韩五月天| 中文精品视频| 欧美日韩在线精品一区二区三区| 精品午夜久久福利影院 | 欧美阿v一级看视频| 免费一区二区视频| 亚洲天堂免费看| 日韩精品一区国产麻豆| 久久综合伊人77777麻豆| 亚洲天堂久久| 99国产精品99久久久久久| 青青草视频一区| 亚洲欧美另类久久久精品2019| 日韩欧美视频在线| 欧美性猛交xxxx黑人交| 亚洲一区二区精品在线| 欧美另类视频在线| 懂色av一区二区三区免费看| 五月天国产精品| 依依成人精品视频| 国产香蕉久久精品综合网| 欧美军同video69gay| 一本色道久久综合狠狠躁的推荐| 亚洲国产成人不卡| 91捆绑美女网站| 国产suv精品一区二区三区| 日韩激情av在线| 国产日韩精品一区二区三区在线| 欧美日韩在线播放三区四区| 亚洲免费在线精品一区| 怡红院精品视频在线观看极品| 99精品久久99久久久久| 国产乱人伦偷精品视频免下载| 日韩在线卡一卡二| 亚洲精品高清在线| 国产精品色在线观看| 久久久久久久综合狠狠综合| 日韩欧美综合一区| 欧美高清精品3d| 欧洲中文字幕精品| 欧美中文日韩| 亚洲一区二区三区涩| 亚洲看片一区| 亚洲东热激情| 国产自产精品| 欧美久久久久久久| 欧美激情91| 欧美一区二区三区四区夜夜大片| 成人自拍视频在线观看| 国产精品一区二区三区乱码| 国产一区二区三区四区五区入口| 久久99国产精品尤物| 另类成人小视频在线| 久久精品国产免费| 久久国内精品自在自线400部| 五月激情综合婷婷| 丝袜诱惑亚洲看片| 日韩福利视频网| 日韩精品色哟哟| 秋霞成人午夜伦在线观看| 蜜桃av噜噜一区| 狠狠色丁香婷婷综合| 国产伦精一区二区三区| 国产精品99久久久久久久女警| 国产精品1024| 成人久久视频在线观看| av激情成人网| 欧美日韩在线播放一区二区| 在线看片日韩| 亚洲一区图片| 在线观看欧美日本| 欧美年轻男男videosbes| 日韩欧美一级二级三级久久久| 日韩欧美第一区| 精品国产亚洲在线| 久久精品亚洲乱码伦伦中文| 亚洲国产精品国自产拍av| 成人免费在线视频| 亚洲一区二区三区四区在线观看 | 午夜影视日本亚洲欧洲精品| 亚洲国产美女搞黄色| 日本亚洲视频在线| 亚洲国产成人精品视频| 麻豆成人久久精品二区三区红 | 日韩精品一级中文字幕精品视频免费观看 | 亚洲国产一区二区三区| 亚洲成人中文在线| 男女男精品视频网|