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>
한번에 설정해서 그런지 뭐라지 내 이해로는 표가 있으면 한 행을 다 한번에 설정해서 좋아보임
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();
}
}
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 );
}
}
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
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]);
}
}
DefaultCategoryDataset dataset1 = new DefaultCategoryDataset(); // bar chart 1
DefaultCategoryDataset dataset12 = new DefaultCategoryDataset(); // bar chart 2
DefaultCategoryDataset dataset2 = new DefaultCategoryDataset(); // line chart 1