JAVA學習筆記(五十三)- 經典三層架構執行個體,java學習筆記
UserDAO介面
/* * UserDAO介面 */public interface UserDAO { //插入使用者 public void insert(User user); //刪除使用者 public void delete(int id); //更新使用者 public void update(User user); //查詢所有使用者 public List<User> getAllUsers(); //根據使用者名稱或密碼查詢使用者 public boolean checkUser(User user); //根據編號查詢使用者 public User getUserById(int id);}
UserDAOImpl實作類別
import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.List;/* * UserDAOImpl實作類別 */public class UserDAOImpl implements UserDAO{ Connection conn=null; PreparedStatement pstmt=null; ResultSet rs=null; @Override public void insert(User user) { // TODO Auto-generated method stub } @Override public void delete(int id) { // TODO Auto-generated method stub } @Override public void update(User user) { // TODO Auto-generated method stub } @Override public List<User> getAllUsers() { // TODO Auto-generated method stub return null; } @Override public boolean checkUser(User user) { boolean flag=false; String sql="select * from user where username=? and password=?"; try { conn=DBUtil.getConnection(); pstmt=conn.prepareStatement(sql); pstmt.setString(1, user.getUsername()); pstmt.setString(2, user.getPassword()); rs=pstmt.executeQuery(); if(rs.next()){ flag=true; } } catch (SQLException e) { e.printStackTrace(); }finally{ DBUtil.closeAll(rs, pstmt, conn); } return flag; } @Override public User getUserById(int id) { // TODO Auto-generated method stub return null; }}
UserService介面
/* * UserService介面 */public interface UserService { //使用者註冊 public void register(User user); //使用者登陸 public boolean login(User user);}
UserServiceImpl實作類別,調用DAO完成相應的功能
/* * UserServiceImpl實作類別,調用DAO完成相應的功能 */public class UserServiceImpl implements UserService { //建立UserDAO執行個體 UserDAO ud=new UserDAOImpl(); @Override public void register(User user) { ud.insert(user); } @Override public boolean login(User user) { return ud.checkUser(user); }}
資料庫工具類
import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;/* * 資料庫工具類 */public class DBUtil { //擷取資料庫連接 public static Connection getConnection(){ Connection conn=null; try { Class.forName("com.mysql.jdbc.Driver"); conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123456"); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return conn; } //關閉所有資源 public static void closeAll(ResultSet rs,Statement stmt,Connection conn){ try { if(rs!=null) rs.close(); if(stmt!=null) stmt.close(); if(conn!=null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } }}
登陸表單
/* * 登陸表單 */public class Login implements ActionListener { //定義一個UserService執行個體 UserService us=new UserServiceImpl(); // 登陸表單組件 private JFrame frmLogin = new JFrame("登陸"); private JPanel[] pnls = new JPanel[4]; // 4行面板 private JLabel lblWelcome = new JLabel("歡迎使用小型超市管理系統!"); private JLabel lblUsername = new JLabel("使用者名稱:"); private JTextField txtUsername = new JTextField(20); private JLabel lblPassword = new JLabel("密 碼:"); private JPasswordField txtPassword = new JPasswordField(20); private JButton btnLogin = new JButton("登陸"); private JButton btnExit = new JButton("退出"); // 初始化組件 public Login() { // 初始化4行面板,並添加到表單中 for (int i = 0; i < pnls.length; i++) { pnls[i] = new JPanel(); pnls[i].setOpaque(false);// 設定面板透明 frmLogin.add(pnls[i]);// 將面板添加到組件中 } // 初始化JLabel和文字框,並添載入面板中 lblWelcome.setFont(new Font("黑體", Font.BOLD, 20)); lblWelcome.setForeground(Color.red); pnls[0].add(lblWelcome); pnls[1].setLayout(new FlowLayout(FlowLayout.CENTER, 20, 0)); pnls[1].add(lblUsername); pnls[1].add(txtUsername); pnls[2].setLayout(new FlowLayout(FlowLayout.CENTER, 20, 0)); pnls[2].add(lblPassword); pnls[2].add(txtPassword); pnls[3].setLayout(new FlowLayout(FlowLayout.CENTER, 20, 0)); pnls[3].add(btnLogin); pnls[3].add(btnExit); // 添加監聽 btnLogin.addActionListener(this); btnExit.addActionListener(this); //設定表單背景圖片 ImageIcon iconBg=new ImageIcon("images/bg.jpg"); JLabel lblBg=new JLabel(iconBg); lblBg.setSize(iconBg.getIconWidth(), iconBg.getIconHeight()); JLayeredPane layeredPane=frmLogin.getLayeredPane(); layeredPane.add(lblBg, new Integer(Integer.MIN_VALUE)); JPanel contentPane=(JPanel) frmLogin.getContentPane(); contentPane.setOpaque(false); //初始化表單 frmLogin.setLayout(new GridLayout(4, 1)); frmLogin.setSize(400,300); frmLogin.setResizable(false); frmLogin.setLocationRelativeTo(null); frmLogin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frmLogin.setVisible(true); } @Override public void actionPerformed(ActionEvent e) { String cmd = e.getActionCommand(); // 擷取按鈕上的文字 if (cmd.equals("登陸")) { String username=txtUsername.getText(); String password=new String(txtPassword.getPassword()); User user=new User(username,password); if(us.login(user)){ frmLogin.dispose();//隱藏登陸表單 new JFrame().setVisible(true); }else{ JOptionPane.showMessageDialog(frmLogin, "使用者名稱或密碼不正確!"); } } else { int choice=JOptionPane.showConfirmDialog(frmLogin, "確定要退出嗎?", "提示", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if(choice==0){ //如果選擇是,則退出程式 System.exit(0); } } } public static void main(String[] args) { new Login(); }}
資料庫設計
create table user( id int primary key auto_increment, username varchar(20) not null, password varchar(20) not null);insert into user values (null,'admin','123');insert into user values (null,'tom','456');