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();
}
}
/**
* Implement Gatsby's Browser APIs in this file.
*
* See: https://www.gatsbyjs.com/docs/reference/config-files/gatsby-browser/
*/
// You can delete this file if you're not using it
import "./src/tailwind.css";
7. PurgeCSS 설정(Optional but Recommended for Production)