이전 포스팅에서 ibatis를 연동하는 방법을 소개해 드렸었는데 ibatis보다 mybatis를 많이 쓰기에 이번에는 mybatis oracle 연동 및 세팅 방법을 소개하려고 합니다.
사실상 ibatis와 mybatis는 별로 차이가 없으나 세팅과 사용방법이 아주 조금 차이나기에 새로이 한번 써보겠습니다.
우선 mybatis jar파일을 다운로드 받기 위해 mybatis 사이트로 이동합니다.
세팅 파일 적용
첫페이지에 다음과 같은 화면이 나오며 다운 받으셔서 프로젝트 web-inf의 lib안에 넣어주시면 되는데요.
기본 디렉토리 구조 입니다.
기본 구조만을 만들어 주시고 db와의 연동을 위해 아래의 코딩을 복사/붙여넣기 해주시면 됩니다.
기본 연동은 oracle이며 mysql등을 사용하시는 분은 sqlMapConfig.xml을 수정해주시면 됩니다.
SqlMapConfig
package myBatisSetting; public class SqlMapConfig { //작성한 sqlMapConfig.xml 객체화 하는 클래스 private static SqlSessionFactory sqlsession; static{ try { String resource ="./myBatisSetting/sqlMapConfig.xml"; Reader reader = Resources.getResourceAsReader(resource); sqlsession = new SqlSessionFactoryBuilder().build(reader); reader.close(); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException("초기화 에러: "+ e); } } public static SqlSessionFactory getSqlMapInstance(){ return sqlsession; } }
sqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="oracle.jdbc.driver.OracleDriver" /> <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" /> <property name="username" value="scott" /> <property name="password" value="tiger" /> </dataSource> </environment> </environments> <mappers> <mapper resource="sql/Emp.xml"/> </mappers> </configuration>
Controller
package myBatistest; public class Controller extends HttpServlet{ List<DTO> list; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{ System.out.println(getInitParameter("param")); Dao dao = new Dao(); DTO dto = new DTO(); if(getInitParameter("param").equals("select")){ //web.xml에서 InitParam을 주어 이 값을 토대로 수행 명령을 내림 try { list = dao.selectEmp(); System.out.println(list.size()); } catch (SQLException e) { e.printStackTrace(); System.out.println("DB연결 실패"); } req.setAttribute("list", list); RequestDispatcher rd = req.getRequestDispatcher("/result.jsp"); rd.forward(req, resp); }else if(getInitParameter("param").equals("insert")){ dto.setEname("김유신"); dto.setJob("장군"); dto.setSal("9999"); int result = dao.insertdata(dto); }else{ dao.deletedata(); } } }
DAO
package myBatistest; public class Dao { SqlSessionFactory sessionf = SqlMapConfig.getSqlMapInstance(); SqlSession sqlsession; List<DTO> list; public Dao() { sqlsession = sessionf.openSession(true); //true 로 할시 자동 commit } public List<DTO> selectEmp() throws SQLException { // TODO Auto-generated method stub list = sqlsession.selectList("selectEmp"); return list; } public int insertdata(DTO dto) { int result = 0; try{ sqlsession.insert("insertEmp",dto); System.out.println("입력성공"); }catch(Exception e){ result = 1; System.out.println("입력실패"); e.printStackTrace(); } return result; } public void deletedata() { // TODO Auto-generated method stub sqlsession.insert("deleteEmp"); } }
DTO
package myBatistest; public class DTO { private String ename; private String job; private String sal; public DTO() { // TODO Auto-generated constructor stub } public String getEname() { return ename; } public void setEname(String ename) { this.ename = ename; } public String getJob() { return job; } public void setJob(String job) { this.job = job; } public String getSal() { return sal; } public void setSal(String sal) { this.sal = sal; } public DTO(String ename, String job, String sal) { super(); this.ename = ename; this.job = job; this.sal = sal; } }
Emp.xml(쿼리 수행부)
<?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="Test"> <select id="selectEmp" resultType="myBatistest.DTO"> select * from emp </select> <insert id="insertEmp" parameterType="myBatistest.DTO"> insert into emp(empno, ename, job, sal) values(519, #{ename}, #{job}, to_number(#{sal})) </insert> <delete id="deleteEmp"> delete from emp where ename='김유신' </delete> </mapper>
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>MybatisTest</display-name> <servlet> <servlet-name>mybatistestservlet</servlet-name> <servlet-class>myBatistest.Controller</servlet-class> <init-param> <param-name>param</param-name> <param-value>select</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>mybatistestservlet</servlet-name> <url-pattern>/mybatisselect</url-pattern> </servlet-mapping> <servlet> <servlet-name>mybatistestservlet2</servlet-name> <servlet-class>myBatistest.Controller</servlet-class> <init-param> <param-name>param</param-name> <param-value>insert</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>mybatistestservlet2</servlet-name> <url-pattern>/mybatistestinsert</url-pattern> </servlet-mapping> <servlet> <servlet-name>mybatistestservlet3</servlet-name> <servlet-class>myBatistest.Controller</servlet-class> <init-param> <param-name>param</param-name> <param-value>delete</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>mybatistestservlet3</servlet-name> <url-pattern>/mybatisdelete</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>view.jsp</welcome-file> </welcome-file-list> </web-app>
result.jsp
<body> <% ArrayList<DTO> list = (ArrayList<DTO>)request.getAttribute("list"); for(int i=0; i<list.size(); i++){ %> <Input type='text' value='<%=list.get(i).getEname() %>'> <Input type='text' value='<%=list.get(i).getJob() %>'> <Input type='text' value='<%=list.get(i).getSal() %>'><br> <% } %> </body>
view.jsp
<body> <h1>myBatis 테스트</h1> <hr> <form action="mybatisselect"> <input type="submit" value="Select"> <br> </form><br> <form action="mybatistestinsert"> <input type="submit" value="Insert"> </form><br> <form action="mybatisdelete"> <input type="submit" value="입력값삭제"> <br> </form> </body>
소스코드 수행결과
프로젝트 구동시 위와 같은 기본화면이 나오게 됩니다.
여기서 insert와 select를 순차적으로 진행해 보겠습니다.
Insert
기본 화면에서 insert 버튼을 클릭하면 김유신 데이터가 들어가게 되는데요.
select를 통해서 입력한 값이 제대로 삽입되었는지 확인합니다.
delete
또한, delete를 통해 값을 삭제하고 다시 데이터를 확인해 보겠습니다.
정상적으로 값이 삭제된 모습입니다.
위의 방법대로 mybatis oracle 연동 절차를 수행했는데도 안되시면 위의 설정된 프로젝트를 받으셔서 적용해 보시기 바랍니다.
답글 남기기