Velocity 레퍼런스

템플릿 본문에서 사용할 수 있는 컨텍스트 객체의 속성과 도구(tool) 함수 전체 목록입니다. 코드 생성 시점에 아래 변수들이 Velocity 컨텍스트에 주입됩니다.

컨텍스트 한눈에 보기

코드 생성 시 템플릿이 접근할 수 있는 최상위 변수들입니다.

변수설명
$entity현재 테이블의 엔티티 — 이름·필드 목록·소프트 삭제 설정 + 팩이 선언한 엔티티 변수
$field엔티티의 필드 하나 — #foreach($field in $entity.fields) 로 순회
$env프로젝트 전역 변수 — 프로젝트 설정의 Templates Variables 입력값
$table원본 테이블 — 테이블명·스키마·PK 컬럼 목록 등
$projectConfig프로젝트 설정 전체 — Audit Table 설정(auditConfig) 포함
$databaseInfo대상 DBMS 정보 — 제품명·버전 (직접 읽기보다 $codegen.isOracle() 등 권장)
$paid현재 계정의 유료 플랜 여부 (boolean)
$codegen · $types …도구(tool) — 아래 $codegen · $types · $java · $ts · $py 함수 참조. Velocity 표준 DateTool($date)도 사용할 수 있습니다.

팩 변수의 평탄화(flatten)
언어 프로필에 선언한 엔티티 변수와 필드 변수는 렌더 직전에 $entity / $field 루트로 평탄화됩니다. 예를 들어 엔티티 변수 subPackage 를 선언했다면 템플릿에서 $entity.subPackage 로 바로 읽습니다. 같은 이름의 기본 속성이 있으면 팩 변수 값이 우선합니다.

$entity — 엔티티

현재 생성 대상 테이블의 엔티티입니다. 이름 변형(케이스 변환)은 미리 계산되어 속성으로 제공됩니다.

속성설명
name엔티티 이름 (테이블 상세 Code Generator 탭의 NAME, 보통 PascalCase)
comment테이블 코멘트
alias별칭 (Code Generator 탭의 Alias)
varname 의 lowerCamel — 예: myName (변수명으로 사용)
snakeLowername 의 snake_case — 예: my_name
snakeUppername 의 SNAKE_CASE 대문자 — 예: MY_NAME
kebabLowername 의 kebab-case — 예: my-name
kebabUppername 의 KEBAB-CASE 대문자 — 예: MY-NAME
fields필드 배열 — #foreach 순회 대상
fieldMapDB 컬럼명 → 필드 맵 — 컬럼명으로 특정 필드를 찾을 때
softDelete소프트 삭제 설정 객체 (아래 표)
(entityVariables key)(팩 엔티티 변수) — 언어 프로필 entityVariables 로 선언한 key 들이 루트에 노출 — 예: $entity.subPackage

$entity.softDelete 속성

미사용이거나 플래그 컬럼이 없으면 enabled=false 만 보장됩니다. *표시 속성은 생성 시점에 컬럼 타입을 판별해 자동 보강되는 값입니다.

속성설명
enabled소프트 삭제 사용 여부
flagColumn삭제 플래그 컬럼 (DB 컬럼명)
deletedValue플래그가 boolean 이 아닐 때 — 삭제를 의미하는 값 (예: Y, 1)
activeValue플래그가 boolean 이 아닐 때 — 미삭제를 의미하는 값 (예: N, 0)
dateColumn삭제 일시 컬럼 (DB 컬럼명, 선택)
dateFormat일시 컬럼이 문자열일 때 저장할 날짜 포맷
flagBoolean* 플래그 컬럼이 boolean 타입인지
flagString* 플래그 컬럼이 문자열 타입인지 (SQL 리터럴 따옴표 분기용)
flagField* 플래그 컬럼의 필드명
dateString* 일시 컬럼이 문자열 타입인지
dateField* 일시 컬럼의 필드명

$field — 필드(컬럼)

$entity.fields 의 요소입니다. 필드명·타입 매핑 결과와 원본 DB 컬럼 정보를 함께 가집니다.

속성설명
name필드명 — DB 컬럼명에 Column Renamer 규칙을 적용한 이름
comment필드 코멘트
mappedType확정 타입 객체 (아래 표) — 활성 팩의 타입 매핑·사용자 오버라이드가 반영된 값
defaultValue필드 레벨 기본값
deletedMark이 필드가 소프트 삭제 플래그인지
metaAttributesMETA 속성 배열 — 각 요소는 name · value. 조회는 $codegen.getMetaAttribute() 권장
column원본 DB 컬럼 (아래 표)
(fieldVariables key)(팩 필드 변수) — 언어 프로필 fieldVariables 로 선언한 key 들이 루트에 노출 — 예: $field.customType

$field.mappedType 속성

속성설명
mappedType.type중간 타입 식별자 — M_LONG, M_STRING 등 (아래 "중간 타입" 표)
mappedType.target대상 언어 타입 — 예: java.lang.Long, number. 출력은 $types.typeOf($field) 권장
mappedType.category타입 분류 — number · text · datetime · boolean · array · object · url

$field.column 주요 속성

DB 에서 읽어온 원본 컬럼 정보입니다.

속성설명
column.nameDB 컬럼명
column.remarks컬럼 코멘트
column.typeDB 타입 — 예: VARCHAR, BIGINT
column.size길이/크기
column.decimalDigits소수 자릿수
column.nullableNULL 허용 여부
column.autoIncrement자동 증가 여부
column.defaultValueDB 기본값

$env 와 기타 객체

$env — 프로젝트 전역 변수

언어 프로필의 전역 변수 선언에 사용자가 입력한 값입니다. key 의 점(.)은 중첩 객체가 됩니다 — package.core 로 선언했다면 $env.package.core 로 읽습니다.

$table — 원본 테이블

속성설명
name테이블명
schemaName스키마명
primaryKeysPK 컬럼명 배열 (DB 컬럼명)
columns컬럼 배열 (원본)

$projectConfig — 프로젝트 설정

프로젝트 설정 전체가 노출됩니다. 코드 생성과 직접 관련된 것은 auditConfig 입니다 — 직접 읽기보다 $codegen 의 audit 함수 사용을 권장합니다.

속성설명
auditConfig.auditTableAudit 기준(참조) 테이블
auditConfig.aaeAudit Entity Interface 클래스명
auditConfig.aaieImmutable Audit Entity Interface 클래스명
auditConfig.creationAuthorList, …생성/수정 추적 컬럼명 후보 목록 4종 — creationAuthorList · creationDateList · lastModificationAuthorList · lastModificationDateList

$databaseInfo — 대상 DBMS

속성설명
databaseProductNameJDBC 제품명 — 예: MariaDB. 분기는 $codegen.isMariaDB() 등 권장
databaseProductVersion제품 버전 (연결해 본 적 없으면 빈 값)

$paid — 유료 플랜 여부

현재 계정이 유료 플랜인지 나타내는 boolean 입니다. 템플릿이 출력물을 분기하는 데 쓸 수 있습니다.

중간 타입과 카테고리

DB 컬럼 타입은 먼저 아래 중간 타입으로 자동 변환되고, 언어 프로필의 타입 매핑이 중간 타입 → 대상 언어 타입을 결정합니다. category 는 $types.isDate($field) 같은 분기 판별에 쓰입니다.

카테고리속성
textM_STRING · M_CHAR · M_CLOB
numberM_INTEGER · M_LONG · M_BIGINTEGER · M_BYTE · M_DOUBLE · M_FLOAT · M_BIGDECIMAL
booleanM_BOOLEAN
datetimeM_LOCALDATE · M_LOCALTIME · M_LOCALDATETIME · M_ZONEDDATETIME · M_SQLDATE · M_UTILDATE · M_INSTANT · M_TIME · M_TIMESTAMP
arrayM_ARRAY · M_BYTES · M_BLOB
urlM_URL
objectM_REF · M_OBJECT

$codegen 함수

언어 중립 생성 헬퍼입니다. 네이밍 변환, DBMS 분기, PK/필드 선택, audit 판별 등을 제공합니다.

네이밍 · 문자열

함수설명
$codegen.toLowerCamel(value)UpperCamel → lowerCamel. 예: MyName → myName
$codegen.toUpperCamel(value)lowerCamel → UpperCamel. 예: myProp → MyProp
$codegen.toUpperUnderscore(value)UpperCamel → UPPER_UNDERSCORE. 예: MyName → MY_NAME
$codegen.toPath(part1, part2, …)각 인자의 점(.)을 슬래시로 바꾼 뒤 경로로 결합. 예: com.foo 와 bar → com/foo/bar
$codegen.join(sep, v1, v2, …)빈 값을 건너뛰고 구분자로 결합, 중복된 구분자는 하나로 정리
$codegen.replace(text, search, repl)문자 치환 — text 의 searchString 문자를 replacement 로
$codegen.printIf(cond, value)cond 가 true 일 때만 value 출력 (아니면 빈 문자열)
$codegen.printVelocityVar(value)value 를 달러-중괄호 참조 문자열로 감싸 출력 — 생성 결과물 안에 Velocity 표기를 그대로 남길 때
$codegen.printIgnoreFirst(count, value)count 가 1 이면 빈 문자열, 아니면 value — 루프에서 첫 항목 앞 구분자 생략용

DBMS 판별 · SQL 보조

함수설명
$codegen.isOracle()대상 DBMS 가 Oracle 인지
$codegen.isMySQL()대상 DBMS 가 MySQL 인지
$codegen.isMariaDB()대상 DBMS 가 MariaDB 인지
$codegen.isPostgreSql()대상 DBMS 가 PostgreSQL 인지
$codegen.isMsSql()대상 DBMS 가 SQL Server 인지
$codegen.getColumnName(columnName)SQL Server 면 대괄호로 감싼 컬럼명, 그 외엔 그대로
$codegen.getSchemaPrefix()커넥션의 "스키마 접두" 설정이 켜져 있으면 schema. 접두 문자열, 아니면 빈 문자열
$codegen.useSchemaPrefix()커넥션의 스키마 접두 설정 여부

PK · 필드 선택

함수설명
$codegen.getPkAttr()PK 필드 목록 ($table.primaryKeys 순서)
$codegen.getNonPkAttr()PK 가 아닌 필드 목록
$codegen.isSinglePk()PK 가 단일 컬럼인지
$codegen.isSinglePkAndLongTypeAndNameIsId()PK 가 1개이고 이름이 id, 중간 타입이 M_LONG 인지 — 표준 id 패턴 판별
$codegen.isPk($field.column)해당 컬럼($field.column)이 PK 인지
$codegen.getDeletedField()deletedMark=true 인 필드 (없으면 null)
$codegen.hasDeletedField()deletedMark 필드 존재 여부
$codegen.getMetaAttribute(name, $field)필드의 META 속성에서 name 에 해당하는 value (없으면 빈 문자열)

시퀀스 · 키 생성 SQL

함수설명
$codegen.hasSequence()$entity.sequenceName 이 비어있지 않은지 (팩 엔티티 변수로 선언한 경우)
$codegen.getSelectKeyStatement()DBMS 별 PK 값 조회 SQL — Oracle/PostgreSQL 은 시퀀스, MySQL/MariaDB/SQL Server 는 auto increment 기반 (MyBatis selectKey 용)
$codegen.getSelectKeyOrder()selectKey 실행 시점 — Oracle/PostgreSQL 은 before, 그 외 after

Audit (생성/수정 추적 컬럼)

함수설명
$codegen.hasAuditTable()프로젝트에 Audit Table 이 설정되어 있는지
$codegen.hasCreated()생성 author·date 컬럼이 모두 존재하는지
$codegen.hasModified()수정 author·date 컬럼이 모두 존재하는지
$codegen.isCreationAuthor(name)필드명이 생성자(author) 후보 목록에 있는지
$codegen.isCreationDate(name)필드명이 생성일시 후보 목록에 있는지
$codegen.isModificationAuthor(name)필드명이 수정자 후보 목록에 있는지
$codegen.isModificationDate(name)필드명이 수정일시 후보 목록에 있는지
$codegen.isCreationField(name)생성자 또는 생성일시 컬럼인지
$codegen.isModificationField(name)수정자 또는 수정일시 컬럼인지
$codegen.isAuditField(name)생성/수정 추적 컬럼 중 하나인지
$codegen.isAuditDateField(name)생성일시 또는 수정일시 컬럼인지

검증 키워드

함수설명
$codegen.validationsEntity($entity)엔티티 전체 필드의 검증 키워드 목록 (중복 제거)
$codegen.validationsField($field)필드의 검증 키워드 — NOT NULL 문자열 컬럼은 notblank, 그 외 NOT NULL 은 notnull, 길이 있는 문자열은 utf8size. PK·audit 필드는 제외

$types 함수

필드의 확정 타입($field.mappedType)을 읽는 언어 공통 타입 헬퍼입니다.

함수설명
$types.categoryOf($field)필드의 타입 분류 — datetime · number · boolean · text · array · object · url
$types.isCategory($field, category)필드가 지정한 분류인지
$types.typeOf($field)대상 타입의 simple name — 예: java.lang.Long → Long
$types.importOf($field)import 용 전체 타입명 — 예: java.lang.Long
$types.simpleNameOf(fullType)전체 타입명 문자열 → simple name
$types.isDate($field)datetime 분류인지
$types.isNumber($field)number 분류인지
$types.isBoolean($field)boolean 분류인지
$types.isText($field)text 분류인지
$types.isArray($field)array 분류인지
$types.isDateOnly($field)시간 없는 날짜(M_LOCALDATE)인지
$types.isLongText($field)대용량 텍스트인지 — CLOB/BLOB 또는 길이 1000 이상 문자열

$java · $ts · $py 함수

언어별 보조 헬퍼입니다. $types · $codegen 만으로도 기본 동작이 가능하며, 아래는 각 언어의 편의 기능입니다.

$java — Java

함수설명
$java.imports()엔티티 필드 타입에서 import 라인 수집 — java.lang.* 제외, 중복 제거, 정렬
$java.simpleName(fullType)전체 타입명 → simple name. 예: java.lang.Long → Long

$ts — TypeScript

함수설명
$ts.propertyType($field)필드의 TS 타입 — datetime 분류는 항상 Date, 그 외 매핑된 target, 없으면 any
$ts.interfaceName(value)PascalCase 정규화 — 예: user_profile → UserProfile

$py — Python

함수설명
$py.snakeCase(value)snake_case 변환 (PEP8) — 예: UserProfile → user_profile
$py.typeHint($field)필드의 Python 타입 힌트 — str · int · float · bool · datetime.datetime 등