다음 편집기는 Java에서 사용자 정의 주석과 리플렉션을 사용하는 간단한 BaseDao 예제를 제공합니다. 편집자님이 꽤 좋다고 생각하셔서 지금 공유하고 모두에게 참고용으로 드리고자 합니다.
일반적인 ORM 프레임워크에서는 대부분 엔터티와 데이터베이스 간의 매핑을 달성하기 위한 주석 방법을 제공합니다. 여기서는 간단히 사용자 정의 주석과 리플렉션을 사용하여 실행 가능한 SQL 문을 생성합니다.
원래 주석 검토를 위해 만든 프로젝트였기 때문에 전체적인 디렉토리 구조입니다^.^
자, 먼저 아이디어를 정합시다.
1. @Table @Column 주석을 사용자 정의합니다.
최대 절전 모드를 약간 모방하고 @Table이 클래스에서 작동하여 엔터티 클래스와 데이터 테이블 간의 매핑 관계를 나타내고 속성 값을 @Table 데이터 테이블 tableName의 이름에 매핑합니다. @Column이 속성에 대해 작동하도록 하고(여기서는 set 메서드가 구현되지 않음), 속성과 데이터 테이블 필드 간의 매핑 관계를 나타내고 @Column의 속성 값을 허용합니다. 데이터 테이블 필드 컬럼 이름의 특정 필드에 매핑됩니다.
2. Dao 레이어를 모방해야 합니다.
이때 먼저 이름과 비밀번호 속성을 가진 UserDao를 정의합니다. UserDao. UserDao와 User를 인스턴스화할 때 UserDao의 저장 메소드를 호출하고 User 객체를 전달한 다음 SQL 조각을 반환합니다. 간단히 이 SQL을 "사용자(이름, 비밀번호)에 삽입하도록 설정합니다. VALUES('cai" ' ,'123456')", 여기서 사용자는 데이터 테이블의 이름이고, 이름, 비밀번호는 데이터 테이블 필드이고, 'cai','123456'은 사용자 개체의 속성입니다.
------0.0 코드 구분선------------ --------- ---------------------
//칼럼. java
package com.shu.annotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target({ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented public @interface Column { String value(); }
//Table.java
package com.shu.annotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target({ElementType.METHOD,ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented public @interface Table { String value(); }
//User.java
package com.shu.entity; import com.shu.annotation.Column; import com.shu.annotation.Table; @Table("t_user") public class User { @Column("name") private String name; @Column("password") private String password; public String getName() { return name; } public String getPassword() { return password; } public void setName(String name) { this.name = name; } public void setPassword(String password) { this.password = password; } }
//IBaseDao.java
package com.shu.dao; import java.lang.reflect.Field; import com.shu.annotation.Column; import com.shu.annotation.Table; public interface IBaseDao<T> { //最终目标:insert into user (NAME,password) VALUES('cai','123456'); default String save(T entity) throws IllegalArgumentException, IllegalAccessException{ //sql用于存放最终返回的sql语句 StringBuilder sql = new StringBuilder("insert into "); //tableName用于存放sql语句中表名部分 StringBuilder tableName; //columnName用于存放sql语句的字段部分 StringBuilder columnName = new StringBuilder("("); //values用于存放sql语句中的赋值部分 StringBuilder values = new StringBuilder("("); //获取对象user的class对象 Class clazz = entity.getClass(); //判断该User类是否有@Table注解 boolean isTable = clazz.isAnnotationPresent(Table.class); if(isTable) { //获取User类@Table注解的值value,该值我们定义为User表的表名称 Table t = (Table) clazz.getAnnotation(Table.class); tableName = new StringBuilder(t.value()); //拼接表名 sql.append(tableName+" "); //获取user对象的属性列表 Field[] fieldList = clazz.getDeclaredFields(); //遍历属性列表,分别拿出属性列表中被@Column注解的属性,并获取属性的值 for(int i=0;i<fieldList.length;i++){ Field f = fieldList[i]; boolean isColumn = f.isAnnotationPresent(Column.class); if(!isColumn){ continue; } Column column = f.getAnnotation(Column.class); f.setAccessible(true); Object columnValue = f.get(entity); if(i==fieldList.length-1){ columnName.append(column.value()+") VALUES "); values.append("'"+columnValue+"')"); sql.append(columnName); sql.append(values); continue; } columnName.append(column.value()+", "); values.append("'"+columnValue+"',"); } // boolean isColumn = clazz.isAnnotationPresent(annotationClass); } return sql.toString(); } }
// UserDao.java
package com.shu.dao; import com.shu.entity.User; public class UserDao implements IBaseDao<User> { }
//UserService.java
package com.shu.service; import com.shu.dao.UserDao; import com.shu.entity.User; public class UserService { public static void main(String[] args) { // TODO Auto-generated constructor stub UserDao userDao = new UserDao(); User user = new User(); user.setName("cai"); user.setPassword("123456"); try { System.out.println(userDao.save(user)); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
--------------- -----0.0 코드 분할선 ---------------------------- ---------
여기서 마지막으로 서비스 레이어를 정의하고 dao 레이어를 호출하고 해당 SQL 문을 생성하도록 합니다. 내 디렉터리의 Order와 같은 다른 엔터티를 사용자 정의한 다음 OrderDao는 IBaseDao 인터페이스를 구현하고 OrderService를 정의하여 OrderDao를 호출합니다. save 메소드는 주문 테이블에 해당하는 SQL 문을 생성할 수도 있습니다.
단점을 요약하면 다음과 같습니다.
1. Hibernate Annotation은 할당 없이 얻을 수 있기 때문에 할당 없이 직접 테이블이나 필드 이름을 얻으려면 리플렉션을 사용하여 얻을 수 있다고 생각합니다. .
2. 여기서는 save 메소드만 사용하며, sql 문은 데이터베이스와 상호 작용하지 않고 동적으로 생성되며 sql 문을 실행하기 위한 지속성 메서드를 제공할 수 있습니다.
3. 여기서 SQL의 접합은 상대적으로 거친 편입니다. 더 효율적인 다른 방법이 있는지 생각해 볼 수 있습니다.
위 내용은 Java에서 BaseDao를 구현하는 방법에 대한 예제 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

이 기사에서는 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 및 Gradle을 사용하여 접근 방식과 최적화 전략을 비교합니다.

이 기사에서는 Maven 및 Gradle과 같은 도구를 사용하여 적절한 버전 및 종속성 관리로 사용자 정의 Java 라이브러리 (JAR Files)를 작성하고 사용하는 것에 대해 설명합니다.

이 기사는 카페인 및 구아바 캐시를 사용하여 자바에서 다단계 캐싱을 구현하여 응용 프로그램 성능을 향상시키는 것에 대해 설명합니다. 구성 및 퇴거 정책 관리 Best Pra와 함께 설정, 통합 및 성능 이점을 다룹니다.

이 기사는 캐싱 및 게으른 하중과 같은 고급 기능을 사용하여 객체 관계 매핑에 JPA를 사용하는 것에 대해 설명합니다. 잠재적 인 함정을 강조하면서 성능을 최적화하기위한 설정, 엔티티 매핑 및 모범 사례를 다룹니다. [159 문자]

Java의 클래스 로딩에는 부트 스트랩, 확장 및 응용 프로그램 클래스 로더가있는 계층 적 시스템을 사용하여 클래스로드, 링크 및 초기화 클래스가 포함됩니다. 학부모 위임 모델은 핵심 클래스가 먼저로드되어 사용자 정의 클래스 LOA에 영향을 미치도록합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

드림위버 CS6
시각적 웹 개발 도구

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

WebStorm Mac 버전
유용한 JavaScript 개발 도구
