[JDBC] mapper 2개로 분리, JDBC에 HashMap 적용, ArrayList적용 예제

Devel/JDBC|2020. 8. 21. 09:15
반응형

-mapper 2개로 분리

Configuration에서 mapper 하나 더 추가

 

+error 에러 발생

Exception in thread "main" java.lang.ExceptionInInitializerError

       at com.service.OracleMyBatisService.update(OracleMyBatisService.java:70)

       at OralceMyBatisMain.main(OralceMyBatisMain.java:20)

에러 이유는 

mapper 내용이 중복되기 때문에 error가 발생한다. 

mapper2번 내용 다 지운 후 mapper1과 겹치는 내용 지운다.

 

mapper 2개 사용할 경우

namesapce는 이름을 부여한다.

나중에 클래스에 불러올때 namespace와 id를 붙여 사용

 

 

mapper2도 수정

 

 

mapper분리 후 사용 시 com.dept.DeptMapper를 붙여 사용해 준다.

 

 

-Configuration

com.dto.Dept를 typealias지정

 

mapper 수정해준다.

 

 

-

Jdbc 숫자 2개를 받아 (between 사용해서) hashmap사용하기

 

//select deptno ~~ between a and b

//main에서 hashmap 생성 a, b 값 설정 service => dao로 인자로 넘김

//sql에서 key를 이용 a,b 값을 설정 (parameterType = hashmap)

 

-mapper

<select id="selectHash" parameterType="HashMap" resultType="Dept">

select deptno, dname, loc from dept where deptno between #{deptno} and #{deptno1}

</select>

 

 

-DAO

public List<Dept> selectByHashMap(SqlSession session,HashMap<String,Integer> map){

              List<Dept> list = session.selectList("com.dept.DeptMapper.selectHash", map);           

       return list;

       }

 

-service

public List<Dept> selectByHashMap(HashMap<String,Integer> map){

              //select deptno ~~ between a and b

              //main에서 hashmap 생성 a, b 값 설정 service => dao로 인자로 넘김

              //sql에서 key를 이용 a,b 값을 설정 (parameterType = hashmap)

              SqlSession session= MySqlSessionFactory.getSqlSession();

              List<Dept> list = null;

              try {

                     list = dao.selectByHashMap(session, map);

                     session.commit();

              } finally {

                     session.close();

                     

              

              }

       

       return list;

       }

 

 

-main

              HashMap<String,Integer> map = new HashMap<String,Integer>();

              map.put("deptno", 10);

              map.put("deptno1", 50);    

       

                     List<Dept> list = service.selectByHashMap(map);               

                     for(Dept dept : list) {

                           System.out.println(dept);

                     }

 

-

Jdbc 숫자 3개를 받아 (in 사용해서) hashmap사용하기

-mapper

 <select id="selectByDeptnoIn" parameterType="HashMap" resultType="Dept">

 select deptno, dname, loc from dept where deptno in (#{deptno}, #{deptno1}, #{deptno2})

 </select>

 

-dao

public List<Dept> selectBydeptNoIn(SqlSession session,HashMap<String,Integer> map){

              List<Dept> list = session.selectList("com.dept.DeptMapper.selectByDeptnoIn", map);

              return list;

       }

 

-service

public List<Dept> selectBydeptNoIn(HashMap<String,Integer> map){

              SqlSession session= MySqlSessionFactory.getSqlSession();

              List<Dept> list = null;

              try {

                     list = dao.selectBydeptNoIn(session, map);

                     session.commit();

              } finally {

                     session.close();

              }

              return list;

       }

 

-main

HashMap<String,Integer> map = new HashMap<String,Integer>();

                     map.put("deptno", 10);

                     map.put("deptno1", 50);    

                     map.put("deptno2", 15);    

                     

                     List<Dept> list = service.selectBydeptNoIn(map);

                     for(Dept dept : list) {

                           System.out.println(dept);

                     }

 

 

-

//deptno을 이용하여 부서, 정보를 하나 select 후 hashmap에 담아

//메인에서 출력 - 단 부서이름만 출력 할 것.

 

-mapper

<select id="selectByHash" parameterType="int" resultType="HashMap">

 select deptno, dname, loc from dept where deptno = #{deptno}

 </select>

 

-Dao

public HashMap selectByDeptnoHashMap(SqlSession session, int deptno){

            HashMap map = session.selectOne("com.dept.DeptMapper.selectByHash", deptno);          

            return map;

      }

 

-service

public HashMap selsectByDeptnoHashMap(int deptno) {

            //deptno을 이용하여 부서, 정보를 하나 select 후 hashmap에 담아

            //메인에서 출력 - 단 부서이름만 출력 할 것.

            SqlSession session= MySqlSessionFactory.getSqlSession();

            HashMap map = null;

            try {

                  map = dao.selectByDeptnoHashMap(session, deptno);

                  session.commit();

            } finally {

                  session.close();

            }

            

            return map;

      }

-main

HashMap map = service.selsectByDeptnoHashMap(10);

            Set<String>keys = map.keySet();

            System.out.println(map);

            System.out.println(keys);           

            System.out.println(map.get("DNAME"));

 

 

 

 

 

 

댓글()
loading