SELECT
select * from tbl_zipcode
Criteria crit = sess.createCriteria(Zipcode.class);
List<Zipcode> zipcodeList = crit.list();
select seq, zipcode, st_bunji, ed_bunji from tbl_zipcode
Criteria crit = sess.createCriteria(Zipcode.class);
ProjectionList projectionList = Projections.projectionList();
projectionList.add(Projections.id().as("seq"));
projectionList.add(Projections.property("zipcode").as("zipcode"));
projectionList.add(Projections.property("stBunji").as("stBunji"));
projectionList.add(Projections.property("edBunji").as("edBunji"));
crit.setProjection(projectionList);
crit.setResultTransformer(new AliasToBeanResultTransformer(Zipcode.class));
List<Zipcode> zipcodeList = crit.list();
원하는 칼럼을 뽑아낼 때 쓰는 ProjectionList와 Projections을 사용합니다.(테이블 하나 조회하면서는 안쓸듯...)
해보니까 Projections 에서 꼭 as() 를 사용해서 Zipcode 클래스의 필드명과 이름을 맞춰줘야 하더군요... -0-/
Projections.id() 와 Projections.property() 는 뭐가 다른지 아시겠죠? ㅎㅎ;; id() 가 PK가 되는 필드 입니다.
select count(*) from tbl_zipcode
Criteria crit = sess.createCriteria(Zipcode.class);
crit.setProjection( Projections.rowCount() );
List<Integer> zipcodeList = crit.list();
System.out.println("count : " + zipcodeList.get(0));
select count(seq) as count from tbl_zipcode
Criteria crit = sess.createCriteria(Zipcode.class);
crit.setProjection(Projections.count("seq").as("count"));
List<Integer> zipcodeList = crit.list();
System.out.println("count : " + zipcodeList.get(0));
ORDER BY
select * from tbl_zipcode order by seq desc
Criteria crit = sess.createCriteria(Zipcode.class);
crit.addOrder(
Order.desc("seq"));
List<Zipcode> zipcodeList = crit.list();
Order.asc(String propertyName) 도 있습니다~ +_+
Criteria crit = sess.createCriteria(Zipcode.class);
List<Zipcode> zipcodeList = crit.list();
생략하겠습니다~
WHERE
where문은 Restrictions을 사용합니다. 내용이 많으니 자세한것은 API를 봐주세요~
select * from tbl_zipcode where seq = 1555
crit.add(Restrictions.eq("seq", 1555));
select * from tbl_zipcode where seq = 45
crit.add(Restrictions.idEq(45)); // idEq() 를 사용하면 PK 칼럼으로 검색합니다.
select * from tbl_zipcode where dong like '방화%'
crit.add(Restrictions.like("dong", "방화",
MatchMode.START));
// '방화%'
MatchMode 종류는 ANYWHERE, END, EXACT, START 4가지 종류가 있습니다.
딱 보면 아시겠지만 '%방화%', '방화%', '방화', '%방화' 이렇게 됩니다.
select * from tbl_zipcode where sido = '서울' and zipcode like '157%'
crit.add(Restrictions.eq("sido", "서울"));
crit.add(Restrictions.like("zipcode", "157", MatchMode.START));
여러개의 조건을 사용할 때에는 계속 .add() 해주면 됩니다.
select * from tbl_zipcode where where (st_bunji = '514' and sido = '서울' and dong = '방화2동')
Map<String, String> m = new Hashtable<String, String>();
m.put("sido", "서울");
m.put("dong", "방화2동");
m.put("stBunji", "514");
crit.add(Restrictions.allEq(m));
여러개의 eq를 사용할 경우 Map 을 사용할 수 있습니다.
select * from tbl_zipcode where seq >= 5300
crit.add(Restrictions.ge("seq", new Integer(50300)));
주의 해야 할 것은 2번째 인자는 Object 형태라는 것입니다. +_+;
ge(>=), gt(>), le(<=), lt(<) 가 있습니다.
select * from tbl_zipcode where sido in ('서울', '부산')
String[] in = {"서울", "부산"};
crit.add(Restrictions.in("sido", in)); // Collection 또는 Object[] 사용 가능
select * from tbl_zipcode where ( sido = '서울' and zipcode like '157%' )
crit.add(
Restrictions.conjunction() // and 연산으로 그룹
.add( Restrictions.eq("sido", "서울") )
.add( Restrictions.like("zipcode", "157", MatchMode.START) )
);
and 조건을 여러개 사용할 경우 그냥 계속 .add() 해도 되지만 Restrictions.conjunction() 로 그룹할 수 있습니다.
Restrictions.conjunction() 은 and 로 그룹하고, Restrictions.disjunction() 은 or 로 그룹합니다.
select * from tbl_zipcode where ( (dong like '방화%' or dong like '%1동') and (zipcode like '157%' or zipcode like '431') )
crit.add(
Restrictions.conjunction()
.add(
Restrictions.disjunction()
.add(Restrictions.like("dong", "방화", MatchMode.START))
.add(Restrictions.like("dong", "1동", MatchMode.END))
)
.add(
Restrictions.disjunction()
.add(Restrictions.like("zipcode", "157", MatchMode.START))
.add(Restrictions.like("zipcode", "431", MatchMode.START))
)
);
- 동이 '방화'로 시작하거나 '1동'으로 끝나고 우편번호가 157로 시작하거나 431로 시작하는 데이터를 조회 합니다.
- (동이 '방화'로 시작 or 동이 '1동'으로 끝) and (우편번호가 '157'로 시작 or 우편번호가 '431'로 시작)
정도가 되겠네요... (헷갈리.. ㅠㅠ)
select * from tbl_zipcode where st_bunji between '157' and '158'
crit.add(Restrictions.between("stBunji", "157", "158"));
select * from tbl_zipcode where ( dong like '방%' and dong like '%1동' )
crit.add( Restrictions.and( Restrictions.eq("sido", "서울"), Restrictions.like("dong", "1동", MatchMode.END) ) );
Restrictions.and(조건, 조건) 은 두개의 조건을 and 로 그룹합니다.
Restrictions.or(조건, 조건) 은 두개의 조건을 or 로 그룹합니다.
select * from tbl_zipcode where not ( sido in ('서울', '부산') )
crit.add( Restrictions.not( Restrictions.in("sido", new String[] { "서울", "부산" }) ) );