일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 리액트
- 정보처리기사
- 타입스크립트
- VUE
- 평일코딩
- typescript
- javascript
- 자바스크립트
- 스프링
- 정보처리기사정리
- 정보처리기사실기
- 코딩테스트
- php
- 국비IT
- 정보처리기사요약
- 자바의정석
- Java의정석
- 정보처리기사실기요약
- 자바스크립트 코딩테스트
- 자스코테
- 국비코딩
- 이안의평일코딩
- 정보처리기사실기정리
- ReactNative
- 리액트네이티브
- spring
- 오라클
- CSS
- react
- Oracle
- Today
- Total
이안의 평일코딩
XML 1일차 - XML태그 본문
2020.09.16(수)
JAXB API 2.3.1.jar
mvnrepository.com/artifact/javax.xml.bind/jaxb-api
json-simple-1.1.1.jar
bundle
mvnrepository.com/artifact/com.googlecode.json-simple/json-simple/1.1.1
영화관 박스오피스
kobis.or.kr/kobis/business/main/main.do
xml 가져오기 연습용
newssearch.naver.com/search.naver?where=rss&query=%EC%98%81%ED%99%94
MVC (확장자를 사용자 마음대로 설정) => 실무에서 70% 사용
HTML (고정된 태그) = XML 코드는사용자 정의
XML => 1) 태그 2) 속성
=> HTML과 다른점
1) 문법이 어렵다
2) HTML은 화면 출력하는 목적, 문서 저장 목적 (파일형 데이터베이스)
3) 태그나 속성에서 대소문자를 구분한다
4) 속성에 값을 대입할 때 = 반드시 ""를 사용한다
5) 여는태그 닫는태그는 반드시 일치
6) Spring, Mybatis => XML기반
=> 장점
1) 호환성이 좋다 (스마트폰, 리눅스, 윈도우) => 운영체제에 상관없이 사용이 가능
=> 단점
2) XML코드가 길어지면 속도가 느려진다 (분산처리) : 여러개를 나눠서 처리
=> Spring, Mybatis : 업체마다 XML코드가 다르기 때문에 제공하는 XML만 사용해야된다 (XML태그를 외워야한다)
=> DTD파일을 제공 (태그가 정의되어 있는 문서)
XML을 주로 사용하는 부분 ==> 변환 (Annotation)
=> Spring, Mabtis => 업체 요구사항
= Ajax => javascript and XML
= javascript 5 => javascript 6 (XML)
= React / VueJS
= AI => 데이터 수집 (XML)
= Kotlin => XML기반
=> 사용자 정의 태그를 만든다 <태그명> : 사용자 정의
1) 문법
= 알파벳, 한글로 시작한다(알파벳:대소문자구분)
<a>!=<A>
= 숫자를 사용할 수 있다 (앞에 사용금지)
<2a>(X) => <a2> <a3>...
= 태그에 공백이 있으면 안된다
< abc>(X) <file name>(X)
= 특수문자 사용이 가능 ( _ , - , .)
<file_name> <file-name> <file.name>
= 키워드는 사용할 수 없다 => <xml>
= HTML태그는 사용이 가능 (문서로 저장)
= 여는태그와 닫는태그가 반드시 일치
<a><b><c></c></b></a> : 계층구조가 있어야 완성된다
= 태그의 종류
여는태그 : <table> <a>
닫는태그 : </table> </a>
빈태그 : <br/> <img/>
= XML태그는 반드시 최상위 태그가 존재
<a></a> (O)
<a></a>
<b></b> (X)
<a>
<b></b>
</a> (O)
= 권장사항
알아보기 쉬운 태그명을 사용한다(시멘텍 태그)
예)
<a>홍길동</a> (X)
<name>홍길동</name> (O)
mybatis-3.2.8.zip
github.com/mybatis/mybatis-3/releases/tag/mybatis-3.2.8
sawon.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
HTML (고정된 태그) => XML 코드는 사용자 정의
XML => 1) 태그
2) 속성
=> HTML과 다른점
1) 문법이 어렵다
2) HTML은 화면 출력하는 목적 , 문서 저장 목적 (파일형 데이터베이스)
3) 태그나 속성에서 대소문를 구분한다
4) 속성에 값을 대입할때 = 반드시 ""를 사용한다
5) 여는태그 닫는 태그는 반드시 일치
6) Spring , Mybatis => XML기반
=> 장점
1) 호환성이 좋다 (스마트폰,리눅스,윈도우) => 운영체제에 상관없이 사용이 가능
=> 단점
2) XML코드가 길어지면 속도가 늦어진다 (분산처리) : 여러개를 나눠서 처리
=> Spring , Mybatis : 업체마다 XML코드가 다르기 때문에
제공하는 XML만 사용해야된다 (XML태그를 외워야한다)
=> DTD파일을 제공 (태그가 정의되어 있는 문서)
XML을 주로 사용하는 부분 ==> 변환 (Annotation)
=> Spring,Mabtis => 업체 요구사항
= Ajax => Javascript and XML
= javascript 5 => javascript 6(XML)
= React / VueJS
= AI => 데이터 수집 (XML)
= Kotlin => XML기반
=> 사용자 정의 태그를 만든다 <태그명>:사용자 정의
1) 문법
= 알파벳,한글로 시작한다(알파벳:대소문자구분)
<a>!=<A>
= 숫자를 사용할 수 있다 (앞에 사용금지)
<2a>(X) => <a2> <a3>...
= 태그에 공백이 있으면 안된다
< abc>(X) <file name>(X)
= 특수문자 사용이 가능 ( _ ,- , .)
<file_name> <file-name> <file.name>
= 키워드는 사용할 수 없다 => <xml>
= HTML태그는 사용이 가능 (문서로 저장)
= 여는태그와 닫는태그가 반드시 일치
<a><b><c></c></b></a> : 계층구조가 있어야 완성된다
= 태그의 종류
여는태그 : <table> <a>
닫는태그 : </table> </a>
빈태그 : <br/> <img/>
= XML태그는 반드시 최상위 태그가 존재
<a></a> (O)
<a></a>
<b></b> (X)
<a>
<b></b>
</a> (O)
= 권장사항
알아보기 쉬운 태그명을 사용한다(시멘텍 태그)
예)
<a>홍길동</a> (X)
<name>홍길동</name>(O)
1. https://mybatis.org
메뉴 => product => 테이블 맨 위를 클릭 => 버전 => 3.2.8.zip 다운
라이브러리
=> lib
=> mybatis-3.2.8.jar
======= DTD , XML mybatis-3-mapper.dtd , Spring => 스키마
JSP => View(HTML)
-->
<sawon> <!-- 테이블명 -->
<list> <!-- ROW -->
<sabun>1</sabun> <!-- 컬럼명 -->
<name>홍길동</name>
<job>사원</job>
<dept>개발부</dept>
<sal>3500</sal>
</list>
<list> <!-- ROW -->
<sabun>2</sabun> <!-- 컬럼명 -->
<name>심청이</name>
<job>대리</job>
<dept>개발부</dept>
<sal>3800</sal>
</list>
</sawon>
member.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE member SYSTEM "member.dtd">
<member>
<list>
<name>aaa</name>
<sex>aaa</sex>
<hp>aaa</hp>
<address>aaa</address>
</list>
</member>
member.dtd
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT member (list+)>
<!ELEMENT list (name,sex,(tel|hp),address)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ELEMENT tel (#PCDATA)>
<!ELEMENT hp (#PCDATA)>
<!ELEMENT address (#PCDATA)>
=========================================================
config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
문서 저장 : 태그의 순서 ,속성을 저장
-->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--
(properties?, ? => 사용할 수도 있고 ,사용하지 않을 수도 있다
settings?,
typeAliases?,
typeHandlers?,
objectFactory?,
objectWrapperFactory?,
reflectorFactory?,
plugins?,
environments?,
databaseIdProvider?,
mappers?)
-->
<!--
1. 연결 getConnection() ==> 연결할 수 있게 오라클 정보 보내준다
2. sql => String sql="SELECT * FROM music";
ps=conn.preparedStatement(sql);
3. ResultSet rs=ps.executeQuery();
4. while(rs.next())
{
MusicVO vo=new MusicVO();
vo.setTitle(rs.getString(1))
list.add(vo);
}
MyBatis에서 코딩
-->
<configuration><!-- 최상위 태그 : 환경설정을 하는 태그명 -->
<typeAliases> <!-- MyBatis에서 오라클을 연결해서 가지고 온 데이터를 저장=>어느 클래스에 저장할 지를 알려준다-->
<!-- VO를 등록하는 위치 -->
<typeAlias type="com.sist.dao.MusicVO" alias="MusicVO"/><!-- 여러개 등록이 가능 -->
<!--
(typeAlias*, package*) ORDER BY WHERE , 순서
while(rs.next())
{
MusicVO vo=new MusicVO();
vo.setXxx(rs,getString(1));
=
=
=
}
-->
</typeAliases>
<!-- 오라클 연결하는 부분 => 오라클 정보 (driver,url,username,password) -->
<!--
(environment+) => 반드시 한번 이상을 사용
-->
<environments default="development">
<!-- 오라클 연결 : getConnection(),disConnection() -->
<!-- (transactionManager, dataSource) -->
<environment id="development">
<transactionManager type="JDBC"/><!-- Commit,Rollback(자바의 JDBC) -->
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<!--
Class.forName("oracle.jdbc.driver.OracleDriver")
-->
<property name="url" value="jdbc:oracle:thin:@211.238.142.000:1521:XE"/>
<property name="username" value="hr"/>
<property name="password" value="happy"/>
<!--
public void getConnection()
{
conn=DriverManager.getConnection(url,username,password)
}
-->
</dataSource>
</environment>
</environments>
<!-- 연결이 종료 => SQL문장을 읽는다 -->
<!--
SQL문장이 많이 존재하기 때문에 (XML코드가 길어지면 속도가 늦어진다)
=> 나눠서 작업을 하기 때문에 파일을 별도로 제작할 수 있게 만든다
-->
<mappers>
<!-- SQL문장을 저장 PrpparedStatement-->
<mapper resource="com/sist/dao/music.xml"/>
<!-- 파일이 여러개 들어 올 수 있다 -->
</mappers>
</configuration>
com.sist.xml
Channel.java
package com.sist.xml;
import java.util.*;
public class Channel {
private List<Item> item=new ArrayList<Item>();
public List<Item> getItem() {
return item;
}
public void setItem(List<Item> item) {
this.item = item;
}
}
Item.java
package com.sist.xml;
/*
* 태그안에 태그가 있으면 => 클래스 제작
* 태그안에 문자열 값 => 변수 제작
* 자바 XML => 연결이 가능
*/
public class Item {
private String title;
private String description;
private String author;
private String link;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getLink() {
return link;
}
public void setLink(String link) {
this.link = link;
}
}
NewsManager.java
package com.sist.xml;
import java.util.*;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import java.net.*;
public class NewsManager {
public List<Item> naverNewsData(String fd)
{
List<Item> list=new ArrayList<Item>();
try
{
String strUrl="http://newssearch.naver.com/search.naver?where=rss&query="
+URLEncoder.encode(fd, "UTF-8");
URL url=new URL(strUrl);
JAXBContext jb=JAXBContext.newInstance(Rss.class);
Unmarshaller un=jb.createUnmarshaller();
Rss rss=(Rss)un.unmarshal(url);
list=rss.getChannel().getItem();
}catch(Exception ex) {}
return list;
}
public static void main(String[] args) {
NewsManager m=new NewsManager();
List<Item> list=m.naverNewsData("¿µÈ");
for(Item i:list)
{
System.out.println(i.getTitle());
}
}
}
Rss.java
package com.sist.xml;
import javax.xml.bind.annotation.XmlRootElement;
/*
* news => naver ==> JAXB (XML => Java Class변환) : 언마샬
* ============== JAXB (Java Class=> XML) :마샬
* <rss> 태그 (태그) ==> 클래명
* <channel> => 클래스
* <item>
* <title>aaa</title> 변수명
* <description>aaa</description>
* <author>aaa</author>
* <link>aaa</link>
* </item>
* <item>
* <title>aaa</title>
* <description>aaa</description>
* <author>aaa</author>
* <link>aaa</link>
* </item> ==> <item> => 50개
* </channel>
* </rss>
*
* <member> ==> class Member
* <list> ==> class List
* {
* private String name
* private String sex
* }
* <name>aaa</name>
* <sex>aaa</sex>
* </list>
* </member>
*/
@XmlRootElement
public class Rss {
private Channel channel=new Channel();
public Channel getChannel() {
return channel;
}
public void setChannel(Channel channel) {
this.channel = channel;
}
}
com.sist.dao
MusicVO.java
package com.sist.dao;
/*
* 1. XML 태그 제작 방법
* 2. XML문법
* 3. 자바 파싱 (자바에서 XML의 데이터를 읽어온다)
* = DOM (데이터베이스 대체) : 수정,추가 ,삭제,검색
* = SAX : 검색
* = JAXB : 자바클래스와 XML을 연결(빅데이터,외부 XML을 읽을 경우)
*/
// Mybatis => 변수명 = 컬럼명이 반드시 일치
// DESC 테이블명
public class MusicVO {
private int mno;
private String title;
private String singer;
private String album;
private String poster;
private String state;
private int idcrement;
private String key;
public int getMno() {
return mno;
}
public void setMno(int mno) {
this.mno = mno;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getSinger() {
return singer;
}
public void setSinger(String singer) {
this.singer = singer;
}
public String getAlbum() {
return album;
}
public void setAlbum(String album) {
this.album = album;
}
public String getPoster() {
return poster;
}
public void setPoster(String poster) {
this.poster = poster;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public int getIdcrement() {
return idcrement;
}
public void setIdcrement(int idcrement) {
this.idcrement = idcrement;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
}
MusicDAO.java
package com.sist.dao;
import java.util.*;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.*;
/*
* 클래스 제작
* ========
* 프로그램 => 데이터를 조작
* ======
* 데이터를 저장 : 초기값을 부여
* =======================
* = 명시적 초기화
* private int a=10;
* = 초기블록
* = 인스턴스 블록
*
* = static 블록
* ======================== 자동 인식
* = 생성자 : 호출할때 변수가 초기화
* new 생성자()
*/
public class MusicDAO {
private static SqlSessionFactory ssf;
// ssf => XML을 읽어오는 역할 => 오라클연결 (JDBC) , XML(파싱), HTML(크롤링)
static {
// 자동 초기화
try
{
Reader reader=Resources.getResourceAsReader("config.xml");
// XML 파싱
ssf=new SqlSessionFactoryBuilder().build(reader);
}catch(Exception ex)
{
System.out.println(ex.getMessage());
}
}
public static List<MusicVO> musicAllData()
{
return ssf.openSession().selectList("musicAllData");//<select id="musicAllData">
}
}
MainClass.java
package com.sist.dao;
import java.util.*;
public class MainClass {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<MusicVO> list=MusicDAO.musicAllData();
for(MusicVO vo:list)
{
System.out.println(vo.getTitle());
}
}
}
music.xml
<?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">
<!-- SQL문장 저장 : MyBatis => 데이터베이스 연결만하는 라이브러리-->
<!-- namespace : 자바 (package명) -->
<mapper namespace="com.sist.dao.music">
<!-- 데이터 읽기 -->
<select id="musicAllData" resultType="MusicVO">
SELECT * FROM genie_music
ORDER BY mno ASC
<!--
String sql="SELECT * FROM genie_music
ORDER BY mno ASC";
ps=conn.prepredStatement(sql);
<select id="musicAllData" resultType="MusicVO">
==== ==========
중복이 없는 속성 실행 결과를 받는 클래스를 등록
-->
</select>
<!--
1. ~VO만들기 (컬럼명=변수명)
2. config.xml ==> Connection
=========== 변경사항이 없다 (VO등록,Mapper등록)
3. music.xml ==> PreparedStatement,ResultSet
===========
table마다 1개씩 만든다
-->
</mapper>
'Back-end > XML' 카테고리의 다른 글
XML 3일차 - Map (0) | 2020.09.18 |
---|---|
XML 2일차 - DOM, SAX, JSON (0) | 2020.09.17 |