뚝딱뚝딱
475
2013-10-24 13:49:42
15
82962

mybatis 자꾸 에러가 납니다..


↓에러 메시지↓
org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'token' in 'class java.lang.String'
### Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'token' in 'class java.lang.String'
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:23)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:107)


↓mapper↓


↓DAO↓
public List selectData1(String token){
SqlSession session = sessionFactory.openSession();
List list = session.selectList("kr.co.techinmotion.mybatis.mappers.dataOutputMapper.selectData1", token);
session.close();
return list;
}


도대체 어디가 잘못됐는지 모르겠습니다.
이것만 지금 몇 시간째 붙잡고 있네요 ㅠㅠ

처음엔 파라미터 값도 넘어가지 않아서 물음표로 나오더라고요.
그래서 #{}을 ${}바꿔줬더니 파라미터 값은 또 제대로 나옵니다.
근데 이 에러를 해결할 수가 없어서요...하아..
자꾸만 getter메서드가 없다는 에러가 뜨더라고요.
이거 어떻게 해결해야 할까요..
아이바티스만 쓰다가 마이바티스 어제 오늘 처음 건들고 있는데 많이 힘드네요.
도움 부탁드립니다..
0
  • 답변 15

  • zepinos
    20k
    2013-10-24 13:51:20
    #{token} 대신 #{value} 라고 한 번 해보세요. 될런지 모르겠네요.
  • 뚝딱뚝딱
    475
    2013-10-24 14:01:10
    말씀해주신 대로 value로 바꿔서 해봤더니, 에러가 바뀌었습니다;;;

    ### The error occurred while setting parameters
    ### SQL: select * from tbl_id, tbl_feed where tbl_id.id = tbl_feed.upid and tbl_id.token = 3r2jri3r90w543gcb
    ### Cause: java.sql.SQLException: ORA-00933: SQL 명령어가 올바르게 종료되지 않았습니다

    쿼리에서 어떤 부분이 잘못 되었는지 찾을 수가 없네요;;
  • 띠깔라
    540
    2013-10-24 14:12:56
    parameterType="string" > parameterType="java.lang.String" 해보세요
  • 뚝딱뚝딱
    475
    2013-10-24 14:18:34
    java.lang.String해봐도 소용이 없습니다.ㅠㅠ

    맨 윗분이 알려주신대로 value로 바꿨더니 위와 같은 에러는 사라지고,
    아래와 같은 새로운 에러가 발생했어요.. 흑...

    ### The error occurred while setting parameters
    ### SQL: select * from tbl_id, tbl_feed where tbl_id.id = tbl_feed.upid and tbl_id.token = 3r2jri3r90w543gcb
    ### Cause: java.sql.SQLException: ORA-00933: SQL 명령어가 올바르게 종료되지 않았습니다


    쿼리문을 sqlDeveloper로 돌려봐도 잘만 돌아갑니다...
  • 스타
    3k
    2013-10-24 14:57:11
    $가 아니라 #으로 쓰세요.
  • 뚝딱뚝딱
    475
    2013-10-24 14:59:34
    #로 써도 소용 없더라고요 ㅠㅠ
  • mini2014
    356
    2013-10-24 15:12:30
    쿼리문 오타 난건 아닌지요~
  • mini2014
    356
    2013-10-24 15:12:56
    select * from tbl_id, tbl_feed where tbl_id.id = tbl_feed.upid and tbl_id.token = '3r2jri3r90w543gcb '

    결과 나오는지 확인해보세요~
  • 뚝딱뚝딱
    475
    2013-10-24 15:17:32
    mini2014님 결과 나와요.
    쿼리문 오타는 아닌 것 같아요;;;
    ㅠㅠ 죽겠네요..
  • mini2014
    356
    2013-10-24 15:54:13
    ↓mapper↓


    ↓DAO↓
    public String selectData1(String testParam){
    SqlSession session = sessionFactory.openSession();
    String listDate = session.selectString("kr.co.techinmotion.mybatis.mappers.dataOutputMapper.selectData1", testParam);
    session.close();
    return listDate ;
    }

    이렇게 해보셔요~
  • 뚝딱뚝딱
    475
    2013-10-24 17:18:29
    mini2014님 string으로 하니까 되는데요;; 그럼 마이바티스는 무조건 string으로만 해야 하나요?;; resultType을 list로 받는 방법은 없을까요?;;
  • 뚝딱뚝딱
    475
    2013-10-24 17:34:56
    아... 해결했습니다.
    매핑에서 resultType을 list로 하지 않고..
    DAO에 List으로 반환 타입이 되어있는데, resultType을 DataResult1으로 해놓으니까 잘 돌아가네요;;;
    도와주신 분들 감사합니다. ;;;;
  • 초보초보
    674
    2013-10-25 09:44:32
    resultType="list"... vo나 hashMap으로 리턴하셔야 하는건데 ㅎㅎㅎ
  • 일쌍다반사
    19
    2016-05-31 16:38:56

    3년이 지난 내용이지만..혹시나 이 글을 검색한 분들을 위해..

    리턴타입은 row 하나하나를 보고 적어야 합니다.

    결과 값이 1건일 지 100건일지 모르기 때문에

    Dao에서 List으로 받을 건지 Map으로 받을건지 결정하는 것이고요.

    selectList 또는 selectOne

    단, Dao에서 selectOne으로 해 놓고선 결과값이 2건 이상 나올 경우

    Mybatis에서 에러를 낸다라는거~

  • 후추
    356
    2016-11-29 17:35:42

    일쌍다반사님 댓글 감사요 큰 도움 됬네요 resultType 은 row 값 따라가는거요 !

  • 로그인을 하시면 답변을 등록할 수 있습니다.