mybatis 를 이용해서 쿼리문 이용하다가 에러가 났다. 

 

이유는, 

PostRepository.java

package com.poscoict.jblog.repository;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.poscoict.jblog.vo.PostVo;

@Repository
public class PostRepository {
	@Autowired
	private SqlSession sqlSession;

	public List<PostVo> getPost(String blog_id) {
		return sqlSession.selectList("post.fintByid",blog_id);
	}
	
}
<?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="post">
	<select id="findByid" parameterType="string" resultType="list">
	<![CDATA[
		select * 
		from post
		ORDER BY no DESC;
	]]>
	</select>
</mapper>

PostRepository에서 list로 쿼리 결과값을 받아서 그럼 post.xml에서도 list로 반환하겠지? 라고 생각했는데

아니였다. 

<?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="post">
	<select id="findByid" parameterType="long" resultType="postvo">
	<![CDATA[
		select * 
		from post
		where category_no=#{category_no}
		ORDER BY no DESC;
	]]>
	</select>
</mapper>

 

List<PostVo>로 받기 때문에

resultType을 PostVo의 별칭인 postvo로 설정해주니깐 됐다!!!

 

'study > java' 카테고리의 다른 글

[Tomcat] 설치 및 eclipse 설정  (0) 2022.01.01
JAVA 상속(2)  (0) 2021.12.04
JAVA 상속  (0) 2021.12.04
[백준] 2750_수 정렬하기 (java)  (0) 2021.11.13
java Ajax 연습하기  (0) 2020.07.25

https://tomcat.apache.org/

 

Apache Tomcat® - Welcome!

The Apache Tomcat® software is an open source implementation of the Jakarta Servlet, Jakarta Server Pages, Jakarta Expression Language, Jakarta WebSocket, Jakarta Annotations and Jakarta Authentication specifications. These specifications are part of the

tomcat.apache.org

 

에 들어가서 

 

다운로드를 합니다. 

 

next

 

agree

 

다음에 쓸 것을 생각하고 

host Manager, Examples를 체크해주고 next해줍니다. 

 

까먹으면 안 되니깐, 

pass는 알기 쉬운 걸로!

 

next, next해줍니다 (설치경로는 알아서!)

 

지금 사용 안 할거라서! 

run체크 해제해주고, show도 해제해줍니다. 

 

설치 경로로 들어가서 tomcat폴더를 눌러준다. 

계속 버튼을 눌러줘야한다. 

 

bin 폴더의 Tomcat9w눌러준다. 

 

start눌러주고

http://localhost:8080/

눌러주고

창이 뜨길 기다린다. 

이 창이 뜨면 성공

 

tomcat을 eclipse에 등록하기

server에 server를 누르고 next누른다. 

apach에서 tomcat서버 설치했던 9.0을 선택해준다. 

 

설치했던 경로를 넣어준다. 

 

server가 보이면 등록완료

 

web프로젝트 만들기

 

tomcat확인 후 next, next누른다.

 

체크후 finish

 

이렇게 프로젝트가 만들어졌다. 

 

web-programming 환경설정

window-preferences-Web-HTML files에ㅔ 인코딩 옵션을 utf-8로 바꿔준다. 

css, jsp도 설정해준다. 

 

Properties들어가서

Java Editor - Project Facets - java를 11로 바꿔준다. 

 

JavaSE-11로 설정 된 것을 볼 수 있다. 

 

test라는 Dynamic Web Project를 이클립스에 등록하기

server에 있는 Tomcat을 마우스 오른쪽 클릭해서 Add adn Remove를 눌른다. 

 

test프로젝트를 configured에 Add해주고 finish해준다. 

 

 

'study > java' 카테고리의 다른 글

Error querying database. Cause: java.lang.UnsupportedOperationException  (0) 2022.02.05
JAVA 상속(2)  (0) 2021.12.04
JAVA 상속  (0) 2021.12.04
[백준] 2750_수 정렬하기 (java)  (0) 2021.11.13
java Ajax 연습하기  (0) 2020.07.25

어노테이션?

@기호를 사용해서 음 내 생각인데 음 아마,, 어,, 뭔가 유지 관리가 편함

한번에 설정해서 그런지 뭐라지 내 이해로는 표가 있으면 한 행을 다 한번에 설정해서 좋아보임

public static String[] one(){
	return new String[]{"번호", "이름", "가격"};
}
public Object[] getData(){
	return new Object[]{productNo, productName, price};
}

public static int[] getWidth(){
	return new int[]{100, 400, 200};
}

이게 

public class ProductVo{
	@Grid(name = "번호", width = 100, order = 1)
    private String productNo;
    
    @Grid(name = "이름", width = 400, order = 2)
    private String productName;
    
    @Grid(name = "단가", width = 200, order = 3)
    private String price;
}

이렇게 바뀜

 

 

다시 돌아가서, 

(Desc.java)

package object_1;

import java.lang.annotation.*;
/** 
 * toString()을 위한 @Desc어노테이션
 * */

@Retention(RetentionPolicy.RUNTIME)	//	자바 로딩 된 후에도 어노테이션 사용하겠어
@Target(ElementType.FIELD)	//	해당 어노테이션을  전연변수에만 사용하겠다.
public @interface Desc{
	public String name();	// @Desc(name = "속성명")사용 가능하게 타입 정의
}

 

(DefaultVo.java)

package object_1;

import java.lang.reflect.Field;
public class DefaultVo {
	@Override
	public String toString() {
		
		//StringBuffer 클래스 객체 생성 : 문자열 자료 저장하기 위함
		StringBuffer sb = new StringBuffer();
		
		//문자열에 Class 객체생성, 클래스 정보 저장
		Class<? extends DefaultVo> clazz = this.getClass();
		sb.append(clazz.getName() + "정보");
		
		//Field 목록 객체 생성
		Field[] declaredFields = clazz.getDeclaredFields();
		for(Field f : declaredFields) {
			if(f != null) {
				//변수 조회
				String name = f.getName();
				String desc = "";
				
				//@Desc 어노테이션에 명시된 name()값 조회 : 필드 항목명
				Desc anno = f.getDeclaredAnnotation(Desc.class);
				if(anno != null) {desc = anno.name();}
				
				//전역 변수 값 조회
				String value = "";
				try {
					//접근 권한 부여 -> 전역변수 값 조회 -> 접근 권한 복원
					boolean accessible=f.isAccessible();
					f.setAccessible(true);
					Object obj = f.get(this);
					if(obj != null) { value = obj.toString();}
					f.setAccessible(accessible);
				}catch(IllegalArgumentException e) {e.printStackTrace();
				}catch(IllegalAccessException e) {e.printStackTrace();}
				
				
				//앞 문자열에 name, value, desc의 정보를 갖는 문자열 추가
				sb.append("\r\n\t" + name + " = "+ value + " ["+ desc + "]");
				
			}
		}
		return sb.toString();
	}
}
  • @Override : 부모 클래스가 가지고 있는 함수를 재정의 한다. 
    • 재정의 된 로직이 실행됨
  • toString() : Object 클래스가 가지고 있는 함수
    • System.out.println이 실행될 때, 객체 toString()함수를 호출함 -> 객체를 Stirng 타입으로 반환해줌
  • StringBuffer() : 문자열 정보 관리

음 Desc에 저장되어 있는거 String으로 반환하려고 만든 거.

신기한건, <? extends DefaultVo>인데,, 클래스 정보가 저장이 되나봐

<? extend Object> 는 어떤 자료형의 객체도 매개변수로 받겠다는 의미라고 한다.

 

 

(ProductVo.java)

package object_1;

public class ProductVo extends DefaultVo{
	//전역 변수 정의
	@Desc(name = "품목번호")
	private String productNo;
	
	@Desc(name = "품목명")
	private String productName;
	
	@Desc(name = "단가")
	private int price;
	
	//getter setter 함수의 정의
	public String getProductNo() {return productNo;}
	public void setProductNo(String productNo) {
		this.productNo = productNo;
	}
	
	public String getProductName() {return productName;}
	public void setProductname(String productName) {
		this.productName = productName;
	}
	public int getPrice() {return price;}
	public void setPrice(int price) {this.price =price;}	
}

Desc 정보 저장.

 

(MemberVo.java)

package object_1;

public class MemberVo extends DefaultVo{
	
	//전역 변수 정의
	@Desc(name ="회원아이디")
	private String memberld;
	
	@Desc(name = "회원명")
	private String memberName;
	
	
	//getter sater함수 정의
	public String getMemberld() {return memberld;}
	public void setMemberld(String memberld) {this.memberld = memberld;}
	public String getMemberName() {return memberName;}
	public void setMemberName(String memberName) {
		this.memberName = memberName;
	}
}

 

(TestMain.java)

package object_1;

public class TestMain {
	public static void main(String [] args) {
		//prodectVo 객체 생성 -> 속성 설정 -> 객체정보 조회
		ProductVo v1 = new ProductVo();
		v1.setPrice(1000);
		v1.setProductname("아메리카노");
		v1.setProductNo("a001");
		System.out.println(v1);
		
		//MemberVo 객체 생성 -> 속성 설정 -> 객체 정보 조회
		MemberVo v2 = new MemberVo();
		v2.setMemberld("m001");
		v2.setMemberName("홍길동");
		System.out.println(v2);
	}
}

 

결과

 

음 실습 해보니깐 어노테이션 좀 알 것 같기도 하고,,

근데 막상 짜보라고 하면,, 

한번 실습 해보고싶다. 문제 줘서

ㅎㅎㅎ

get, set도 알겠당

 

근데 패키지가 너무 신기하네,, 패키지 안에만 있으면 import안 해도 다 연결이 되나봐,, 

 

 

출처 : 자바 프로그래밍 100% 실전 가이드 세트(애프터스킬 시리즈)(전2권) | 심상원 | 아이콕스 - 교보문고 (kyobobook.co.kr) -> 391~ 397쪽

 

 

'study > java' 카테고리의 다른 글

Error querying database. Cause: java.lang.UnsupportedOperationException  (0) 2022.02.05
[Tomcat] 설치 및 eclipse 설정  (0) 2022.01.01
JAVA 상속  (0) 2021.12.04
[백준] 2750_수 정렬하기 (java)  (0) 2021.11.13
java Ajax 연습하기  (0) 2020.07.25

상속

Object 클래스

package Object;

import java.lang.reflect.*;
import java.util.*;

public class Practice {
	public static void main(String[] args) {
	
		Class clz = Practice.class;
		
		Class superClass = clz.getSuperclass();
		System.out.println("부모 클래스 : "+ superClass);
		
		Field[] fields = superClass.getDeclaredFields();
		for(Field f: fields) {
			System.out.println("전력변수  = "+ f.getName());
		}
		
		Method[] methods = superClass.getDeclaredMethods();
		for (Method m : methods) {
			String name = m.getName();
			String parameterTypes = Arrays.toString(m.getParameterTypes());
			System.out.println("함수 = "+ name+" : "+parameterTypes);
		}
	}
}

결과 : 

부모 클래스 : class java.lang.Object
함수 = finalize : []
함수 = wait : [long]
함수 = wait : [long, int]
함수 = wait : []
함수 = equals : [class java.lang.Object]
함수 = toString : []
함수 = hashCode : []
함수 = getClass : []
함수 = clone : []
함수 = notify : []
함수 = notifyAll : []
함수 = registerNatives : []

 

  • 부모 클래스 : class java.lang.Object
    • 상속이 없으면 Object클래스가 부모 클래스임
    • Object는 클래스들의 기본, 최상위 타입

 

- hashCode() 함수

  • 객체에 해시코드 값을 반환하는 함수
  • 해시코드란 : 객체를 구별하기 위한 값, 메모리 주소를 바탕으로 정수화된 값
    • 객체의 해시코드 값의 중복이 일어날 가능성이 있음 -> 중복이란 말이 똑같은 곳 가리킨다는 것인가??? 근데 주의라고 적혀있으면 뭐지

- toString()함수

  • 해당 객체의 정보를 문자열로 반환하는 함수
  • 객체 정보 : '클래스명@해시코드(16진수로)' -> 대부분 재정의를 하여 사용함
    package Object;
    
    public class PracticeHash_toString {
    	public static void main(String [] args) {
    		PracticeHash_toString a = new PracticeHash_toString();
    		int hashCode = a.hashCode();
    		
    		// int to 16진수 : Integer.toHexString
    		String hexHashCode = Integer.toHexString(hashCode);
    		String toString = a.toString();
    		
    		System.out.println("클래스정보 : " +toString + "\nHeshcode 값 : " + hexHashCode );
    	}
    }​
     
    • 결과
      클래스정보 : Object.PracticeHash_toString@7d6f77cc
      Heshcode 값 : 7d6f77cc

 

super, protected

  • 부모 클래스 : Practice_Parent
package Object;

public class Practice_Parent {
	
	//전역 변수
	protected String name = "parent";
	public int value = 1;
	private Type type = Type.A;
	
	//enum 타입
	public enum Type {A,B,C,D};
}
  • 자식 클래스 : Practice_child
package Object;

public class Practice_child extends Practice_Parent{
	//전역 변수
	private int value = 2;
	{
		//비교1
		System.out.println("name = " + name);	//	부모 필드
		System.out.println("value = " + value);	//	자식 필드
		
		//비교 2
		System.out.println("super.name = " + super.name);
		System.out.println("super.value = "+ super.value);
		
		//비교 2
		System.out.println("this.name = "+ this.name);	//부모 필드
		System.out.println("this.value = " + this.value);	//자식필드
		
		System.out.println("부모 클래스의 enum 접근" + Type.A);
		
	}
	
	public static void main(String[] args) {
		new Practice_child();
	}
}
  • 결과 
name = parent
value = 2
super.name = parent
super.value = 1
this.name = parent
this.value = 2
부모 클래스의 enum 접근A
  • 자식에 없는 변수를 부모꺼 씀
  • 만약 자식에도 변수가 있고, 부모에도 있다면 자식에서 사용시 자식꺼 먼저 사용함
  • 부모꺼 사용하고 싶을 땐, super이용
  • super없으면 부모보단 자식이 우선순위가 높음 (자식에서 사용할 때)

 

 

출처 : 

자바 프로그래밍 100% 실전 가이드 세트(애프터스킬 시리즈)(전2권) | 심상원 | 아이콕스 - 교보문고 (kyobobook.co.kr)

 

자바 프로그래밍 100% 실전 가이드 세트 - 교보문고

기본은 물론 응용까지 새로운 JAVA 필독서 | 단순히 웹 영역을 넘어 일반 응용 프로그래밍 분야에 이르도록 거의 모든 개발자들에게 필수 언어가 되어가고 있는 자바(Java)는 그 유연한 활용도만큼

www.kyobobook.co.kr

 

'study > java' 카테고리의 다른 글

[Tomcat] 설치 및 eclipse 설정  (0) 2022.01.01
JAVA 상속(2)  (0) 2021.12.04
[백준] 2750_수 정렬하기 (java)  (0) 2021.11.13
java Ajax 연습하기  (0) 2020.07.25
jfreechart bar그래프 두 개 그리기  (0) 2020.07.23

자바 공부하기 위해 한번 작성하면서 공부를 해보겠다.

 

https://www.acmicpc.net/problem/2750

 

2750번: 수 정렬하기

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

www.acmicpc.net

 

정렬부터 시작했는데, 

먼저 첫 번째는 

Arrays함수를 사용해서 sort함수 이용해서 했다. ㅎㅎㅎㅋㅋㅋㅋ

import java.util.*;

public class Main{
	public static void main(String args[]){
		Scanner scanner = new Scanner(System.in);
		int N= scanner.nextInt();
		int array[] = new int[N];
		for(int i = 0; i<N; i++) {
			array[i]= scanner.nextInt();
		}
		Arrays.sort(array);
		for(int i = 0; i<N; i++)
			System.out.println(array[i]);
	}
}

뭐 함수를 써보긴 해야 하니깐,, 

 

 

두 번째는 

버블 정렬을 사용했다. 

import java.util.*;
//버블 정렬
public class Main{
	public static void main(String args[]){
		Scanner scanner = new Scanner(System.in);
		int N= scanner.nextInt();
		int array[] = new int[N];
		for(int i = 0; i<N; i++)
			array[i]= scanner.nextInt();
		
		for(int i = 0; i<N-1; i++) {
			for(int row = 0, tem = 0; row <N-1-i; row++) {
				if(array[row] > array[row+1]) {
					tem = array[row];
					array[row] = array[row+1];
					array[row+1] = tem;
				}
			}
		}
		for(int i = 0; i<N; i++)
			System.out.println(array[i]);
	}
}

 

선택정렬

package backjoon;

import java.util.*;
//버블 정렬
public class Main{
	public static void main(String args[]){
		Scanner scanner = new Scanner(System.in);
		int N= scanner.nextInt();
		int array[] = new int[N];
		for(int i = 0; i<N; i++)
			array[i]= scanner.nextInt();
		
		for(int i = 1,j; i<N;i++) {
			int compare_num = array[i];
			for(j = i-1; j>=0 && array[j]>compare_num; j--)
				array[j+1] = array[j];
			array[j+1] = compare_num;
			}
		for(int i = 0; i<N; i++)
			System.out.println(array[i]);
	}
}

 

확실히 정렬을 오랜만에 만들어보는데

저학년일 때보다는 낫다,,

 

더 해보자,, 

'study > java' 카테고리의 다른 글

[Tomcat] 설치 및 eclipse 설정  (0) 2022.01.01
JAVA 상속(2)  (0) 2021.12.04
JAVA 상속  (0) 2021.12.04
java Ajax 연습하기  (0) 2020.07.25
jfreechart bar그래프 두 개 그리기  (0) 2020.07.23

https://www.youtube.com/watch?v=P4eOHI6OGks

 

index.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
	pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Demo</title>
<script type="text/javascript" src="js/jquery-3.5.1.min.js"></script>
<script type="text/javascript">
	$(document).ready(function() {

		$('#bttHello').click(function() {
			var fullname = $('#fullname').val();
			$.ajax({
				type : 'POST',
				data : {
					fullname : fullname,
					action : 'demo1'

				},
				url : 'AjaxController',
				success : function(result) {
					$('#result1').html(result);

				}
			});
		});

		$('#bttSum').click(function() {
			var number1 = $('#number1').val();
			var number2 = $('#number2').val();
			$.ajax({
				type : 'POST',
				data : {
					number1 : number1,
					number2 : number2,
					action : 'demo2'

				},
				url : 'AjaxController',
				success : function(result) {
					$('#result2').html(result);

				}
			});
		});
	});
</script>
</head>
<body>
	<fieldset>
		<legend>Demo 1</legend>
		<form>
			Name <input type="text" id="fullname"> <input type="button"
				value="Hello" id="bttHello"> <br> <span id="result1"></span>

		</form>
	</fieldset>

	<fieldset>
		<legend>Demo 2</legend>
		<form>
			Number 1 <input type="text" id="number1"><br> 
			Number 2 <input type="text" id="number2"><br> 
			Result <span id="result2"></span><br>
			<input type="button" value="Sum" id="bttSum">

		</form>
	</fieldset>
</body>
</html>

 

 

AjaxController.java

package controller;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class AjaxController
 */
@WebServlet("/AjaxController")
public class AjaxController extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public AjaxController() {
		super();
		// TODO Auto-generated constructor stub
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		// response.getWriter().append("Served at: ").append(request.getContextPath());

	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		// doGet(request, response);

		response.setContentType("text/plain");
		PrintWriter out = response.getWriter();
		String action = request.getParameter("action");
		if (action.contentEquals("demo1")) {
			String fullname = request.getParameter("fullname");
			out.print("Hello " + fullname);
		}
		else if(action.equals("demo2")) {
			int number1 = Integer.parseInt(request.getParameter("number1"));
			int number2 = Integer.parseInt(request.getParameter("number2"));
			out.println(number1 + number2);
			
		}
	}

}

 

 

.

 

결과 

신기하게 바뀐 부분만 바뀐다. 

 

이걸로 비동기화를 이용하여 데이터 베이스 내용을 출력해 볼 것이다. 

'study > java' 카테고리의 다른 글

[Tomcat] 설치 및 eclipse 설정  (0) 2022.01.01
JAVA 상속(2)  (0) 2021.12.04
JAVA 상속  (0) 2021.12.04
[백준] 2750_수 정렬하기 (java)  (0) 2021.11.13
jfreechart bar그래프 두 개 그리기  (0) 2020.07.23

https://androphil.tistory.com/441

 

[JFreeChart] 무료 자바 차트 사용법 및 예제

JfreeChart 홈페이지: http://www.jfree.org/jfreechart/ JFreeChart를 이용한 그래프의 데모 시연 http://www.jfree.org/jfreechart/jfreechart-1.0.13-demo.jnlp 위에서 확인한 그래프의 소스코드를 확인할 수..

androphil.tistory.com

jfreechart를 사용하려고 

예제를 이용하여 값을 집어 넣었다.

 

그런데 

 

 

내가 원한거는 한개의 카테고리에 두 개 나타내는 것이다./

 

예제를 한참 보고 분석하다가


        DefaultCategoryDataset dataset1 = new DefaultCategoryDataset();                // bar chart 1

        DefaultCategoryDataset dataset12 = new DefaultCategoryDataset();         // bar chart 2

        DefaultCategoryDataset dataset2 = new DefaultCategoryDataset();                // line chart 1

bar char안에 두개를 넣어야 하는데

각자 한 것이다.

ㅎㅎㅎㅎㅎ

예제가 그래서 저렇게 나타나구나를 배웠다 ㅎㅎㅎㅎ

 

 

dataset12를 지우고

 

dataset1안에 모든 값을 집어 넣었다.

 

 

신난당

 

 

 

'study > java' 카테고리의 다른 글

[Tomcat] 설치 및 eclipse 설정  (0) 2022.01.01
JAVA 상속(2)  (0) 2021.12.04
JAVA 상속  (0) 2021.12.04
[백준] 2750_수 정렬하기 (java)  (0) 2021.11.13
java Ajax 연습하기  (0) 2020.07.25

+ Recent posts