我的第一个MVC项目
这是本人第一个完全按照MVC开发模式完成的项目,非常简陋,仅仅完成的查询,保存,删除基本功能,而且存在编码问题没有解决,以后会慢慢增加功能。慢慢改进
package com.sdjt.dao; import java.util.ArrayList; import java.util.List; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.ArrayListHandler; import org.junit.Test; import com.sdjt.utils.C3Utils; /** * 实现操作增删改查 * * @author lx * */ public class PersonDaoJdb { /* * 实现查询 */ public List<Object[]> query(String id, String name, Integer age, String sex) { List<Object[]> list = new ArrayList<>(); try { String sql = "select p_id id,p_name name,p_age age," + "(case sex when '1' then '男' else '女' end) sex" + " from person where 1=1"; List<Object> param = new ArrayList<>(); if (id != null && !id.trim().equals("")) { sql += " and p_id like ?"; param.add("%" + id.trim() + "%"); } if (name != null && !name.trim().equals("")) { sql += " and p_name like ?"; param.add("%" + name.trim() + "%"); } if (age != null) { sql += " and p_age=?"; param.add(age); } if (sex != null && !sex.trim().equals("")) { sql += " and sex=?"; param.add(sex.trim()); } QueryRunner run = new QueryRunner(C3Utils.getDs()); list = run.query(sql, new ArrayListHandler(), param.toArray()); System.err.println("sql is:"+sql); } catch (Exception e) { throw new RuntimeException(e); } return list; } /** * 实现保存 */ public void save(String id, String name,String age, String sex) { try { String sql = "insert into person values(?,?,?,?)"; QueryRunner run = new QueryRunner(C3Utils.getDs()); run.update(sql, id,name,age,sex); } catch (Exception e) { e.printStackTrace(); } } public void delete(String id, String name,String age, String sex) { try { String sql = "delete from person where "; if (id != null && !id.trim().equals("")) { sql += "p_id= ?"; QueryRunner run = new QueryRunner(C3Utils.getDs()); run.update(sql,id); System.err.println("删除成功"); } else { System.err.println("删除出错"); } } catch (Exception e) { e.printStackTrace(); } } } package com.sdjt.frame; import java.awt.BorderLayout; import java.awt.Container; import java.awt.FlowLayout; import java.awt.Label; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.ListSelectionModel; import javax.swing.table.DefaultTableModel; import com.sdjt.person.Action.PersonAction; import com.sdjt.utils.MyModelFrame; public class Frame extends JFrame { /** * */ private static final long serialVersionUID = 1L; Label lable1 = new Label("编号"); Label lable2 = new Label("姓名"); Label lable3 = new Label("年龄"); Label lable4 = new Label("性别"); JButton save = new JButton("保存"); JButton delete = new JButton("删除"); JTextField idtext = new JTextField(5); JTextField nametext = new JTextField(5); JTextField agetext = new JTextField(5); JTable table; DefaultTableModel dt; // 下拉框 JComboBox<String> sextext = new JComboBox<String>(new String[] { "", "男", "女" }); public Frame() { // 控制层 接受用户信息 PersonAction pa = new PersonAction(this); // 获取当前jframe上的对象 Container con = getContentPane(); con.setLayout(new BorderLayout()); JPanel jp = new JPanel(new FlowLayout(FlowLayout.LEFT)); jp.add(lable1); jp.add(idtext); jp.add(lable2); jp.add(nametext); jp.add(lable3); jp.add(agetext); jp.add(lable4); jp.add(sextext); JButton query = new JButton("查询"); query.setActionCommand("query"); jp.add(query); query.addActionListener(pa); save.setActionCommand("save"); jp.add(save); save.addActionListener(pa); delete.setActionCommand("delete"); jp.add(delete); delete.addActionListener(pa); // 实例化表格数据+表头 dt = new MyModelFrame(null, new String[] { "编号", "name", "age", "sex" }); con.add(jp, BorderLayout.NORTH); table = new JTable(dt); // //设置单行选择 table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 将t放在中间用JScrollPanel设置table可以带上下滚动条 con.add(new JScrollPane(table), BorderLayout.CENTER); // 监听窗口关闭按钮 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(300, 300, 700, 300); setVisible(true); } public JTable getTable() { return table; } public JTextField getIdtext() { return idtext; } public JTextField getNametext() { return nametext; } public JTextField getAgetext() { return agetext; } public JComboBox<String> getSextext() { return sextext; } public static void main(String[] args) { new Frame(); } public DefaultTableModel getDt() { return dt; } } package com.sdjt.person.Action; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.List; import javax.swing.JOptionPane; import com.sdjt.frame.Frame; import com.sdjt.person.serverce.PersonServer; public class PersonAction implements ActionListener { // 声明serverce private PersonServer service = new PersonServer(); private Frame fr; public PersonAction(Frame fr) { this.fr = fr; } @Override public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals("query")) { System.err.println("query.."); // 删除原有的 int rows = fr.getDt().getRowCount(); for (int i = 0; i < rows; i++) { fr.getDt().removeRow(0); } // 查询 String id = fr.getIdtext().getText(); String name = fr.getNametext().getText(); String age = fr.getAgetext().getText(); String sex = fr.getSextext().getSelectedItem().toString(); if (sex.equals("男")) { sex = "1"; } else if (sex.equals("女")) { sex = "0"; } Integer _age = age.equals("") ? null : Integer.valueOf(age); System.err.println(id + "," + name + "," + age + "," + sex); // 调用serverce // List<Object[]> list = service.query(id, name, _age, sex); List<Object[]> list = service.query(id, name, _age, sex); for (Object[] oo : list) { fr.getDt().addRow(oo); System.err.println("添加成功"); } } else if (e.getActionCommand().equals("save")) { // 获取数据 String id = fr.getIdtext().getText(); String name = fr.getNametext().getText(); String age = fr.getAgetext().getText(); String sex = fr.getSextext().getSelectedItem().toString(); if (id == null || id.trim().equals("")) { JOptionPane.showMessageDialog(fr, "必须输入编号"); return; } if (sex == null || sex.trim().equals("")) { JOptionPane.showMessageDialog(fr, "必须输入性别"); return; } // 调用保存 service.save(id, name, age, sex); // 保存成功后 fr.getDt().addRow(new String[] { id, name, age, sex }); System.err.println("baocn"); } else if (e.getActionCommand().equals("delete")) { // String id = fr.getIdtext().getText(); String name = fr.getNametext().getText(); String age = fr.getAgetext().getText(); String sex = fr.getSextext().getSelectedItem().toString(); int row = fr.getTable().getSelectedRow(); if (row == -1) { JOptionPane.showMessageDialog(fr, "plz choose one row..."); return; } String id1 = (String) fr.getDt().getValueAt(row, 0); int a = JOptionPane.showConfirmDialog(fr, "你确定要删除" + id1 + "吗?", "删除", JOptionPane.YES_NO_OPTION); service.delete(id1, name, age, sex); fr.getDt().addRow(new String[] { id1, "已经被删除" }); // System.err.println("--" + a); // Integer _age = age.equals("") ? null : Integer.valueOf(age); // List<Object[]> list = service.query(id1, name, _age, sex); // for (Object[] oo : list) { // fr.getDt().addRow(oo); // System.err.println("添加成功"); // // } } } } package com.sdjt.person.serverce; import java.util.List; import com.sdjt.dao.PersonDaoJdb; public class PersonServer { // 声明dao 注入dao private PersonDaoJdb dao = new PersonDaoJdb(); public List<Object[]> query(String id, String name, Integer age, String sex) { return dao.query(id, name, age, sex); } public void save(String id, String name, String age, String sex) { sex = sex.equals("男") ? "1" : "0"; dao.save(id, name, age, sex); } public void delete(String id, String name,String age, String sex) { dao.delete(id, name, age, sex); } } package com.sdjt.utils; import java.sql.Connection; import javax.sql.DataSource; import com.mchange.v2.c3p0.ComboPooledDataSource; public class C3Utils { private static DataSource ds; static{ ds=new ComboPooledDataSource(); } public static DataSource getDs() { return ds; } public static Connection getCon() { Connection con = null; try { con = ds.getConnection(); } catch (Exception e) { e.printStackTrace(); } return con; } // public static void main(String[] args) { // System.err.println(C3Utils.getCon()); // } } package com.sdjt.utils; import javax.swing.table.DefaultTableModel; /** * 表格模版 * * @author lx * */ public class MyModelFrame extends DefaultTableModel { public MyModelFrame(Object[][] data, Object[] header) { super(data, header); } //返回false不能修改数据 @Override public boolean isCellEditable(int row, int column) { if(row==2){ return true; } return false; } } <?xml version="1.0" encoding="UTF-8"?> <c3p0-config> <default-config> <!-- 最多可以创建多少个statement --> <!-- 最多可以创建多少个statement --> <property name="maxStatements">50</property> <!-- 最多有多少个连接 --> <property name="maxPoolSize">4</property> <property name="initialPoolSize">2</property> <property name="acquireIncrement">2</property> <property name="minPoolSize">2</property> <!-- 连接的超时间 --> <property name="checkoutTimeout">3000</property> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql:///abc </property> <property name="user">root</property> <property name="password">1234</property> </default-config> <!-- 配置其他的连接,用户的其他配置可以有多个 --> <named-config name="jtedu"> <property name="maxStatements">50</property> <!-- 最多有多少个连接 --> <property name="maxPoolSize">4</property> <property name="initialPoolSize">2</property> <property name="acquireIncrement">2</property> <property name="minPoolSize">2</property> <!-- 连接的超时间 --> <property name="checkoutTimeout">3000</property> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql:///abc </property> <property name="user">root</property> <property name="password">1234</property> </named-config> </c3p0-config>