java编程中的问题及解决问题

2024-06-21 17:18

本文主要是介绍java编程中的问题及解决问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 ibatis中是否定义可重用的列名?例<sql id="COLUMN_LIST">id, age, name</sql>

原因:如果定义这个,可以使得编写的sql可重用,但是多人开发可能 会使得修改会产生新的问题,如果某个人添加了一些字段在COLUMN_LIST中,那么之前写的sql语句就会发生错误,所以这里涉及到开发人员对可重用的理解与重用部分修改的考虑。

答:可以定义,但名称应该更加明确,<sql id="INSERT_COLUMN_LIST">,<sql id="SELECT_COLUMN_LIST">...,

而且开发者之间需要达成共识:对于该部分的修改,需要考虑其它现有部分的功能,如果实在无法重用,重新建立列名集合,不以修改为扩展,以添加为扩展


2 表结构对应实体的维护,项目中经常定义了一个表结构对应的实体,但随着项目的进展,需要新的实体对象,大多数的时候我们都是在原有实体中添加字段来达到我们的要求,这样引发了一个问题:一个实体不再只表示一种含义,它跟多个部分进行耦合,这样导致代码很难理解,而且对于实体的含义很难有确切的定义。但如果不这么做,我们需要对用到的属性进行再次封装,这样使得实体越来越多,有些实体之间的属性相差不大,导致属性冗余,有没有一种好的解决方案来解决实体的可重用问题?(暂时没有找到解决方案


3 DAO层是否需要接口,在很多项目中,我们都没有那么复杂的业务,DAO层往往我们只写一个实现就可以实现功能,但按照接口编程的思想,我们需要面向接口编程,这种情况下,我们是否需要面向接口编程?

答:如果项目的功能很单一,不会涉及迁移数据库等其它多DAO的实现,那么按照项目的开发进度,可以不写DAO层接口。但是,如果你是一个目光长远的人,你就应该面向接口编程,但面临新需求时,可以适应扩展,而不是修改原有代码,导致一些不可预见的bug。


4 数据库表中是否需要设置外键关系?在项目中,很多时候都没有对表与表之间设置外键关系,而是通过查询的时候进行关联查询就好了,是一种软关联,是否需要设置物理上的外键关联?

答:大多数时候需要设置物理上的外键关联,因为这样可以限制数据库的数据的完整性,有些不设置外键关系的考虑是:减少DBMS对外键关系数据的校验;具有更加灵活的数据操作。在我看来,数据之前通过外键进行关联是很必要的,这样保证数据的完整性,也使得数据的含义更加明显。


5 mysql中建立索引可以使得查询速度提升很多,那么如何使用索引呢,是每个查询的条件设置索引?在项目中如果不使用索引,会导致查询会全表扫描。

答:固定长度的字段可以设置索引 ,order by的字段可以设置索引,但不滥用索引。


6 数据库中join多个表时,按照mysql优化来说,它会将查询结果少的当作驱动表,以驱动表为基础来关联其它表,这样可以使得数据操作更少,速度更快,我们也可以手动设置驱动表:left join,而且如果order by 的字段不是驱动表的字段,则会产生临时表,速度会很慢。

答:在不知道那个表的数据多和少的情况下,最好不要手动设置驱动表,除非你很确定。


7 前台传递参数到后台,怎么封装json数据?目前的做法是:封装数据到form表单中,通过表单的序列化: form.serialize() 来获取json数据,有没有直接封装json的工具,可以直接封装想要的json数据。

答:需要其它js的支持,例如json2.js支持(https://github.com/douglascrockford/JSON-js)


8 后台接收前台传递的参数,是使用实体对象接收还是使用Map来接收?很多时候,传递的参数很少,且现有的实体不支持,是否新建新的实体来接收参数还是使用Map来接收?

答:大多数都是通过实体对象来接收,如果传递的参数具有很明显的规律或特征,那么使用Map来封装,可以减少封装的实体,且具有很明显的含义。


9 ibatis批量插入时传递的对象是使用Map还是使用封装集合的实体对象?

答: 这个时候使用Map会比较简单,可以减少实体并且灵活性会比较好,只要往里面加集合数据就好,具有一定的可重用性。


10 mysql查询时如何不区分大小写?

查询时指定collation : SELECT * FROM case_test WHERE word COLLATE utf8_bin LIKE 'F%'; 

上述可以区分大小写,但首尾空格还是无法区分,为了精准查询,可以使用SELECT * FROM case_test WHERE BINARY word LIKE 'F%'。 


11 当涉及多个数据库或多个表结构时,各个表结构的对应的实体相差不大,我们是否需要将一个表的实体适配到另一个表的实体上?

答:为了后期的维护与解耦合,我们需要将实体进行适配,这就相当于进行接口适配一样。


12 有些时候,当编写某个service时,发现其耦合了其它service,即在serviceA中使用了serviceB的方法,按照三层架构,service访问的是DAO的方法,直接耦合其它service是一种好的方法吗?还是需要在其它DAO中再定义一些方法进行实现。

答:首先service耦合service,在业务和模块划分明确的情况下是可以这样做的,因为内部紧密耦合是可以的,同层和Service-DAO层的耦合是可以的,但绝不允许直接在非DAO和Service中直接引用DAO,这会造成严重的耦合,导致业务无法扩展。


13 使用辅助表进行ID自增的时候,如果我们需要执行批量插入,那么需要先获取到相应的主键ID,然后才能执行批量插入,这样会造成性能问题,如何解决呢?暂时没有更好的解决方案

答: 首先获取一次主键值,然后将设置主键值为当前主键值+列表的长度,这样就可以确定主键,也不会影响主键的唯一性,需要写一个存储过程来实现。


14 ibatis批量插入的实现,有两种方式,一种是通过startBatch和executeBatch来实现,还有一种就是通过在xml中配置<iterate>来实现,两种方式哪种更好呢?

答:从性能上来看,使用在xml中配置<iterate>来实现更快,尤其是数据量较大时,所以使用xml配置更好。


15 有些人会觉得能用sql语句解决的就不用java代码来实现,而有些人觉得能用java代码解决的就不用sql,对此你怎么看?

答:我个人觉得两者各有其特点,不能一概而论,sql语句适合处理表之间数据的转移和查找,而java代码适合对复杂逻辑进行处理,如果使用mysql进行一些复杂逻辑的判断,那么不仅占用数据库资源,更会造成数据并发程度降低,java代码的优点是,数据结构丰富,逻辑处理能力比较强。


16 jsp中判断数据是否存在的依据:判断是否为null,或集合数据长度是否为0,这就牵扯出数据初始化的问题,集合数据初始化为长度为0的还是null?

答:个人比较推荐初始化为null,减少不必要的资源浪费,在有些通信场景就可能需要进行初始化为默认数据或长度为0的数据。


以后将持续更新问题!!!!

有些问题,可能暂时还没有找到解决方案,如果哪位读者有解决方案或更好的方案,可以在评论区留言。


这篇关于java编程中的问题及解决问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1081838

相关文章

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

java.sql.SQLTransientConnectionException连接超时异常原因及解决方案

《java.sql.SQLTransientConnectionException连接超时异常原因及解决方案》:本文主要介绍java.sql.SQLTransientConnectionExcep... 目录一、引言二、异常信息分析三、可能的原因3.1 连接池配置不合理3.2 数据库负载过高3.3 连接泄漏

javacv依赖太大导致jar包也大的解决办法

《javacv依赖太大导致jar包也大的解决办法》随着项目的复杂度和依赖关系的增加,打包后的JAR包可能会变得很大,:本文主要介绍javacv依赖太大导致jar包也大的解决办法,文中通过代码介绍的... 目录前言1.检查依赖2.更改依赖3.检查副依赖总结 前言最近在写项目时,用到了Javacv里的获取视频

Java实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima

SpringBoot全局域名替换的实现

《SpringBoot全局域名替换的实现》本文主要介绍了SpringBoot全局域名替换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录 项目结构⚙️ 配置文件application.yml️ 配置类AppProperties.Ja