这是本人第一个完全按照MVC开发模式完成的项目,非常简陋,仅仅完成的查询,保存,删除基本功能,而且存在编码问题没有解决,以后会慢慢增加功能。慢慢改进
  1. package com.sdjt.dao;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5.  
  6. import org.apache.commons.dbutils.QueryRunner;
  7. import org.apache.commons.dbutils.handlers.ArrayListHandler;
  8. import org.junit.Test;
  9.  
  10. import com.sdjt.utils.C3Utils;
  11.  
  12. /**
  13. * 实现操作增删改查
  14. *
  15. * @author lx
  16. *
  17. */
  18.  
  19. public class PersonDaoJdb {
  20. /*
  21. * 实现查询
  22. */
  23.  
  24. public List<Object[]> query(String id, String name, Integer age, String sex) {
  25. List<Object[]> list = new ArrayList<>();
  26. try {
  27.  
  28. String sql = "select p_id id,p_name name,p_age age,"
  29. + "(case sex when '1' then '男' else '女' end) sex"
  30. + " from person where 1=1";
  31.  
  32. List<Object> param = new ArrayList<>();
  33. if (id != null && !id.trim().equals("")) {
  34. sql += " and p_id like ?";
  35. param.add("%" + id.trim() + "%");
  36. }
  37. if (name != null && !name.trim().equals("")) {
  38. sql += " and p_name like ?";
  39. param.add("%" + name.trim() + "%");
  40. }
  41. if (age != null) {
  42. sql += " and p_age=?";
  43. param.add(age);
  44. }
  45. if (sex != null && !sex.trim().equals("")) {
  46. sql += " and sex=?";
  47. param.add(sex.trim());
  48. }
  49. QueryRunner run = new QueryRunner(C3Utils.getDs());
  50.  
  51. list = run.query(sql, new ArrayListHandler(), param.toArray());
  52. System.err.println("sql is:"+sql);
  53. } catch (Exception e) {
  54. throw new RuntimeException(e);
  55. }
  56. return list;
  57. }
  58.  
  59. /**
  60. * 实现保存
  61. */
  62.  
  63. public void save(String id, String name,String age, String sex) {
  64.  
  65. try {
  66.  
  67. String sql = "insert into person values(?,?,?,?)";
  68. QueryRunner run = new QueryRunner(C3Utils.getDs());
  69. run.update(sql, id,name,age,sex);
  70.  
  71. } catch (Exception e) {
  72. e.printStackTrace();
  73. }
  74.  
  75. }
  76.  
  77. public void delete(String id, String name,String age, String sex) {
  78.  
  79. try {
  80. String sql = "delete from person where ";
  81. if (id != null && !id.trim().equals("")) {
  82. sql += "p_id= ?";
  83. QueryRunner run = new QueryRunner(C3Utils.getDs());
  84. run.update(sql,id);
  85. System.err.println("删除成功");
  86.  
  87. } else {
  88. System.err.println("删除出错");
  89.  
  90. }
  91.  
  92. } catch (Exception e) {
  93. e.printStackTrace();
  94. }
  95.  
  96. }
  97.  
  98. }
  99.  
  100. package com.sdjt.frame;
  101.  
  102. import java.awt.BorderLayout;
  103. import java.awt.Container;
  104. import java.awt.FlowLayout;
  105. import java.awt.Label;
  106.  
  107. import javax.swing.JButton;
  108. import javax.swing.JComboBox;
  109. import javax.swing.JFrame;
  110. import javax.swing.JPanel;
  111. import javax.swing.JScrollPane;
  112. import javax.swing.JTable;
  113. import javax.swing.JTextField;
  114. import javax.swing.ListSelectionModel;
  115. import javax.swing.table.DefaultTableModel;
  116.  
  117. import com.sdjt.person.Action.PersonAction;
  118. import com.sdjt.utils.MyModelFrame;
  119.  
  120. public class Frame extends JFrame {
  121.  
  122. /**
  123. *
  124. */
  125. private static final long serialVersionUID = 1L;
  126. Label lable1 = new Label("编号");
  127. Label lable2 = new Label("姓名");
  128. Label lable3 = new Label("年龄");
  129. Label lable4 = new Label("性别");
  130. JButton save = new JButton("保存");
  131. JButton delete = new JButton("删除");
  132. JTextField idtext = new JTextField(5);
  133. JTextField nametext = new JTextField(5);
  134. JTextField agetext = new JTextField(5);
  135. JTable table;
  136. DefaultTableModel dt;
  137. // 下拉框
  138. JComboBox<String> sextext = new JComboBox<String>(new String[] { "", "男",
  139. "女" });
  140.  
  141. public Frame() {
  142. // 控制层 接受用户信息
  143. PersonAction pa = new PersonAction(this);
  144. // 获取当前jframe上的对象
  145. Container con = getContentPane();
  146. con.setLayout(new BorderLayout());
  147. JPanel jp = new JPanel(new FlowLayout(FlowLayout.LEFT));
  148. jp.add(lable1);
  149. jp.add(idtext);
  150. jp.add(lable2);
  151. jp.add(nametext);
  152. jp.add(lable3);
  153. jp.add(agetext);
  154. jp.add(lable4);
  155. jp.add(sextext);
  156. JButton query = new JButton("查询");
  157. query.setActionCommand("query");
  158. jp.add(query);
  159. query.addActionListener(pa);
  160. save.setActionCommand("save");
  161. jp.add(save);
  162. save.addActionListener(pa);
  163.  
  164. delete.setActionCommand("delete");
  165. jp.add(delete);
  166. delete.addActionListener(pa);
  167.  
  168. // 实例化表格数据+表头
  169. dt = new MyModelFrame(null, new String[] { "编号", "name", "age", "sex" });
  170. con.add(jp, BorderLayout.NORTH);
  171. table = new JTable(dt);
  172. // //设置单行选择
  173. table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
  174. // 将t放在中间用JScrollPanel设置table可以带上下滚动条
  175. con.add(new JScrollPane(table), BorderLayout.CENTER);
  176.  
  177. // 监听窗口关闭按钮
  178. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  179. setBounds(300, 300, 700, 300);
  180. setVisible(true);
  181. }
  182.  
  183. public JTable getTable() {
  184. return table;
  185. }
  186.  
  187. public JTextField getIdtext() {
  188. return idtext;
  189. }
  190.  
  191. public JTextField getNametext() {
  192. return nametext;
  193. }
  194.  
  195. public JTextField getAgetext() {
  196. return agetext;
  197. }
  198.  
  199. public JComboBox<String> getSextext() {
  200. return sextext;
  201. }
  202.  
  203. public static void main(String[] args) {
  204. new Frame();
  205. }
  206.  
  207. public DefaultTableModel getDt() {
  208. return dt;
  209. }
  210.  
  211. }
  212. package com.sdjt.person.Action;
  213.  
  214. import java.awt.event.ActionEvent;
  215. import java.awt.event.ActionListener;
  216. import java.util.List;
  217. import javax.swing.JOptionPane;
  218. import com.sdjt.frame.Frame;
  219. import com.sdjt.person.serverce.PersonServer;
  220.  
  221. public class PersonAction implements ActionListener {
  222.  
  223. // 声明serverce
  224. private PersonServer service = new PersonServer();
  225. private Frame fr;
  226.  
  227. public PersonAction(Frame fr) {
  228. this.fr = fr;
  229. }
  230.  
  231. @Override
  232. public void actionPerformed(ActionEvent e) {
  233.  
  234. if (e.getActionCommand().equals("query")) {
  235.  
  236. System.err.println("query..");
  237. // 删除原有的
  238. int rows = fr.getDt().getRowCount();
  239. for (int i = 0; i < rows; i++) {
  240. fr.getDt().removeRow(0);
  241.  
  242. }
  243.  
  244. // 查询
  245. String id = fr.getIdtext().getText();
  246. String name = fr.getNametext().getText();
  247. String age = fr.getAgetext().getText();
  248. String sex = fr.getSextext().getSelectedItem().toString();
  249.  
  250. if (sex.equals("男")) {
  251. sex = "1";
  252.  
  253. } else if (sex.equals("女")) {
  254. sex = "0";
  255.  
  256. }
  257.  
  258. Integer _age = age.equals("") ? null : Integer.valueOf(age);
  259. System.err.println(id + "," + name + "," + age + "," + sex);
  260.  
  261. // 调用serverce
  262.  
  263. // List<Object[]> list = service.query(id, name, _age, sex);
  264. List<Object[]> list = service.query(id, name, _age, sex);
  265. for (Object[] oo : list) {
  266. fr.getDt().addRow(oo);
  267. System.err.println("添加成功");
  268.  
  269. }
  270.  
  271. } else if (e.getActionCommand().equals("save")) {
  272.  
  273. // 获取数据
  274. String id = fr.getIdtext().getText();
  275. String name = fr.getNametext().getText();
  276. String age = fr.getAgetext().getText();
  277. String sex = fr.getSextext().getSelectedItem().toString();
  278. if (id == null || id.trim().equals("")) {
  279. JOptionPane.showMessageDialog(fr, "必须输入编号");
  280. return;
  281. }
  282. if (sex == null || sex.trim().equals("")) {
  283. JOptionPane.showMessageDialog(fr, "必须输入性别");
  284. return;
  285. }
  286. // 调用保存
  287.  
  288. service.save(id, name, age, sex);
  289. // 保存成功后
  290. fr.getDt().addRow(new String[] { id, name, age, sex });
  291. System.err.println("baocn");
  292.  
  293. } else if (e.getActionCommand().equals("delete")) {
  294. // String id = fr.getIdtext().getText();
  295. String name = fr.getNametext().getText();
  296. String age = fr.getAgetext().getText();
  297. String sex = fr.getSextext().getSelectedItem().toString();
  298. int row = fr.getTable().getSelectedRow();
  299. if (row == -1) {
  300. JOptionPane.showMessageDialog(fr, "plz choose one row...");
  301. return;
  302.  
  303. }
  304. String id1 = (String) fr.getDt().getValueAt(row, 0);
  305. int a = JOptionPane.showConfirmDialog(fr, "你确定要删除" + id1 + "吗?",
  306. "删除", JOptionPane.YES_NO_OPTION);
  307. service.delete(id1, name, age, sex);
  308. fr.getDt().addRow(new String[] { id1, "已经被删除" });
  309. // System.err.println("--" + a);
  310. // Integer _age = age.equals("") ? null : Integer.valueOf(age);
  311. // List<Object[]> list = service.query(id1, name, _age, sex);
  312. // for (Object[] oo : list) {
  313. // fr.getDt().addRow(oo);
  314. // System.err.println("添加成功");
  315. //
  316. // }
  317.  
  318. }
  319.  
  320. }
  321. }
  322. package com.sdjt.person.serverce;
  323.  
  324. import java.util.List;
  325.  
  326. import com.sdjt.dao.PersonDaoJdb;
  327.  
  328. public class PersonServer {
  329.  
  330. // 声明dao 注入dao
  331. private PersonDaoJdb dao = new PersonDaoJdb();
  332.  
  333. public List<Object[]> query(String id, String name, Integer age, String sex) {
  334. return dao.query(id, name, age, sex);
  335.  
  336. }
  337.  
  338. public void save(String id, String name, String age, String sex) {
  339.  
  340. sex = sex.equals("男") ? "1" : "0";
  341. dao.save(id, name, age, sex);
  342.  
  343. }
  344.  
  345. public void delete(String id, String name,String age, String sex) {
  346.  
  347. dao.delete(id, name, age, sex);
  348.  
  349. }
  350.  
  351. }
  352. package com.sdjt.utils;
  353.  
  354. import java.sql.Connection;
  355.  
  356. import javax.sql.DataSource;
  357.  
  358. import com.mchange.v2.c3p0.ComboPooledDataSource;
  359.  
  360. public class C3Utils {
  361. private static DataSource ds;
  362. static{
  363. ds=new ComboPooledDataSource();
  364.  
  365. }
  366.  
  367. public static DataSource getDs() {
  368. return ds;
  369. }
  370.  
  371. public static Connection getCon() {
  372. Connection con = null;
  373. try {
  374.  
  375. con = ds.getConnection();
  376.  
  377. } catch (Exception e) {
  378. e.printStackTrace();
  379. }
  380. return con;
  381.  
  382. }
  383. // public static void main(String[] args) {
  384. // System.err.println(C3Utils.getCon());
  385. // }
  386.  
  387. }
  388. package com.sdjt.utils;
  389.  
  390. import javax.swing.table.DefaultTableModel;
  391.  
  392. /**
  393. * 表格模版
  394. *
  395. * @author lx
  396. *
  397. */
  398. public class MyModelFrame extends DefaultTableModel {
  399.  
  400. public MyModelFrame(Object[][] data, Object[] header) {
  401.  
  402. super(data, header);
  403. }
  404. //返回false不能修改数据
  405. @Override
  406. public boolean isCellEditable(int row, int column) {
  407. if(row==2){
  408. return true;
  409.  
  410. }
  411. return false;
  412. }
  413.  
  414. }
  415. <?xml version="1.0" encoding="UTF-8"?>
  416. <c3p0-config>
  417. <default-config>
  418. <!-- 最多可以创建多少个statement -->
  419. <!-- 最多可以创建多少个statement -->
  420. <property name="maxStatements">50</property>
  421. <!-- 最多有多少个连接 -->
  422. <property name="maxPoolSize">4</property>
  423. <property name="initialPoolSize">2</property>
  424. <property name="acquireIncrement">2</property>
  425. <property name="minPoolSize">2</property>
  426. <!-- 连接的超时间 -->
  427. <property name="checkoutTimeout">3000</property>
  428. <property name="driverClass">com.mysql.jdbc.Driver</property>
  429. <property name="jdbcUrl">jdbc:mysql:///abc
  430. </property>
  431. <property name="user">root</property>
  432. <property name="password">1234</property>
  433. </default-config>
  434.  
  435. <!-- 配置其他的连接,用户的其他配置可以有多个 -->
  436.  
  437. <named-config name="jtedu">
  438.  
  439. <property name="maxStatements">50</property>
  440. <!-- 最多有多少个连接 -->
  441. <property name="maxPoolSize">4</property>
  442. <property name="initialPoolSize">2</property>
  443. <property name="acquireIncrement">2</property>
  444. <property name="minPoolSize">2</property>
  445. <!-- 连接的超时间 -->
  446. <property name="checkoutTimeout">3000</property>
  447. <property name="driverClass">com.mysql.jdbc.Driver</property>
  448. <property name="jdbcUrl">jdbc:mysql:///abc
  449. </property>
  450. <property name="user">root</property>
  451. <property name="password">1234</property>
  452. </named-config>
  453. </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. WIN7下使用.net(C#)监视剪贴板 (转)

    最近需要做一个小程序,需要常驻后台,监视剪贴板变化并提取内容, 在网上查了一些资料,先采用SetClipboardViewer方法实现,具体原理可以参考http://www.cnblogs.com/j ...

  2. window.dialogArguments的使用

    <HTML> <HEAD> <TITLE>showModelessDialogEX.htm</TITLE> <SCRIPT> var sUs ...

  3. Bootstrap 字形图标(Glyphicons)

    http://w3c.3306.biz/bootstrap/eg/bootstrap--glyphicons-list.html

  4. android如何保存读取读取文件文件保存到SDcard

    android如何保存读取读取文件文件保存到SDcard 本文来源于www.ifyao.com禁止转载!www.ifyao.com 上图为保存文件的方法体. 上图为如何调用方法体保存数据. 上面的截图 ...

  5. 【Nutch2.2.1源代码分析之5】索引的基本流程

    一.各个主要类之间的关系 SolrIndexerJob extends IndexerJob 1.IndexerJob:主要完成 2.SolrIndexerJob:主要完成 3.IndexUtil:主 ...

  6. HTML5视频

    <video>标签用于定义视频. 案例1: <!DOCTYPE html><html><head lang="en"> <me ...

  7. HTML5简介、视频

    HTML5 建立的一些规则: 新特性应该基于 HTML.CSS.DOM 以及 JavaScript. 减少对外部插件的需求(比如 Flash) 更优秀的错误处理 更多取代脚本的标记 HTML5 应该独 ...

  8. Lua 字符串函数小结

    1.求字符串长度 string.len(str) 2.大小写转换 string.upper(str) string.lower(str) 3.字符串查找(非全局) --func_string.lua ...

  9. Python爬虫学习:一、相关概念与基础知识

    爬虫: 网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成.传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽 ...

  10. 使用 Mockito 单元测试 – 教程

    tanyuanji@126.com 版本历史 - - - - 使用 Mockito 进行测试 该教程主要讲解 Mockito 框架在Eclipse IDE 中的使用   目录 tanyuanji@12 ...