미싱노
11
2020-02-14 21:27:32 작성 2020-02-14 21:40:46 수정됨
2
211

[Solved]MyBatis에서 파라미터를 받지 못합니다...



// DTO
public class Test {

	private String seq;
	
	private String regTime;

	public String getSeq() {
		return seq;
	}

	public void setSeq(String seq) {
		this.seq = seq;
	}

	public String getRegTime() {
		return regTime;
	}

	public void setRegTime(String regTime) {
		this.regTime = regTime;
	}
}


//Controller
@Controller
@RequestMapping(value = "/test")
public class TestController {
	
	@Autowired
	private TestService testService;
	
	@RequestMapping(value = "/connect", method = RequestMethod.GET)
	public @ResponseBody HashMap<String, Object> testConnection() {
		HashMap<String, Object> map = new HashMap<String, Object>();
		try {
			testService.testConnection();
			map.put("Status", "Success");
		} catch (Exception e) {
			e.printStackTrace();
			map.put("Error", e);
		}
		
		return map;
	}
	
	@RequestMapping(value = "/pull", method = RequestMethod.GET)
	public @ResponseBody HashMap<String, Object> testPull() {
		
		HashMap<String, Object> map = new HashMap<String, Object>();
		
		List<Test> list = testService.testPull();
		
		map.put("list", list);
		map.put("Status", "Success");
		
		return map;
	}
	
	@RequestMapping(value = "/pullOne/{seq}", method = RequestMethod.GET)
	public @ResponseBody HashMap<String, Object> testPullOne(@PathVariable String seq) {
		HashMap<String, Object> map = new HashMap<String, Object>();
		
		Test test = testService.testPullOne(seq);
		
		if (test != null) {
			map.put("Status", "Success");
			map.put("test", test);
		} else {
			map.put("Status", "Failed");
			map.put("test", "None");
		}
		
		return map;
	}
}


//Service, Impl
public interface TestService {

	void testConnection();
	
	List<Test> testPull();

	Test testPullOne(String seq);
}


@Service
public class TestServiceImpl implements TestService {

	@Autowired
	private TestDao testDao;
	
	@Override
	public void testConnection() {
		testDao.testConnection();
	}

	@Override
	public List<Test> testPull() {
		return testDao.testPull();
	}
	
	@Override
	public Test testPullOne(String seq) {
		return testDao.testPullOne(seq);
	}
}



//Dao, Impl
public interface TestDao {

	void testConnection();
	
	List<Test> testPull();
	
	Test testPullOne(String seq);
}


@Repository
public class TestDaoImpl implements TestDao {
	
	@Autowired
	private SqlSession sqlSession;
	
	private static final String NAMESPACE = "info.limegames.next.test.dao.TestDao.";

	@Override
	public void testConnection() {
		sqlSession.insert(NAMESPACE + "testConnection");
	}
	
	@Override
	public List<Test> testPull() {
		return sqlSession.selectList(NAMESPACE + "testPull");
	}

	@Override
	public Test testPullOne(String seq) {
		return sqlSession.selectOne(NAMESPACE + "testPullOne");
	}
	
}


우선 소스는 이렇습니다. 빈 설정은 자바 빈으로 설정했습니다.



<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
<mapper namespace="info.limegames.next.test.dao.TestDao">

	<insert id="testConnection">
		INSERT INTO
			connection_test(
				reg_time
			)
		VALUES(
			now()
		)
	</insert>
	
	<select id="testPull" resultType="info.limegames.next.test.Test">
		SELECT
			seq,
			reg_time
		FROM
			connection_test
	</select>
	
	<select id="testPullOne" parameterType="String" resultType="info.limegames.next.test.Test">
		SELECT
			seq,
			reg_time
		FROM
			connection_test
		WHERE
			seq = #{seq}
	</select>
</mapper>



이건 쿼리문입니다.

mybatis-config에서 카멜케이스 언더바 자동변환도 설정해놨습니다.

콘트롤러에서 testConnection(), testPull()메소드는 정상적으로 동작합니다.


그런데 testPullOne()에서 @PathVariable로 들어오는 String seq가 파라미터로 전달이 안 됩니다.



DEBUG: info.limegames.next.test.dao.TestDao.testPullOne - ==>  Preparing: SELECT seq, reg_time FROM connection_test WHERE seq = ? 
DEBUG: info.limegames.next.test.dao.TestDao.testPullOne - ==> Parameters: null
DEBUG: info.limegames.next.test.dao.TestDao.testPullOne - <==      Total: 0



seq가 3인 곳에 분명히 데이터 있는데 말이죠...


어떻게 해결해야 할지 잘 모르겠습니다. 도움 부탁드립니다.

0
0
  • 답변 2

  • John Suhr
    2k
    2020-02-14 21:31:58


    @Override
    	public Test testPullOne(String seq) {
    		return sqlSession.selectOne(NAMESPACE + "testPullOne");
    	}

    파라미터를 안넘기신 것 같네요

    1
  • 미싱노
    11
    2020-02-14 21:34:17

    아... 부끄럽네요..; 이런 초보적인 실수를ㅎㅎ;;;


    정말 감사합니다.

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