반응형
프로젝트 구조
1. 프로젝트 생성시 Mavin으로 생성
- pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>swing02_mybatis</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- MyBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.10</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc11 -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc11</artifactId>
<version>23.5.0.24.07</version>
</dependency>
<dependency>
<groupId>com.oracle.ojdbc</groupId>
<artifactId>orai18n</artifactId>
<version>19.3.0.0</version>
</dependency>
</dependencies>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
(ps) libs폴더에 테마를 위한 파일들을 넣어주고 "프로젝트 구조 > 종속 요소"에서 추가해준다. 개인적 취향...
2. mybatis-config.xml에서 DB정보 생성
3. org.example.mapper > dbMapper 인터페이스 생성
package org.example.mapper;
import org.example.model.dbModel;
import java.util.List;
public interface dbMapper {
List<dbModel> selectAll();
}
4. org.example.dto> dbDto생성 (레코드 형식이 편해서 클래스 대신 레코드를 주로 사용함)
package org.example.dto;
public record dbDto(
String emp_no,
String emp_x,
String kornm_n,
String hannm_n,
String engnm_n,
String res
) {
}
5. MyBatisUtil 생성
package org.example;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
public class MyBatisUtil {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSessionFactory getSqlSessionFactory() {
return sqlSessionFactory;
}
public static SqlSession getSession() {
return sqlSessionFactory.openSession();
}
}
6. service > DbService 생성
DAO를 생성하는 경우가 많이 있는 것 같은데, 개인적으로는 복잡도가 낮아서 service만 만들어 구현해도 큰 어려움이 없는것 같다. DAO에 대한 개념도 없는 상태라, 프로젝트의 복잡도만 늘리는 것 같아서 Service만 구현했다.
package org.example.service;
import org.apache.ibatis.session.SqlSession;
import org.example.MyBatisUtil;
import org.example.dto.dbDto;
import org.example.mapper.dbMapper;
import java.util.List;
public class DbService {
public List<dbDto> selectAll(){
SqlSession session = MyBatisUtil.getSession();
List<dbDto> list = null;
try{
dbMapper mapper = session.getMapper(dbMapper.class);
list = mapper.selectAll();
} catch (Exception ex){
ex.printStackTrace();
} finally {
session.close();
}
return list;
}
}
7. resources > mapper > dbMapper.xml 생성
Spring에서 사용하던 Mybatis와 동일하게 생성
<?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="org.example.mapper.dbMapper">
<select id="selectAll" resultType="org.example.model.dbModel">
select emp_# as emp_no,
emp_x,
kornm_n,
hannm_n,
engnm_n,
res_#1 as res
from temp a
where a.kornm_n='김동개'
</select>
</mapper>
8. org.example.view > MainView.java 생성
package org.example.view;
import org.example.dto.dbDto;
import org.example.service.DbService;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
public class MainView extends JFrame {
DbService dbService = new DbService();
JFrame f1 =new JFrame(); // Main Frame
JMenuBar mb = new JMenuBar(); // 메뉴바
JPanel sidePanel = new JPanel(); // 사이드 패널
JPanel contentPanel = new JPanel(); // 컨텐츠 패널
JPanel footerPanel = new JPanel(); // 푸터 패널
JButton jb1 = new JButton("search"); // 버튼 초기화
JButton jb2 = new JButton("insert"); // 버튼 초기화
JButton jb3 = new JButton("delete"); // 버튼 초기화
// JTable data_table = new JTable(); //테이블 생성시에는 초기값과 헤더를 넣어줘야한다.
// 이 작업은 초기 화면 생성하는 함수에 넣어주기 위해, 아래와 같이 null로 우선 생성한다.
JTable data_table = null;
public void set_style(Component target){
// 스타일 적용(Look & Feel)
try{
UIManager.setLookAndFeel ("com.birosoft.liquid.LiquidLookAndFeel"); //Liquid
}catch(Exception e){
System.out.println(e + "오류 발생");
}
SwingUtilities.updateComponentTreeUI(target) ;
}
public void createFrame(){
// Main Frame 세팅
f1.setSize(1024,760);//크기
f1.setDefaultCloseOperation(f1.EXIT_ON_CLOSE);
f1.setLocationRelativeTo(null);
// 스타일 적용
f1.setDefaultLookAndFeelDecorated(true);
set_style(f1);
// 아이콘 적용
Image icon = Toolkit.getDefaultToolkit().getImage("D:\\7_System_dev2\\4_Java\\01_gui\\src\\icon.png");
f1.setIconImage(icon);
// 레이아웃 적용
BorderLayout bl = new BorderLayout();
f1.setLayout(bl);
// 화면 요소 생성 및 추가
createMenu();
createSidePanel();
createContentPanel();
createFooter();
f1.add(mb, BorderLayout.NORTH);
f1.add(sidePanel, BorderLayout.WEST); // f1라는 프레임에 sidePanel추가
f1.add(contentPanel, BorderLayout.CENTER); // f1라는 프레임에 contentPanel추가
f1.add(footerPanel, BorderLayout.SOUTH); // f1라는 프레임에 FooterPanel추가
f1.setTitle("Frame Test");//제목
f1.setVisible(true);//생성
}
// 메뉴바
public void createMenu(){
JMenu fileMenu = new JMenu("File");
fileMenu.add(new JMenuItem("New"));
fileMenu.add(new JMenuItem("Open"));
fileMenu.add(new JMenuItem("Preferences"));
mb.add(fileMenu);
mb.add(new JMenu("Edit"));
mb.add(new JMenu("About"));
mb.add(new JMenu("Help"));
setJMenuBar(mb);
}
// 사이드 패널
public void createSidePanel(){
sidePanel.setPreferredSize(new Dimension(100, 300)); // 사이드패널 사이즈 조절
sidePanel.setBorder(BorderFactory.createEmptyBorder(15 , 10, 10 , 10));
// sidePanel.setLayout(new BoxLayout(sidePanel, BoxLayout.Y_AXIS));
sidePanel.add(jb1);
sidePanel.add(jb2);
sidePanel.add(jb3);
set_style(sidePanel);
jb1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
data_mapping();
// 패널 갱신
contentPanel.revalidate();
contentPanel.repaint();
}
});
}
// Contents 패널
public void createContentPanel(){
contentPanel.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.Y_AXIS));
JLabel Headline = new JLabel("Swing Table Data with Styles");
Font f = new Font("고딕", Font.BOLD,20);
Headline.setFont(f);
contentPanel.add(Headline);
// 테이블 준비
String[] header = {"EMP No", "Name"};
String[][] contents = {{"",""},{"",""},{"",""}};
data_table = new JTable(contents, header);
Font font = new Font("고딕", Font.PLAIN,12);
data_table.setFont(font);
contentPanel.add(new JScrollPane(data_table), BorderLayout.CENTER);
// JScrollPane(data_table)에 넣어주지 않으면 header가 나타나지 않는다.
set_style(contentPanel);
}
// Footer
public void createFooter(){
footerPanel.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
footerPanel.setBackground(Color.orange);
JLabel Footer = new JLabel("Copyright by Wilkyway");
footerPanel.add(Footer);
// set_style(footerPanel);
}
public void data_mapping() {
List<dbDto> models = dbService.selectAll();
int i=0;
for (dbDto model : models) {
System.out.println("ID: " + model.emp_no() + ", Name: " + model.kornm_n());
data_table.setValueAt(model.emp_no(),i,0);
data_table.setValueAt(model.kornm_n(),i,1);
i++;
}
}
}
8. Main.java
package org.example;
import org.example.view.MainView;
public class Main {
public static void main(String[] args) {
MainView mp = new MainView();
mp.createFrame();
}
}
<결과>
반응형
'Programming > Java_Etc' 카테고리의 다른 글
JavaFX와 Mybatis 연동하기 - Maven (1) | 2024.09.11 |
---|---|
Java Mybatis설정에서 MS-SQL연결 설정방법 (1) | 2024.09.05 |
자바GUI(Swing) - Simple text editor (0) | 2022.07.11 |
Linux용 음악 프로그램 QMMP - 설치부터 스킨 변경까지 (0) | 2022.07.03 |
자바GUI(JavaFX) - CSS파일 적용 (0) | 2022.06.26 |