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中扮演着重要的角色,尤其是在数据访问层。它主要涉及到以下几个方面:
-
数据访问接口定义:Mapper包中的接口通常与数据库中的表或实体对象对应,定义了增删改查等操作方法。这些方法通过SQL语句或ORM框架(如MyBatis)实现与数据库的交互1。
-
数据转换和映射:Mapper可以将输入数据从一种格式转换为另一种格式,或将一种结构映射到另一种结构。例如,将数据库查询结果转换为Java对象,或将XML数据转换为JSON格式2。
-
数据过滤和提取:Mapper可以根据指定的条件过滤输入数据,或从输入数据中提取所需的部分数据。例如,选择符合某些条件的数据库记录,或提取数据库记录中的某些字段2。
-
类型安全和解耦:Mapper接口使用Java类型来表示数据库表中的字段,提供了类型安全。同时,它将数据库操作与业务逻辑解耦,使得可以在不修改业务逻辑的情况下修改数据库操作,反之亦然3。
-
简化代码和提高可维护性:通过使用Mapper,可以避免在代码中编写大量的JDBC代码,如建立连接、创建Statement、处理ResultSet等。这些繁琐的代码被封装在底层实现中,使得开发人员只需关注SQL和业务逻辑,从而简化代码并提高代码的可维护性3。
-
可重用性和易于测试: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中,package
和import
是两个不同的概念,它们在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
语句仅影响当前文件,使得该文件可以直接使用导入的类、接口等。 - 依赖关系:虽然
package
和import
在Java程序中扮演不同的角色,但它们之间存在依赖关系。通常,当我们导入一个包中的类时,这个类所在的包就是通过package
声明的。然而,并非所有使用package
声明的包中的类都需要被导入(如果它们在当前包或已经导入的包中可用,或者通过类的全名来引用)。
DO 潜规则
C#转java 的天坑
java 潜规则
自动的 驼峰命名 映射数据库 首字母必须小写字母