java 项目结构 文件说明 潜规则 java入门

java 项目结构 潜规则 java入门

一、controller、service、serviceImpl、Mapper、Xml等文件的作用

下图为java约定俗成的几个文件的作用

二、在项目中的使用情况,由于业务逻辑很简单,所以每个文件中的代码行数都很少


controller.java

/*** 资产rim项目信息报表**/
@RequestMapping(value = "/hls/cus/rpt/rim/project/detail/query")
@ResponseBody
public ResponseData rptRimProjecrDetailQuery(@RequestBody Map map) {return new ResponseData(hlsCusRptRimProjectDetailService.rptRimProjectDetailQuery(map));
}


service.java

public interface HlsCusRptRimProjectDetailService extends IBaseService<HlsCusRptRimProjectDetail>,ProxySelf<HlsCusRptRimProjectDetailService> {List<Map> rptRimProjectDetailQuery(Map map);
}


serviceImpl.java

ConfigServiceImpl‌通常用于管理和配置系统的各种参数和设置。它可能涉及到从数据库或其他数据源中读取配置信息,并将这些信息缓存起来,以便应用程序能够快速访问这些配置而不需要每次都从数据源中查询。此外,ConfigServiceImpl还可能负责在应用程序启动时初始化这些配置,确保应用程序在运行过程中能够正确地使用这些配置信息。

在具体的实现中,ConfigServiceImpl可能会包含一些方法,如从数据库或其他数据源中读取配置信息、缓存这些信息、以及提供获取配置信息的接口等。例如,在Spring框架中,ConfigServiceImpl可能会使用Spring Boot的自动装配功能,将配置信息注入到应用程序的各个组件中,从而确保应用程序能够正确地运行。

此外,ConfigServiceImpl还可能涉及到对配置的动态更新和重新加载,以便在系统运行时能够适应环境的变化。这通常涉及到监听配置源的变化,并在检测到变化时更新缓存或重新加载配置信息。

总的来说,ConfigServiceImpl是一个重要的组件,它负责管理系统的配置信息,确保应用程序能够正确地运行并根据需要进行调整。通过缓存和动态加载配置信息,它提高了应用程序的灵活性和可维护性‌

@Override
public List<Map> rptRimProjectDetailQuery(Map map) {int page = Integer.parseInt(String.valueOf(map.get("page")));int pageSize = Integer.parseInt(String.valueOf(map.get("pageSize")));PageHelper.startPage(page,pageSize);return hlsCusRptRimProjectDetailMapper.rptRimProjectDetailQuery(map);
}


mapper.java

Mapper在Java中主要用于数据访问和操作。

Mapper在Java中扮演着重要的角色,尤其是在数据访问层。它主要涉及到以下几个方面:

  1. 数据访问接口定义‌:Mapper包中的接口通常与数据库中的表或实体对象对应,定义了增删改查等操作方法。这些方法通过SQL语句或ORM框架(如MyBatis)实现与数据库的交互‌1。

  2. 数据转换和映射‌:Mapper可以将输入数据从一种格式转换为另一种格式,或将一种结构映射到另一种结构。例如,将数据库查询结果转换为Java对象,或将XML数据转换为JSON格式‌2。

  3. 数据过滤和提取‌:Mapper可以根据指定的条件过滤输入数据,或从输入数据中提取所需的部分数据。例如,选择符合某些条件的数据库记录,或提取数据库记录中的某些字段‌2。

  4. 类型安全和解耦‌:Mapper接口使用Java类型来表示数据库表中的字段,提供了类型安全。同时,它将数据库操作与业务逻辑解耦,使得可以在不修改业务逻辑的情况下修改数据库操作,反之亦然‌3。

  5. 简化代码和提高可维护性‌:通过使用Mapper,可以避免在代码中编写大量的JDBC代码,如建立连接、创建Statement、处理ResultSet等。这些繁琐的代码被封装在底层实现中,使得开发人员只需关注SQL和业务逻辑,从而简化代码并提高代码的可维护性‌3。

  6. 可重用性和易于测试‌:Mapper接口只定义了数据库操作的接口,而不包含具体的业务逻辑,因此可以被多个服务或组件重用。此外,由于Mapper只包含数据库操作,因此可以更容易地进行单元测试或集成测试,使用Mock框架模拟数据库行为以测试Mapper的正确性‌3。

总的来说,Mapper在Java开发中是一个重要的组件,它帮助开发人员更有效地处理数据访问和转换的逻辑,从而提高应用程序的开发效率和可维护性。

public interface HlsCusRptRimProjectDetailMapper extends Mapper<HlsCusRptRimProjectDetail> {List<Map> rptRimProjectDetailQuery( Map<String, Object> map);// 资产rim表项目信息报表}


mapper.xml

<select id="rptRimProjectDetailQuery" resultMap="BaseResultMap">SELECTV.*,(case when V.REMAIN_PRINCIPAL > 0 then (V.REMAIN_PRINCIPAL - nvl((SELECT SUM(CCC.DUE_AMOUNT)FROM CON_CONTRACT_CASHFLOW CCCWHERE CCC.CONTRACT_ID = V.CONTRACT_IDAND CCC.CF_ITEM = 5),0)) else 0 end) as PROJECT_EXPOSUREFROM (SELECT--项目编号CC.PROJECT_CONTRACT_NUMBER PROJECT_NUMBER,-------------------------省略部分代码--------------------------- 项目核销申请日期(SELECT CCT.TERMINATION_DATEFROM CON_CONTRACT_TERMINATION CCTWHERE CCT.CONTRACT_ID = CC.CONTRACT_ID) TERMINATION_DATE,CC.BEFORE_RENT_FLAGFROM CON_CONTRACT CCLEFT JOIN PRJ_PROJECT PPON CC.PROJECT_ID = PP.PROJECT_IDWHEREcc.contract_status IN ('INCEPT', 'TERMINATE', 'ET')OR (CC.contract_status = 'SIGN' AND cc.before_rent_flag = 'Y')) V----------------下面写查询条件----------------------<where><if test="projectNumber !=null and projectNumber !=''">and v.project_number like concat(concat('%',#{projectNumber}),'%')</if><if test="businessType !=null and businessType.size() !=0">and v.business_type in<foreach item="item" index="index" collection="businessType" open="(" separator="," close=")">#{item}</foreach></if></where></select>


java类的包名是啥_java的(PO,VO,TO,BO,DAO,POJO)类名包名解释

VO:值对象、视图对象

PO:持久对象

QO:查询对象

DAO:数据访问对象——同时还有DAO模式

DTO:数据传输对象——同时还有DTO模式

DO全称:Data Object
用于封装DAO层中的对象,通过DAO层向上传输数据源对象。
数据对象:xxxDO,xxx即为数据表名。


例如有一个需求需要连接两个表查询,这样就没有一个实体可以接受查询结果了,这种情况下封装一个DO就是很好的解决办法。

PO:全称是persistant object持久对象最形象的理解就是一个PO就是数据库中的一条记录。好处是可以把一条记录作为一个对象处理,可以方便的转为其它对象。

BO:全称是business object:业务对象主要作用是把业务逻辑封装为一个对象。这个对象可以包括一个或多个其它的对象。比如一个简历,有教育经历、工作经历、社会关系等等。我们可以把教育经历对应一个PO,工作经历对应一个PO,社会关系对应一个PO。建立一个对应简历的BO对象处理简历,每个BO包含这些PO。这样处理业务逻辑时,我们就可以针对BO去处理。

VO :value object值对象ViewObject表现层对象主要对应界面显示的数据对象。对于一个WEB页面,或者SWT、SWING的一个界面,用一个VO对象对应整个界面的值。

DTO :Data Transfer Object数据传输对象主要用于远程调用等需要大量传输对象的地方。比如我们一张表有100个字段,那么对应的PO就有100个属性。但是我们界面上只要显示10个字段,客户端用WEB service来获取数据,没有必要把整个PO对象传递到客户端,这时我们就可以用只有这10个属性的DTO来传递结果到客户端,这样也不会暴露服务端表结构.到达客户端以后,如果用这个对象来对应界面显示,那此时它的身份就转为VO。

POJO :plain ordinary java object 简单java对象个人感觉POJO是最常见最多变的对象,是一个中间对象,也是我们最常打交道的对象。一个POJO持久化以后就是PO直接用它传递、传递过程中就是DTO直接用来对应表示层就是VO

DAO:data access object数据访问对象这个大家最熟悉,和上面几个O区别最大,基本没有互相转化的可能性和必要.主要用来封装对数据库的访问。通常和PO结合使用,DAO中包含了各种数据库的操作方法。它可以把POJO持久化为PO,用PO组装出来VO、DTO

java package 和import 区别

在Java中,packageimport是两个不同的概念,它们在Java程序的组织和依赖管理中扮演着不同的角色。

package(包)

  • 定义package是Java中用于组织类(classes)和接口(interfaces)的一种方式。通过包,我们可以将相关的类放在一起,从而实现更好的模块化和封装。包是Java命名空间的一部分,它帮助避免名称冲突,使得不同的包可以有相同的类名或接口名。
  • 作用
    • 提供了类的封装边界。
    • 实现了类的访问控制(通过包访问修饰符,如默认(包)访问级别)。
    • 便于类的查找和定位。
    • 有助于避免命名冲突。
  • 使用:在Java文件的开头,通过package关键字声明该类所在的包。例如,package com.example.myapp;

import(导入)

  • 定义import语句用于导入其他包中的类、接口或枚举,使得在当前Java文件中可以直接使用这些类、接口或枚举的名字,而不需要使用完整的包名加类名的形式。
  • 作用
    • 简化代码,减少重复的代码量。
    • 使得代码更加清晰、易于阅读和维护。
  • 使用:在Java文件的开头(位于package声明之后,如果有的话),通过import语句导入需要的类或接口。例如,import java.util.ArrayList;

区别总结

  • 目的不同package用于组织和封装Java中的类、接口等,而import用于在当前Java文件中导入其他包中的类、接口等,以便直接使用。
  • 位置不同package声明位于Java文件的开头(除了注释和可能的Unicode编码声明),而import语句紧随package声明之后(如果有的话)。
  • 作用范围不同package声明作用于整个Java文件,影响的是该文件中的类和接口的组织方式;而import语句仅影响当前文件,使得该文件可以直接使用导入的类、接口等。
  • 依赖关系:虽然packageimport在Java程序中扮演不同的角色,但它们之间存在依赖关系。通常,当我们导入一个包中的类时,这个类所在的包就是通过package声明的。然而,并非所有使用package声明的包中的类都需要被导入(如果它们在当前包或已经导入的包中可用,或者通过类的全名来引用)。

DO 潜规则 

C#转java 的天坑  

java 潜规则 

自动的 驼峰命名 映射数据库 首字母必须小写字母

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/423250.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java许可政策再变,Oracle JDK 17 免费期将结束!

原文地址&#xff1a;https://www.infoworld.com/article/3478122/get-ready-for-more-java-licensing-changes.html Oracle JDK 17的许可协议将于9月变更回Oracle Technology Network License Agreement&#xff0c;这将迫使用户重新评估他们的使用策略。 有句老话说&#xf…

个人hic分析流程搭建4—compartment模块分析

参考我的上一篇博客https://blog.csdn.net/weixin_62528784/article/details/142132891?spm1001.2014.3001.5502&#xff0c; 在处理完hic上游分析模块之后&#xff0c;接下来就是正式的3层次模块分析了&#xff0c;compartmentTADloop 3大主层次&#xff0c;本篇介绍compart…

Linux 挂载磁盘与开机自动挂载操作指南

Linux 挂载磁盘与开机自动挂载操作指南 文章目录 Linux 挂载磁盘与开机自动挂载操作指南一 挂载磁盘1 查看硬盘信息2 新增数据盘执行分区3 新建分区4 创建一个主分区5 分区编号6 初始磁柱编号7 截止磁柱编号8 查看新建分区信息9 分区结果写入10 新分区同步操作系统11 设置新分区…

如何编译OpenHarmony SDK API

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 startup子系统之syspara_lite系统属性部件 &#xff08;1&#xff09; startup子系统之syspara_lite系统属性部件 &#xff08;2&#xff09; startup子系…

跟《经济学人》学英文:2024年09月07日这期 What to read about the British economy

What to read about the British economy Britain used to be the world’s richest country. These six books explain how it came to be, and why it is no longer 原文&#xff1a; IN RECENT YEARS the British economy has tended to be in the news for the wrong re…

逆向工程 反编译 C# net core

索引器访问 在您的代码中&#xff0c;您试图使用 configurationRoot.get_Item("AgileConfig:appId") 来访问配置项&#xff0c;但这里存在几个问题&#xff1a; 错误的访问方法&#xff1a;在 .NET 的 IConfigurationRoot 接口中&#xff0c;没有直接名为 get_Item 的…

kkFileView PDF Image Mode Preview BUG

kkFileView PDF & Image Mode Preview BUG lazyload.js officePicture.ftl pdf.ftl kkFileView getCorsFile?urlPath 会触发SSRF漏洞 kkFileView SSRF-CSDN博客 commonHeader.ftl initWaterMark() 修改代码的工作量&#xff0c;主要是先部署项目&#xff0c;解…

OpenAI全新发布o1模型:开启 AGI 的新时代

OpenAI全新发布o1模型&#xff1a;开启 AGI 的新时代 欢迎关注【youcans的AGI学习笔记】原创作品 2024年9月13日&#xff0c;OpenAI新模型o1 正式发布。o1 在测试化学、物理和生物学专业知识的基准 GPQA-diamond 上&#xff0c;全面超过了人类博士专家。 OpenAI 宣称&#xff…

VSCode C++ Tasks.json中的变量

前言 上文介绍了在VSCode中创建C项目和编译多文件的情况。本文将介绍Tasks.json中一些变量的含义&#xff1b; 内容 tasks.json文件 下文参考VSCode文档&#xff1a;Visual Studio Code 变量参考 预定义标量 ${userHome} - 用户主文件夹的路径${workspaceFolder} - 在 VS Co…

软件测试之测试用例详解

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、通用测试用例八要素   1、用例编号&#xff1b;    2、测试项目&#xff1b;   3、测试标题&#xff1b; 4、重要级别&#xff1b;    5、预置条…

Mysql高级篇(中)——SQL性能分析

Mysql高级篇&#xff08;中&#xff09;—— SQL性能分析 一、&#xff08;了解&#xff09;MySQL Query Optimizer 的主要功能和原理二、&#xff08;了解&#xff09;MySQL 常见瓶颈三、关键字 EXPLAIN1、是什么2、基本语法3、EXPLAIN 执行信息详解&#xff08;1&#xff09…

HTML 转 PDF API 接口

HTML 转 PDF API 接口 网络工具 / 文件处理 支持网页转 PDF 高效生成 PDF / 提供永久链接。 1. 产品功能 超高性能转换效率&#xff1b;支持将传递的 HTML 转换为 PDF&#xff0c;支持转换 HTML 中的 CSS 格式&#xff1b;支持传递网站 URL&#xff0c;直接转换页面成对应的 …

代码随想录打卡Day31

又是难绷的一天啊&#xff0c;第二题和第三题看完视频才AC的&#xff0c;第一道题又被官方测试样例恶心了&#xff0c;下面细说。 56. 合并区间 这道题没有什么新的思路&#xff0c;还是先将区间按照区间左值排序&#xff0c;然后遍历向量中的每一个区间&#xff0c;如果和前…

在职研生活学习--20240907

开学第一天 9月7日&#xff0c;中南大学商学院迎来了一支充满活力的队伍——2024级MBA新生集体整装待发&#xff0c;我们满怀期待地登上了前往长沙望城柏乐园的大巴&#xff0c;准备开启一场为期两天一夜的素质拓展与团队建设之旅。 迎新幼儿园PPT 出发 抵达柏乐园&#xff0c;…

Docker torchserve 部署模型流程

1.拉取官方镜像 地址: https://hub.docker.com/r/pytorch/torchserve/tags docker pull pytorch/torchserve:0.7.1-gpu2. docker启动指令 CPU docker run --rm -it -d -p 8380:8080 -p 8381:8081 --name torch-server -v /path/model-server/extra-files:/home/model-serve…

食品分类2检测系统源码分享

食品分类2检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vi…

应用层协议 —— https

目录 http的缺点 https 安全与加密 运营商挟持 常见的加密方式 对称加密 非对称加密 数据摘要&#xff08;数据指纹&#xff09; 不安全加密策略 1 只使用对称加密 2 只使用非对称加密 3 双方都是用非对称加密 4 对称加密和非对称加密 解决方案 CA证书 http的缺点 我们可…

HarmonyOS开发实战( Beta5.0)骨架屏实现案例实践

鸿蒙HarmonyOS开发往期必看&#xff1a; HarmonyOS NEXT应用开发性能实践总结 最新版&#xff01;“非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线&#xff01;&#xff08;从零基础入门到精通&#xff09; 介绍 本示例介绍通过骨架屏提升加载时用户体验的方法。骨架屏用…

STM32+FATFS+SD卡+RTC(生成.CSV格式文件)

一、简介 实验目的&#xff1a;在SD卡上挂载文件系统&#xff0c;实时记录压力传感器采集到的数据&#xff1b;且在表格第一排记录采集时间&#xff1b; 因为前面文章包含了除RTC之外的所有的代码&#xff0c;此文章只放RTC代码。 二、工程源码 RTC.c #include "sys.h…

cocosCreator实现一个验证码弹窗验证功能

公开文章地址 在 Cocos Creator 中实现一个6位数的验证码输入弹窗功能。主要包含以下三点 1、 可以连续输入验证码 2、 可以粘贴验证码 3、 可以连续删除验证码 前言 引擎版本: Cocos Creator 2.7.2 开发语言: ts 效果图 实现思路 1、 在弹窗界面放置6个输入框的精灵&#x…