2016-09-27 3 views
0

요구 사항은 런타임시 특정 열과 테이블 이름이 선택된 데이터베이스에서 레코드를 가져 오는 것입니다.최대 절전 모드에서 런타임시 테이블 이름과 열 이름을 전달하는 테이블 레코드를 얻으려면 어떻게해야합니까?

Java, Hibernate 및 Mysql을 사용하고 있습니다. JDBC를 사용하는 것이 가능합니다. 하지만 최대 절전 모드를 사용하고 싶습니다. 사람이 사전에

감사를 알고 있다면

게시 힌트는,

+0

에 대한

참조 스스로를 시도하십시오. 그래서 문제를 해결하기위한 것이지 새로운 분야에 소개하는 것이 아닙니다. 아마도 설명서가 시작하기에 좋은 곳일지도 모릅니다. – loki

답변

0

글쎄, Hibernate는 당신이 최대 절전 모드와 같이 쓸 수 찾고있는 단지 JDBC보다 훨씬 더 많은 작업을 수행 할 수 있습니다 : 당신이 테이블 이름을 볼 수 있고 열이 될 수

Query query = session.createSQLQuery(
"select s.stock_code from stock s where s.stock_code = :stockCode") 
.setParameter("stockCode", "7277"); 
List result = query.list(); 

을 즉, JDBC와 동등한 수준이며, 심지어 더 간단 할 수도 있습니다. 매개 변수를 사용할 필요가 없으며 코드에서 모듈 식으로 쿼리를 작성할 수 있습니다. 자세한 내용 https://www.mkyong.com/hibernate/hibernate-native-sql-queries-examples/

+1

답장을 보내 주셔서 감사합니다. 귀하의 도움은 매우 소중합니다. –

0

HibernateJDBC보다 더 많은 기능을 가지고 있습니다. 가장 좋은 기능은 Hibernate입니다. Object Oriented Principles입니다. 엔티티에 Polymorphism, Inheritance, Encapsulation을 사용할 수 있습니다.

BaseEntity 클래스가 있어야하며 다른 모든 클래스는이 클래스에서 확장되어야합니다.

public class BaseEntity { 

} 

그런 다음 다른 모든 클래스가이 클래스를 확장합니다. 다른 두 개의 클래스 나 엔티티가 있다고 가정합니다.

User.class

import java.io.Serializable; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.Id; 
import javax.persistence.Table; 

@Table(name = "USERS") 
@Entity 
public class User extends BaseEntity implements Serializable { 

    @Id 
    @Column(name = "ID") 
    private int id; 

    @Column(name = "NAME") 
    private String name; 

    @Column(name = "SURNAME") 
    private String surname; 

    public User() { 
    } 

    public User(int id, String name, String surname) { 
     this.id = id; 
     this.name = name; 
     this.surname = surname; 
    } 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getSurname() { 
     return surname; 
    } 

    public void setSurname(String surname) { 
     this.surname = surname; 
    } 

} 

Info.class는

import java.io.Serializable; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.Id; 
import javax.persistence.Table; 

@Table(name = "INFO") 
@Entity 
public class Info extends BaseEntity implements Serializable { 

    @Column(name = "TEXT") 
    private String text; 

    @Id 
    @Column(name = "ID") 
    private int id; 

    public Info() { 
    } 

    public Info(String text, int id) { 
     this.text = text; 
     this.id = id; 
    } 

    public String getText() { 
     return text; 
    } 

    public void setText(String text) { 
     this.text = text; 
    } 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

} 

또한 당신은 다음과 같이되어 configuration.hbm.xml 귀하의 DAO 각 클래스에 대한 mapping 태그를 추가해야합니다.

public List getList(BaseEntity baseEntity, String[] columnNames) { 
    Criteria criteria = session.createCriteria(baseEntity.getClass(), "be"); 
    ProjectionList projectionList = Projections.projectionList(); 
    for (String columnName : columnNames) { 
     projectionList.add(Projections.property("be." + columnName), columnName); // adding column for selection 
    } 
    criteria.setProjection(projectionList); 
    criteria.setResultTransformer(new AliasToBeanResultTransformer(baseEntity.getClass())); // for mapping result to entity 
    return criteria.list(); 
} 

public static void main(String[] args) { 
    String[] columnNames = {"name", "surname"}; // columnNames which you want to select 
    List<Info> users = new GeneralDAO().getList(new User(), columnNames); // you can pass any class User, Info or etc. 
}