Mybatis 문자를 숫자로 - Mybatis munjaleul susjalo

728x90

[java/spring] 문자열을 정수로 변경하는 Interger.parseInt 사용법 및 예제

java에서

문자열을 숫자로 변경해야 할때

parseInt 라는 함수를 사용합니다.

아래는 그 사용법과 예제 입니다.

1. 기본 사용법입니다.

Integer.parseInt("1111");

2. 진수별로 옵션을 주는 방법입니다.

Integer.parseInt("1111", 8);    // 8진수로 표기
Integer.parseInt("1111", 10);    // 10진수로 표기

위 내용보시면 아시겠지만,

기본적으로 인자는 2개가 들어가는데

뒤에 들어가는 인자는 몇진수로 표기할껀지에 관한 내용으로 옵션입니다.

입력하지 않으면 기본값은 10 입니다.

참고들 하세요!

반응형

저작자표시비영리변경금지

'개발 > java & jsp' 카테고리의 다른 글

[java/jsp] jsp session vo 사용하기  (0) 2021.03.21
[java/jsp] jstl unknown tag c 에러 해결방법  (0) 2021.03.21
[java/spring] jsp jstl numberFormat 사용법 및 예제  (0) 2021.03.14
[spring/mybatis] mapUnderscoreToCamelCase 설정 방법  (0) 2021.03.13
[java/spring] 스프링 decode 방법  (0) 2021.03.09

개념


숫자(INT)형 문자(varchar)를 기준으로 정렬하게 되면 원하는 대로 되지 않는다.

바아로~ 해결 해봅시다.

문법


문법에 들어가기 앞서, 공통 테이블 예시

CREATE TABLE orderEx (

id INT PRIMARY KEY AUTO_INCREMENT,
varcharId VARCHAR(64),
textId TEXT(64)

)

INSERT INTO orderex VALUES(1,'col1','1');

INSERT INTO orderex (varcharId,textId) VALUES('col2','2');
INSERT INTO orderex (varcharId,textId) VALUES('col3','3');
INSERT INTO orderex (varcharId,textId) VALUES('col4','4');
INSERT INTO orderex (varcharId,textId) VALUES('col5','5');
INSERT INTO orderex (varcharId,textId) VALUES('col6','6');
INSERT INTO orderex (varcharId,textId) VALUES('col7','7');
INSERT INTO orderex (varcharId,textId) VALUES('col8','8');
INSERT INTO orderex (varcharId,textId) VALUES('col9','9');
INSERT INTO orderex (varcharId,textId) VALUES('col10','10');
INSERT INTO orderex (varcharId,textId) VALUES('col11','11');
INSERT INTO orderex (varcharId,textId) VALUES('col12','12');

예시 테이블 orderex

Mybatis 문자를 숫자로 - Mybatis munjaleul susjalo

만약 varcharId 컬럼 기준으로 ORDER BY를 하게 되면 결과는 이렇다.

SELECT * FROM orderex ORDER BY varcharId 

결과 

Mybatis 문자를 숫자로 - Mybatis munjaleul susjalo

이와 같이 개 같은 결과가 나온다.(물론 textId의 ORDER BY 결과도 동일하다)

해결


정렬(오름차순)

SELECT * FROM orderex ORDER BY varcharId*1

결과

Mybatis 문자를 숫자로 - Mybatis munjaleul susjalo

만약 역 정렬하고 싶다면?

역 정렬(내림차순)

SELECT * FROM orderex ORDER BY length(varcharId) desc,varcharId desc

결과

Mybatis 문자를 숫자로 - Mybatis munjaleul susjalo

예제 파일 제공


[MariaDB] varchar ORDER BY.sql

0.00MB

하나하나씩

#Java 자문자답

일련의 숫자를 문자열에서 다른 숫자로 변환Mybatis 등록 정보 파일을 Tomcat의 사용자 정의 위치로 이동

하나하나씩 2017. 10. 9. 00:37

# 질문 : 

꽤 많이 나는 일어날 필요가있다. 나는 끈을 가져 가야 할까?

 String ln = "It's so pretty! �";

아이디어, 우리는이 줄을 가져 가고 있습니다. 줄의 끝을 변환합니다.

�

으로

🀽

그렇게 쉽게 변환 할 수 있지만 문제는 여러 숫자로 변경 될 수 있습니다. 그 끈은 ...

 String ln = "It's so pretty! �� But � �";

그리고 저는 그 라인의 모든 숫자를 변환해야합니다.

이것의 목적은 각각의 코드들 중 하나이며, 캐릭터의 유니 코드이지만, 숏 핸디이며, 필자가 필요로하는 목적에 맞지 않습니다.

모든 숫자는 같은 형식으로되어 있으며 항상 5 자입니다.

모든 코드는 "& #"로 시작하여 세미콜론으로 끝납니다.

모든 코드는 문자열의 아무 곳에 나있을 수 있습니다.

숫자를 변환하는 메서드를 만들려고 할 때 "& #"에 문자열을 거의 분할하고 모든 경우에 대해 직렬로 연결되지 않은 경우를 제외하고 모두 작동합니다. 예를 들어,

String ln = "Gahh it's so pretty. ������";

해당 문자열을 해결하고 모든 숫자를 변환하며 원래대로 문자열을 수정 된 숫자로 다시 만들 수 있습니다. 그러나 숫자 코드 사이에 간격을두고 문자열을 다시 만들지는 않습니다.

이것은 제가 사용했던 코드입니다. 제가 말했던 것처럼, 그것은 마치 한 경우에만 변환됩니다. 그리고 나는 모든 경우에 작동하도록 만드는 방법을 찾지 못했습니다.

public static void main(String args[]) {

    String ln = "Gahh it's so pretty. ������";

    //71680 + code present

    //Gahh it's so pretty. ������

    String tmp = ln;

    String[] codes = tmp.split("&#");

    System.out.println(ln);

    ArrayList<Integer> ids = new ArrayList<>();

    for (int i = 0; i < codes.length; i++) {

        codes[i] = codes[i].trim();

        if (codes[i].length() != 6)

            continue;

        if (codes[i].endsWith(";")) {

            codes[i] = codes[i].substring(0, codes[i].length()-1);

        }

        try {

            ids.add(Integer.parseInt(codes[i]) + 71680);

        } catch (NumberFormatException e) {

            System.err.println("Error in conversion: " + codes[i]);

        }

    }

    //System.out.println(Arrays.toString(codes));

    codes = tmp.split("&#\\d{5}");

    //System.out.println(Arrays.toString(codes));

    for (int i = 0; i < codes.length; i++) {

        //System.out.println(codes[i]);

        if (codes[i].equals(";")) {

            codes[i] = "&#"+ids.remove(0)+";";

        }

    }

    for (String s : codes)

        System.out.print(s);

    System.out.println();

}

나는 이것에 대한 정보가 필요하다. 몇 가지 문제를 해결하고 싶다면 기꺼이 도움을 받아야하지만 솔직히이 문제에 어떻게 접근 할 것인지 관심이 있습니다.

SQL Server에 연결하기 위해 mybatis가 필요한 웹 응용 프로그램이 있습니다.

dburl, username, password 등이 들어있는 jdbc.properties와 별도의 등록 정보 파일이 있으며 mybatis-config.xml 파일에는 다음과 같은 내용이 있습니다.

    <properties resource="jdbc.properties"/>

jdbc.properties 파일을 src 폴더에 추가하면 제대로 작동합니다.

하지만 "catalina_home / bin / config"폴더에 여러 다른 속성 파일이 있으므로 jdbc.properties 파일을 해당 위치로 이동하려고합니다.

그러나 Mybatis는 리소스 경로를 어떻게 변경했는지에 상관없이 속성 파일을 읽을 수 없습니다.

그러나 jdbc.properties 파일을 "catalina_home / lib"폴더로 옮기면 작동합니다. 따라서 나는이 "../bin/config"와 같은 리소스 경로를 시도하지만 그 중 하나는 작동하지 않습니다.

내 질문은 jdbc.properties 파일을 bin / config 폴더로 옮기고 mybatis가 거기에서 읽을 수있게 할 수 있는가이다.

편집 : 내 프로덕션 환경 CATALINA_HOME 위치를 변경할 수 있으므로 구성 파일 위치에 전체 경로를 부여 할 수 없습니다.

# 자답 : 

정규 표현식을 조사해야합니다.

 Pattern pattern = Pattern.compile("&#(\\d+);");

should work to find all the numbers in your string. The Matcher objects also have methods start() and end() to get the offsets of the matches so you can use those to make substrings to help build up your new String

mybatis가 이러한 속성 파일을 찾을 수없는 이유는 tomcat의 bin/config폴더가 tomcat (또는 웹 응용 프로그램)의 클래스 경로에 있지 않기 때문입니다 $CATALINA_HOME/lib. mybatis는 resource클래스 패스의 attribute에 지정된 파일을 찾는다 . url속성 을 사용 하면 파일에 전체 경로 이름을 지정할 수 있습니다.

<properties url="/full/path/to/you/jdbc.properties"/>