StudyServer
web, server, java, spring 등.. 공부한 것을 기록하는 장소 입니다. 공부하면서 정리하였기 때문에 틀린 내용이 있을 수 있습니다. 이야기 해주시면 수정하겠습니다.

ajax로 데이터 전달/응답 받는법

2019-01-15 00:00:00 +0000

데이터 전달 주의사항

  • JavaBeans는 sevlet이란 Controller가 없을 때, jsp에서 jsp로 데이터를 전달할 때 사용한다.
  • servlet을 Controller로 사용한다면 Attribute에 데이터를 저장하고 cos라이브러리를 사용해 ${AttributeName} 처럼 간단하게 사용할 수 있다

ajax요청 처리 순서

ajax 요청

$.ajax({
	url:'projectBoardRead.do',
	data: {"project_id":project_id},
	dataType:'json',
	success:function(data){
	console.log("성공");
    }

list를 Attribute에 넣어줌

forward.setRedirect(false);
forward.setPath("/jsp/module/schedule/calenderListJsonParse.jsp");

data를 json으로 변환

  • java에서 해도 되지만 간편하게 하기위해 jsp 사용
  • < html > 같은 태그는 전부 삭제해야 한다
  • out.println도 사용하면 안된다(에러의 원인이 될 수도 있음)
  • 반드시 하나의 list만 된다(Attribute를 두개 넣지 않는다)
  • 왜냐하면 json은 서로 다른 데이터를 받으면 parsing 하지 못하기 때문이다
  • json 변환을 해서 ajax 요청 성공 시 데이터를 간편하게 parsing할 수 있다
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="kosta.model.module.vo.ScheduleCalender"%>
<%@page import="kosta.model.module.vo.ScheduleCategory"%>
<%@page import="java.util.List"%>
<%@page import="net.sf.json.JSONArray"%>
<%@page import="java.util.ArrayList"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%!
	List<ScheduleCategory> category_list;
	List<ScheduleCalender> calender_list;
%>
<% 
	category_list = (List<ScheduleCategory>)request.getAttribute("categoryList");
	//System.out.println("list: " + category_list.size());
	//calender_list = (List<ScheduleCalender>)request.getAttribute("calenderList");
	//out.println(category_list);
	System.out.println(JSONArray.fromObject(category_list).toString());
	out.println(JSONArray.fromObject(category_list).toString());
%>

json 데이터 출력

  • 이미 json으로 변경했으므로 따로 json으로 변환할 필요 없음
  • ajax 요청 성공 시 json으로 데이터 변경은 안되는지 궁금
if(false == data[i].isNull("category_id"))
   	console.log(data[i].category_id);

json 사용 시 필요한 라이브러리

  • commons-beanutils.jar
  • commons-collections-3.2.jar
  • commons-lang-2.4.jar
  • commons-logging-1.1.jar
  • ezmorph-1.0.6.jar
  • json-lib-2.3-jdk13.jar

mybatis error

2019-01-08 00:00:00 +0000

Mybatis 에러 정리

Error registering typeAlias for ‘Board 에러
Error building SqlSession.
The error may exist in SQL Mapper Configuration
Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL  Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Error  registering typeAlias for 'Board'. Cause:
  • MyBatis Config에 typeAliases에 선언된 class를 찾을 수 없다는 에러. 확인해보니 Config 에서 class명을 잘못적어서 수정하였다
부적합한 열 유형 1111 에러
g.apache.ibatis.exceptions.PersistenceException:
Error updating database.  Cause: org.apache.ibatis.type.TypeException: Error setting null for parameter #1 with JdbcType OTHER . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property. Cause: java.sql.SQLException: 부적합한 열 유형: 1111
  • servlet에 넘어온 데이터가 NULL이었고 NULL 데이터를 사용하려고 해서 발생
invalid character 에러
Error updating database.  Cause: java.sql.SQLSyntaxErrorException:  ORA-00911: invalid character
The error may involve kosta.mapper.BoardMapper.insertBoard-Inline
The error occurred while setting parameters
SQL: insert into board values(board_seq.nextval, ?, ?, ?, sysdate, 0);
Cause: java.sql.SQLSyntaxErrorException: ORA-00911: invalid character
  • db 쿼리문 끝에 세미콜론(;)을 붙임
The Network Adapter could not establish the connection
The error may exist in kosta/mapper/Board.xml
The error may involve kosta.mapper.BoardMapper.selectList
The error occurred while executing a query
Cause: java.sql.SQLException: Cannot create PoolableConnectionFactory (IO  오류: The Network Adapter could not establish the connection)
  • 오라클 서비스가 꺼져있었다

mybatis 게시판 만들기 순서

2019-01-02 00:00:00 +0000

게시판 만들기 정리

파일 작성순서

  1. xml 파일 작성
  2. ado 작성
  3. jsp 작성

게시물 삭제 추가하기

  • 데이터 추가,삭제에 따라 태그명이 달라진다. 삭제 태그명은 delete이다
  • xml에 id명(함수명), parameter, return 값을 생각하고 정의한다
  • 태그의 id는 ado 함수명과 일치시켜야 한다
<delete id="deleteContents" parameterType="int">
delete from board where seq = #{seq}
</delete>
  • mapperClass에 삭제 함수선언
int deleteContents(int seq);
  • dao 삭제 함수 추가
public int deleteContents(int seq){
SqlSession sqlSession = getSqlSessionFactory().openSession();
int re = -1;
try{
    re =  sqlSession.getMapper(BoardMapper.class).deleteContents(seq);
    if(re > 0){
        sqlSession.commit();
    }else{
        sqlSession.rollback();
    }
}catch(Exception e){
    e.printStackTrace();
}finally{
    sqlSession.close();
}
return re;
}
  • jsp 수정. 삭제 링크를 누르면 게시물이 바로 삭제되도록 한다
  • get방식으로 parameter를 전달한다
<td><a href="delete.jsp?seq=<%= board.getSeq() %>">삭제하기</a></td>
  • 삭제링크 클릭 시 이동하는 delete.jsp 파일을 만든다
  • dao 객체의 데이터 삭제 함수를 호출한다.
<%
int seq = Integer.parseInt(request.getParameter("seq"));
BoardDao2 dao = BoardDao2.getInstance();
int re = dao.deleteContents(seq);
if(re > 0)
       out.println("삭제 성공");
else
       out.println("삭제 실패");
%>

Java Jsp Mybatis Dynamic Query

2019-01-02 00:00:00 +0000

동적쿼리

동적쿼리란?

  • db 데이터를 crud할 때 조건이 변할 수 있다
  • 제목으로 게시물 검색, 작성자이름으로 게시물 검색이 있을 때 조건이 제목, 작성자 이름 둘 중하나로 바뀐다
  • 이 때 조건이 계속 바뀌므로 동적 쿼리를 사용해서 조회해야한다
  • 아래 예제에서 foreach는 조건이 여러개일 때(ex 체크박스) 사용한다
  • collection은 foreach로 돌때마다 선택되는 객체를 의미한다. area 객체 개수만큼 foreach문이 돈다
  • item은 구분하기 위한 임의의 이름이다
  • separator은 반복되는 사이에 출력할 구문이다

Source

<select id="listBoard" resultType="Board" parameterType="Search">
    select * from board
    <if test="area">
    <where>
        <!--( title LIKE %aa% OR writer LIKE %aa% )-->
        <foreach collection="area" item="item222"  separator="OR" open='(' close=')'>
        <!-- $로해줘야한다 상수처럼 리터럴 상수처럼 사용되어야  한다. 변수가 되면 안되기 때문에 #->$ -->
         ${item222} LIKE #{searchKey}
         </foreach>
         </where>            
   </if>
</select>

mybatis

2019-01-01 00:00:00 +0000

MyBatis

MyBatis란

  • 프레임워크란 잘 짜여진 하나의 틀
  • 일관성 있는 코드를 사용할 수 있다
  • Low Level의 고민들을 개발자가 고민하지 않아도 된다(핵심 비즈니스 로직에 집중)
  • jpa,hibernate
  • db에 쉽게 접근하고 데이터를 쉽게 가져오기 위해 사용(jdbc)
  • Row의 결과값을 가지고 자바 오브젝트를 매핑을 한다

Object Relational Mapping(ORM) Framework

  • jpa, hibernate
  • 각 테이블과 1:1 매칭관계
  • 테이블과 테이블이 join되면 실제 자바 오브젝트도 join되어야 함

MyBatis 정보

  • mybatis-config.xml 에 MyBatis의 모든 정보가 들어가 있음
  • mybatis-config.xml에 있는 정보를 가져오고 sqlSession 정보를 뽑는다. 그리고 Mapping한 함수를 호출해서 query를 실행시킨다

Mapper방식

  • 고유한 이름으로 메서드를 만드는 방식
  • xml파일을 추가하고 각 함수에 따라 query문을 만든다. interface도 추가해서 함수를 정의한다

JSTL

  • DB에서 조건문을 주지 않고 JSTL 문을 사용할 수 있다

MyBatis 라이브러리 추가

  • myBatis download url
  • mybatis-3.2.6.jar tomcat lib 폴더에 추가(프로젝트 폴더서 추가되었는지 확인할 것)
  • jdbc lib 위치 : C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib
  • oracle에 있는 jdbc lib를 tomcat lib 폴더에 넣는다
  • ‘mybatis-config.xml’ 파일을 src 폴더 밑에 놓는다

Posts

subscribe via RSS