这是本人第一个完全按照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>

我的第一个MVC项目的更多相关文章

  1. 1.开始第一个MVC项目

    安装就不说了 1.在指定路径创建好项目文件夹之后,打开cmd,进去这个文件夹路径下 输入命令 dotnet new mvc 就会在文件夹内创建一个mvc项目 2.创建好项目之后 直接在这个路径下输入 ...

  2. .net core 第一个mvc项目目录结构简析

    创建项目的命令     首先来认识一下创建项目可使用的各种命令,.NETCore 的命令都以 dotnet 打头,这很好理解,输入 dotnet xxx,就是执行环境变量指向的 C:\Program ...

  3. ASP.NET + MVC5 入门完整教程三 (上) ---第一个MVC项目

    https://blog.csdn.net/qq_21419015/article/details/80420815 第一个MVC应用程序 1创建MVC项目 打开VS ,File--新建--项目,选择 ...

  4. 《ASP.NET MVC 5 破境之道》:第一境 ASP.Net MVC5项目初探 — 第一节:运行第一个MVC5项目

    第一境 ASP.Net MVC5项目初探 — 第一节:运行第一个MVC5项目 创建一个MVC项目,是很容易的,大部分工作,VS都帮我们完成了.只需要按照如下步骤按部就班就可以了. 打开VS2017,选 ...

  5. 创建一个MVC解决方案,添加一个控制器后,运行程序报错:”/"未找到服务器

    1.创建一个MVC项目,如图

  6. .NET MVC项目设置包含Areas中的页面为默认启动页

    利用vs创建一个MVC项目后,一般的默认启动页是根目录下-->Controllers-->HomeController-->Index这个方法对应的页面. 我先说下创建Areas的流 ...

  7. Pro ASP.NET MVC –第二章 第一个MVC程序

    学习一个软件开发框架的最有效的方式就是了解并使用它.在本章,你将会创建一个简单基于ASP.NET MVC Framework的数据-实体应用程序.我们会该程序划分成若干小块,每次介绍一个部分,以便你能 ...

  8. C#编译器优化那点事 c# 如果一个对象的值为null,那么它调用扩展方法时为甚么不报错 webAPI 控制器(Controller)太多怎么办? .NET MVC项目设置包含Areas中的页面为默认启动页 (五)Net Core使用静态文件 学习ASP.NET Core Razor 编程系列八——并发处理

    C#编译器优化那点事   使用C#编写程序,给最终用户的程序,是需要使用release配置的,而release配置和debug配置,有一个关键区别,就是release的编译器优化默认是启用的.优化代码 ...

  9. WSL2 新建dotnet core mvc项目

    我们知道dotnet sdk会有很多命令,但在我们完全不知道如何去使用哪个命令. 我们使用dotnet -h进行查看: 我们看到SDK的new命令,但是new命令又如何使用呢? 我们再次使用帮助: 可 ...

随机推荐

  1. ADO.Net总结

    ADO.NET简介 一.    ADO.NET的组成(ADO.NET是什么?能干什么)客户体验      ADO.NET就是一组类库可以让我们通过程序的方式访问数据库 ADO.NET主要包括5个对象, ...

  2. JS如何得到Repeater中TextBox控件的值

    var subsidylCost = document.getElementById("txtSubsidylCost.ClientID").value; 这样获取不到,因为txt ...

  3. 5 输出的properties文件按照key进行排序

    import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileNotFoundException; ...

  4. zeromq源码分析笔记之线程间收发命令(2)

    在zeromq源码分析笔记之架构说到了zmq的整体架构,可以看到线程间通信包括两类,一类是用于收发命令,告知对象该调用什么方法去做什么事情,命令的结构由command_t结构体确定:另一类是socke ...

  5. 【转】10 个迅速提升你 Git 水平的提示

    最近我们推出了两个教程:熟悉Git的基本功能和让你在开发团队中熟练的使用Git . 我们所讨论的命令足够一个开发者在Git使用方面游刃有余.在这篇文章中,我们试图探索怎样有效的管理你的时间和充分的使用 ...

  6. ubuntu中安装openssh-server失败(首先ubuntu不能远程root登录)

      ubuntu 安装openssh-server时,报依赖错误   解决方法: 更新软件 sudo apt-get update   如果报校验和不符错误:(此错误为部分网址被墙)如图 解决方法如下 ...

  7. Oracle11g R2学习系列 之八高级数据类型

    所谓的高级数据类型,就是大数据类型,即BCNB(助记词:BC牛逼)+XML数据类型. B:blob,用来存储可变长度的二进制数据. C:clob,主要用来存储可变长度的字符型数据,也就是其他数据库中提 ...

  8. Scala学习笔记--枚举

    枚举 scala不用关注枚举的特别语法,取而代之的是标准库中的类, scala.Enumeration 想要创建新的枚举,只需要拓展这个类的对象即可 object Color extends Enum ...

  9. Gizmos绘制塔防游戏网格

    1.画线脚本写法及地面调整 首先,新建脚本GridMap 新建绘制网格方法(初始数值为10*10) 在类中创建变量 //定义地图宽度 public int m_mapWidth = 10; //地图高 ...

  10. Angular2 - Starter - Pipes, Custom Pipes

    在Angular2 模板中,我们在显示数据时,可以使用通道将数据转换成相应的格式的值的形式来显示,而且这不改变源数据.比如,我们可以使用date通道来转换时间显示的格式: {{date | date: ...