O/R Mapping自己开发 Step II

本文探讨了在ORM中如何解析SQL语句,包括Insert、Update、Remove和Select等操作,并详细介绍了在解析过程中需要注意的关键点,例如如何处理主键、版本控制字段及时间戳等。

 上次说到Bean的定义,这次来说说怎么解析。

SQL有几种,Insert,Update,Remove。

Insert解析起来比较简单,如果你定义的主键为null的话,你就可以认为需要解析Insert语句了。至于主键怎么判断为null,很遗憾,我也不能给出完全的答案。 我是使用OID作为唯一关键字的,如果你使用了复合主键,那么没办法,你需要显示声明Insert方法了。

解析Insert语句无非就是注意一下AutoIncrement字段怎么生成,Version怎么生成,Timestamp怎么生成。

autoincrement在Oracle下面是先执行一句select ?.nextval from dual, 拿到这个值设置到Bean里面,然后作为一般字段解析就OK了. version字段么,新建是1, timestamp只要用服务器时间就行.

Update需要注意的问题是你需要知道主键字段是哪几个,因为Where语句是使用主键的值来定位的. 剩下的就是Version和timestamp字段. version++, timestamp使用当前的服务器时间. 如果有version或者timestamp的话也需要加入到where语句中. 如果executeUpdate返回0,那么很遗憾,要么数据已经被删除,要么是版本号或者时间戳不对.这个时候看你的需求,正常的话应该再发一句where子句中只有主键的语句,如果有结果,那么是版本号或者时间戳已经被更改,也就是说当前的数据过期了. 没有结果就是数据已经被删除.

Remove最简单, 使用主键作为条件删就是了. 如果有Version或者Timestamp,那么处理方式和Update一样. 需要注意的是Oracle用Delete from,而SQL Server用Delete * from, 这个时候SQLBuilder的不同实现就有用了.

至于SELECT,这个比较复杂, 这里先说知道主键的查询, 条件查询以后专门说.

其实知道主键的查询也不用多说了,这个实在是简单的厉害....

如上所说, 在解析SQL的时候你必须知道如何获取/设置Field的值. 用上一篇文章里面的代码做个例子. Car有几个属性, 我们无从知晓. 所以使用bean.getClass().getDeclaredMethods(), 拿到所有的Getter/Setter. 需要注意一下Getter包括以"is"和"get"开头的方法, 因为boolean型的参数的Getter通常使用is开头.

拿到这些方法以后我们需要分析一下什么才是和数据库对应的Field, 当然只要和你已经缓存的Bean的声明(Annotation/XML)比较一下一切都十分明了了. 之所以要比较是因为Bean不一定只有关于数据库Column的Getter/Setter, 比如每个类都有的getClass()方法,和数据库一点关系没有. 当然也有人会在Car里面写一个getPrice()方法也不一定, 而这个方法说不定是有其他用途的.

拿到这些方法以后只要动用reflect一切都OK了. 至于reflect,我就不说了.

写到这里, 单表的CRUD都已经解决了. 这里说的都是思路, 真正写代码或许已经上百个类出来了. :)

如果大家觉得什么地方需要一些源代码, 我以后可以写一些例子.

 

libraries/libs/libsodium/libsodium_la-crypto_pwhash.o libraries/libs/libsodium/libsodium_la-pbkdf2-sha256.o libraries/libs/libsodium/libsodium_la-verify.o libraries/libs/libsodium/libsodium_la-aegis128l_soft.o libraries/libs/libsodium/libsodium_la-pwhash_argon2id.o libraries/libs/libsodium/libsodium_la-crypto_auth.o libraries/libs/libsodium/libsodium_la-aead_aes256gcm.o libraries/libs/libsodium/libsodium_la-aead_aegis128l.o libraries/libs/libsodium/libsodium_la-crypto_onetimeauth.o libraries/libs/libsodium/libsodium_la-crypto_kx.o libraries/libs/libsodium/libsodium_la-salsa20_ref.o libraries/libs/libsodium/libsodium_la-auth_hmacsha256.o libraries/libs/libsodium/libsodium_la-aead_xchacha20poly1305.o libraries/libs/libsodium/libsodium_la-core_hchacha20.o libraries/libs/libsodium/libsodium_la-randombytes.o libraries/libs/libsodium/libsodium_la-hash_sha512_cp.o libraries/libs/libsodium/libsodium_la-crypto_box_seal.o libraries/libs/libsodium/libsodium_la-core_hsalsa20.o libraries/libs/libsodium/libaesni_la-aegis256_aesni.o libraries/libs/libsodium/libsodium_la-secretbox_xsalsa20poly1305.o libraries/libs/libsodium/libsodium_la-stream_salsa208_ref.o libraries/libs/libsodium/libaesni_la-aegis128l_aesni.o libraries/libs/libsodium/libsodium_la-crypto_generichash.o libraries/libs/libsodium/libsodium_la-kdf_hkdf_sha512.o libraries/libs/libsodium/libsodium_la-crypto_secretbox_easy.o libraries/libs/libsodium/libsodium_la-generichash_blake2.o libraries/libs/libsodium/libavx2_la-chacha20_dolbeau-avx2.o libraries/libs/libsodium/libsodium_la-pwhash_scryptsalsa208sha256_nosse.o libraries/libs/libsodium/libsodium_la-argon2.o libraries/libs/libsodium/libsodium_la-secretstream_xchacha20poly1305.o libraries/libs/libsodium/libsodium_la-core.o libraries/libs/libsodium/libsodium_la-version.o libraries/libs/libsodium/librdrand_la-randombytes_internal_random.o libraries/libs/libsodium/libssse3_la-chacha20_dolbeau-ssse3.o libraries/libs/libsodium/libsodium_la-crypto_scalarmult.o libraries/libs/libsodium/libsodium_la-box_curve25519xchacha20poly1305.o libraries/libs/libsodium/libsse2_la-poly1305_sse2.o libraries/libs/libsodium/libsodium_la-chacha20_ref.o libraries/libs/libsodium/libsodium_la-sign.o libraries/libs/libsodium/libsse41_la-blake2b-compress-sse41.o libraries/libs/libsodium/libsodium_la-crypto_sign.o libraries/libs/libsodium/libsodium_la-x25519_ref10.o libraries/libs/libsodium/libsodium_la-blake2b-long.o libraries/libs/libsodium/libsodium_la-core_ristretto255.o libraries/libs/libds/ds_convert.o libraries/libs/libds/ds_blob_data.o libraries/libs/libds/ds_module_ctrl.o libraries/libs/libds/ds_trans_ctrl.o libraries/libs/libds/ds_flash.o libraries/libs/libds/ds_slp_parser.o libraries/libs/libds/ds_model.o libraries/libs/libds/ds_diag.o libraries/libs/libds/ds_module.o libraries/libs/libds/ds_trans_rule.o libraries/ams/vdr_vd_dla/vdr_vd_dla_data_model.o libraries/ams/vdr_vd_dla/vdr_vd_dla.o libraries/ams/sub_vframe/sub_vframe.o libraries/ams/sub_vframe/sub_vframe_sys_config.o libraries/ams/vdr_aod_w/vdr_aod_w.o libraries/ams/vdr_aod_w/vdr_aod_data_model_w.o libraries/ams/vdr_aod_w/fg_mog.o libraries/ams/lr_enhance/lr_enhance.o libraries/ams/vdr_od_bgm_w/vdr_od_bgm_w_data_model.o libraries/ams/vdr_od_bgm_w/vdr_od_bgm_w_img.o libraries/ams/vdr_od_bgm_w/vdr_od_bgm_w.o libraries/ams/vdr_smart_box/vdr_smart_box.o libraries/ams/vdr_er/vdr_er_data_model.o libraries/ams/vdr_er/vdr_er.o libraries/ams/object/object_info.o libraries/ams/object/object.o libraries/ams/object/slice_info.o libraries/ams/object/object_sys_config.o libraries/ams/object/dust_detection.o libraries/ams/object/object_detection.o libraries/ams/vdr_pd_dla/vdr_pd_dla.o libraries/ams/vdr_pd_dla/vdr_pd_dla_data_model.o libraries/ams/gmm/gmm_sys_config.o libraries/ams/gmm/gmm.o libraries/ams/id_enhance/id_enhance.o libraries/ams/fg_neon/fg_neon.o libraries/ams/md_enhance/md_enhance.o libraries/ams/er_enhance/er_enhance.o libraries/ams/aframe/aframe_sys_config.o libraries/ams/aframe/aframe.o libraries/ams/vframe/vframe_sys_config.o libraries/ams/vframe/vframe_desc.o libraries/ams/vframe/vframe.o libraries/ams/tpaecns/aqi_tpaecns.o libraries/ams/tpaecns/aecns_sys_config.o libraries/ams/vdr_tt/vdr_tt.o libraries/ams/vdr_tt/tt_object_queue.o libraries/ams/vdr_tt/vdr_tt_data_model.o libraries/ams/ns/nsTable.o libraries/ams/ns/audio_ns.o libraries/ams/ns/ns_routine_process.o libraries/ams/dla/dla_data_model.o libraries/ams/dla/dla.o libraries/ams/dla/dla_bg_cp.o libraries/ams/dla/dla_desc.o libraries/ams/aec/audio_aec.o libraries/ams/aec/noise_est_table.o libraries/ams/aec/time_delay_estimation.o libraries/ams/aec/noise_est_process.o libraries/ams/aec/noise_est.o libraries/ams/vdr_cd/vdr_cd.o libraries/ams/vdr_cd/vdr_cd_data_model.o libraries/ams/pd_common/vdr_pd_desc.o libraries/ams/vdr_lr/vdr_lr.o libraries/ams/vdr_lr/vdr_lr_data_model.o libraries/ams/tt_enhance/tt_enhance.o libraries/ams/tt_enhance/tt_desc.o libraries/ams/tt_enhance/tt_trajectory.o libraries/ams/fg_common/fg_sys_config.o libraries/ams/fg_common/fg_desc.o libraries/ams/vdr_utils/vdr_bitmap.o libraries/ams/vdr_utils/vdr_genbmp.o libraries/ams/vdr_utils/gmm_common.o libraries/ams/vdr_utils/vdr_matrix.o libraries/ams/vdr_utils/vdr_libjpeg.o libraries/ams/vdr_utils/hungarian.o libraries/ams/vdr_utils/vdr_sqrt.o libraries/ams/vdr_utils/mapping.o libraries/ams/vdr_utils/vdr_colorspace.o libraries/ams/vdr_utils/kalman_filter.o libraries/ams/vdr_utils/vdr_morph.o libraries/ams/vdr_utils/socket_test.o libraries/ams/vdr_utils/fast_blur.o libraries/ams/vdr_utils/vdr_bitmap_transform.o libraries/ams/vdr_utils/vdr_util.o libraries/ams/vdr_utils/vdr_math.o libraries/ams/vdr_utils/refine.o libraries/ams/vdr_utils/vdr_binary_morph.o libraries/ams/ams/vdr_list.o libraries/ams/ams/alg_trigger.o libraries/ams/ams/aqi_list.o libraries/ams/ams/post_proc_list.o libraries/ams/ams/ams.o libraries/ams/ams/vqi_list.o libraries/ams/ams/ams_sys_config.o libraries/ams/ams/data_driver_list.o libraries/ams/ams/ams_cmd.o libraries/ams/ams/adr_list.o libraries/ams/ams/alg_list.o libraries/ams/fg_hsv/fg_hsv_sys_config.o libraries/ams/fg_hsv/fg_hsv.o libraries/ams/audio_common/div.o libraries/ams/audio_common/audio_utils.o libraries/ams/audio_common/audio_filter.o libraries/ams/audio_common/audio_real_fft.o libraries/ams/audio_common/normData.o libraries/ams/audio_common/audio_ring_buffer.o libraries/ams/audio_common/audio_complex_fft.o libraries/ams/audio_common/math_operation.o libraries/ams/trajectory/trajectory_sys_config.o libraries/ams/trajectory/trajectory.o libraries/ams/vdr_id/vdr_id.o libraries/ams/vdr_id/vdr_id_data_model.o libraries/ams/trajectory_common/object_queue.o libraries/ams/trajectory_common/trajectory_update_common.o libraries/ams/trajectory_common/trajectory_common.o libraries/ams/bgm_common/bgm_sys_config_data_model.o libraries/ams/bgm_common/bgm.o libraries/ams/aad/aad.o libraries/ams/aad/aad_sys_config.o libraries/ams/cd_enhance/cd_enhance.o libraries/ams/vdr_md/vdr_md.o libraries/ams/vdr_md/vdr_md_data_model.o libraries/ams/vdr_md/vdr_cloud_md_data_model.o libraries/ams/dp_trajectory/dp_trajectory.o libraries/ams/dp_trajectory/dp_trajectory_sys_config.o libraries/mpp/isp_data_model/image_profile_model.o libraries/mpp/isp_data_model/audio_profile_model.o libraries/mpp/isp_data_model/isp_data_model.o libraries/mpp/fv_focus_test/fv_focus_test.o libraries/mpp/fv_focus_test/fv_data_model.o libraries/cap/usr_def_audio_alarm/usr_def_audio_alarm.o libraries/cap/md_alarm/md_alarm.o libraries/cap/vd_alarm/vd_alarm.o libraries/cap/image/image_data_model.o libraries/cap/image/image.o libraries/cap/image/image_utils.o libraries/cap/image/image_cmd.o libraries/cap/cd_alarm/cd.o libraries/cap/led_rule/led.o libraries/cap/led_rule/led_rule.o libraries/cap/unusual_detection/unusual_detection_model.o libraries/cap/od_alarm/od_alarm.o libraries/cap/lr_alarm/lr.o libraries/cap/id_alarm/id.o libraries/cap/cover/cover_data_model.o libraries/cap/cover/cover.o libraries/cap/record_plan/record_plan.o libraries/cap/record_plan/record_plan_ds.o libraries/cap/osd/osd.o libraries/cap/osd/tpcam_osd_control.o libraries/cap/osd/osd_ttf_len.o libraries/cap/osd/osd_data_model.o libraries/cap/sd_card/sd_card.o libraries/cap/aod_alarm/aod.o libraries/cap/ftp_record_plan/ftp_record_plan.o libraries/cap/er_alarm/er.o libraries/cap/hsr/hsr.o libraries/cap/dn_switch/dn_switch_cmd.o libraries/cap/dn_switch/dn_switch_process.o libraries/cap/dn_switch/dn_switch.o libraries/cap/dn_switch/dn_switch_buff.o libraries/cap/aad_alarm/aad.o libraries/cap/video/video_data_model.o libraries/cap/video/roi_data_model.o libraries/cap/cap/cap.o libraries/cap/speaker/speaker.o libraries/cap/speaker/speaker_data_model.o libraries/cap/speaker/language_data_model.o libraries/cap/speaker/audio_stream.o libraries/cap/msg_alarm/msg_alarm.o libraries/cap/msg_alarm/light_control.o -Lstaging_dir/target-arm-ca9-linux-uclibcgnueabihf-c540v3/usr/lib -Lstaging_dir/target-arm-ca9-linux-uclibcgnueabihf-c540v3/lib -fPIE -pie -Wl,-z,relro -Wl,-z,now -z noexecstack -L../sdk/soc/nvt9856x/uclibc-toolchain-10.4.0/arm-ca9-linux-uclibcgnueabihf-10.4.0/arm-ca9-linux-uclibcgnueabihf/sysroot/usr/lib -L../sdk/soc/nvt9856x/uclibc-toolchain-10.4.0/arm-ca9-linux-uclibcgnueabihf-10.4.0/arm-ca9-linux-uclibcgnueabihf/sysroot/lib -Lstaging_dir/target-arm-ca9-linux-uclibcgnueabihf-c540v3/usr/lib/libiconv-full/lib -Lstaging_dir/target-arm-ca9-linux-uclibcgnueabihf-c540v3/usr/lib/libintl-full/lib -Wl,--gc-sections -lidleworker -ldms_tool -ldms -lutils -lmbedtls -lmbedx509 -lmbedcrypto -ljson -lpthread -lm -ludt -ltptimer -Lstaging_dir/target-arm-ca9-linux-uclibcgnueabihf-c540v3/usr/lib/mpp/ -lhdal -lvendor_isp -lvos -lvendor_media -lprebuilt_ai -lvendor_ai2 -lvendor_ai2_pub -ldla -lwpactrl -Wl,-rpath-link=staging_dir/target-arm-ca9-linux-uclibcgnueabihf-c540v3/usr/lib" /var/lib/jenkins/workspace/VIGI/IPC_REPO_STQC_NT9856X_KERNEL_5_10_STQC/sdk/soc/nvt9856x/uclibc-toolchain-10.4.0/arm-ca9-linux-uclibcgnueabihf-10.4.0/bin/../lib/gcc/arm-ca9-linux-uclibcgnueabihf/10.4.0/../../../../arm-ca9-linux-uclibcgnueabihf/bin/ld: libraries/ams/tt_enhance/tt_enhance.o: in function `cal_motor_info_xy': /var/lib/jenkins/workspace/VIGI/IPC_REPO_STQC_NT9856X_KERNEL_5_10_STQC/nvmp/build_dir/target-arm-ca9-linux-uclibcgnueabihf-c540v3/ams/vdr/functional/tt_enhance/tt_enhance.c:71: undefined reference to `basic_get_cur_angel' collect2: error: ld returned 1 exit status  Makefile:61: recipe for target 'link_main' failed make[4]: *** [link_main] Error 1 make[4]: Leaving directory '/var/lib/jenkins/workspace/VIGI/IPC_REPO_STQC_NT9856X_KERNEL_5_10_STQC/nvmp/build_dir/target-arm-ca9-linux-uclibcgnueabihf-c540v3/main' Makefile:122: recipe for target '/var/lib/jenkins/workspace/VIGI/IPC_REPO_STQC_NT9856X_KERNEL_5_10_STQC/nvmp/build_dir/target-arm-ca9-linux-uclibcgnueabihf-c540v3/main/.built' failed make[3]: *** [/var/lib/jenkins/workspace/VIGI/IPC_REPO_STQC_NT9856X_KERNEL_5_10_STQC/nvmp/build_dir/target-arm-ca9-linux-uclibcgnueabihf-c540v3/main/.built] Error 2 make[3]: Leaving directory '/var/lib/jenkins/workspace/VIGI/IPC_REPO_STQC_NT9856X_KERNEL_5_10_STQC/nvmp/tp_package/main' package/Makefile:105: recipe for target 'package/tp_package/main/compile' failed make[2]: *** [package/tp_package/main/compile] Error 2 make[2]: Leaving directory '/var/lib/jenkins/workspace/VIGI/IPC_REPO_STQC_NT9856X_KERNEL_5_10_STQC/nvmp' package/Makefile:101: recipe for target '/var/lib/jenkins/workspace/VIGI/IPC_REPO_STQC_NT9856X_KERNEL_5_10_STQC/nvmp/staging_dir/target-arm-ca9-linux-uclibcgnueabihf-c540v3/stamp/.package_compile' failed make[1]: *** [/var/lib/jenkins/workspace/VIGI/IPC_REPO_STQC_NT9856X_KERNEL_5_10_STQC/nvmp/staging_dir/target-arm-ca9-linux-uclibcgnueabihf-c540v3/stamp/.package_compile] Error 2 make[1]: Leaving directory '/var/lib/jenkins/workspace/VIGI/IPC_REPO_STQC_NT9856X_KERNEL_5_10_STQC/nvmp' /var/lib/jenkins/workspace/VIGI/IPC_REPO_STQC_NT9856X_KERNEL_5_10_STQC/nvmp/include/toplevel.mk:203: recipe for target 'world' failed make: *** [world] Error 2 + signfw_vigi_2048_tmp 'bin/*-c540v3/*secure_up_boot*.bin' signfw_vigi_2048_tmp signfile outputfile Build step 'Execute shell' marked build as failure Archiving artifacts An attempt to send an e-mail to empty list of recipients, ignored. Finished: FAILURE
12-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值