对于一些小项目模块时,很多时候我们使用繁琐的框架实在有些麻烦(导包多还可能版本不兼容,搭建麻烦),当离开框架后我们如何更好的撸代码呢?本文首先感谢我的老师龙sir的授业指导,文中部分代码和思想来源于我的老师,我只是结合自己的编程经验和实际开发对其进行了总结和修改整理,希望同大家分享,如果有不足之处望大家指出,希望大家能够共同学习和进步!
先上图,基于MVC模式的包结构:
然后聊聊增删改查,开始上Util包代码:
首先数据库配置文件的加载——JdbcUtil
1、(.properties文件的加载方式很多,大家可以上论坛搜索下)
2、单例模式此处建议使用饿汉式减少线程冲突,不建议以下模式,设计模式大家可以参考我上传的 “Java常用设计模式源码”
http://download.csdn.net/detail/zyp689/9828252
package com.zyp168.util;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
/*
* 数据库访问JDBC工具类
*/
public class JdbcUtil {
// ---单例模式---
private static JdbcUtil jdbcUtil;
private static Properties properties = new Properties();
private static String jdbc_driver;
private static String jdbc_url;
private static String jdbc_user;
private static String jdbc_pwd;
//懒汉式-单例模式
private JdbcUtil() {
}
public static JdbcUtil getInstance() {
if (jdbcUtil == null) {
jdbcUtil = new JdbcUtil();
}
return jdbcUtil;
}
// ---静态代码块---
static {
InputStream inputStream = Thread.currentThread().getContextClassLoader()
.getResourceAsStream("mysqlConfig.properties");
try {
properties.load(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
jdbc_driver = properties.getProperty("driver");
jdbc_url = properties.getProperty("url");
jdbc_user = properties.getProperty("user");
jdbc_pwd = properties.getProperty("pwd");
try {
Class.forName(jdbc_driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
// ---获取连接---
public Connection getConnection() {
Connection connection = null;
try {
connection = DriverManager.getConnection(jdbc_url, jdbc_user, jdbc_pwd);
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
// ---关闭资源---
public void close(Connection connection, Statement stmt, ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
注:单例模式
package com.zyp168.single;
/**
* 单例模式
*
* 饿汉式的优势在于能够有效解决线程并发问题; static修饰的变量会被作为GC的root根节点不能被回收;static
* 字段(类的成员变量)在类的所有实例中只存在一次;static会将被修饰者与类直接产生引用关系,而非与类的实例。
* final修饰的变量值不会改变可节省空间,修饰的类不能被继承。
*
*/
public class SingleTest {
public static void main(String[] args) {
// 由于private修饰并重写了构造方法,故不能使用new LSingle()创建对象
LSingle.getInstance();
ESingle.getInstance();
}
}
/*
* 懒汉式
*/
class LSingle {
private static LSingle lSingle = null;
private LSingle() {
//拒绝外部类new LSingle()方式创建对象
}
public static LSingle getInstance() {
if (lSingle == null) {
lSingle = new LSingle();
}
return lSingle;
}
}
/*
* 饿汉式
*/
class ESingle {
// 此处final是为了节省空间,可以不要
private static final ESingle eSingle = new ESingle();
private ESingle() {
//拒绝外部类new ESingle()方式创建对象
}
public static ESingle getInstance() {
return eSingle;
}
}
注:不同数据库的配置文件格式:(下面是mysql版、 oracle XE版、sqlserver2008 XE版)
其次CRUD模版——JdbcTemplate
package com.zyp168.util;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
/*
* Jdbc的模板:提取出更新和查询方法封装
*/
public class JdbcTemplate {
// 单例模式:static修饰的字段可以直接建立引导