写代码应该是一个由繁到简,然后由简到繁的一个螺旋上升的过程。
没钱就应该多读电子书,最近看了看《架构探险》,写点东西标记一下~
在看服务层代码优化那部分时,我想起了在本科实训时写的代码,很久很久以前,在一个民风淳朴的实训基地...
访问数据库的代码是这个样子:
1、首先是配置文件:
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mytest jdbc.username=mzuser jdbc.password=123456
2、然后是在Dao类中加载初始化(主要是逻辑):
static{ conf = loadProperties("config.properties"); driver = getDriver(conf); url = getURL(conf); userName = getUserName(conf); password = getPassword(conf); Class.forName(driver); //省略try }
3、万事俱备只欠东风,访问数据(举个例子):
public List<Customer> getCustomerList(){ try{ customers = new ArrayList<Customer>(); sql = ""; conn = DriverManager.getConnection(url,username,password); preparedStatement = conn.prepareStatement(sql); resultSet = preparedStatement.executeQuery(); while(resultSet.next()){ customer = new Customer(); set... customers.add(customer); } return customers; }catch(SQLExeption e){ }finally{ try{ conn.close() }catch(...){ } } }
接下来应该就是很开心的不断的写类似的代码......
但是,当随着业务不断的增长,访问数据库的代码越来越多,你会发现有很多重复的代码,如上面的初始化和获取连接,相当于搭台子唱戏,每次都需要搭一个样的台子,既然这样为什么不先搭好台子,管他是哪个戏班子。
于是...
1、可以有一个工具类如DataBaseHelper来负责统一加载参数,然后将获取连接和关闭连接的代码封装成方法;
2、为了避免多线程的不安全,可以用ThreadLocal来隔离连接;
3、可以使用数据库连接池来统一管理数据库连接,如使用BasicDataSource
private static final BasicDataSource DATA_SOURCE; private static final ThreadLocal<Connection> CONNECTION_HOLDER = new ThreadLocal<Connection>(); static { Properties conf = PropsUtil.loadProps("config.properties"); String driver = conf.getProperty("jdbc.driver"); String url = conf.getProperty("jdbc.url"); String userName = conf.getProperty("jdbc.username"); String password = conf.getProperty("jdbc.password"); DATA_SOURCE = new BasicDataSource(); DATA_SOURCE.setDriverClassName(driver); DATA_SOURCE.setUrl(url); DATA_SOURCE.setUsername(userName); DATA_SOURCE.setPassword(password); } /** * get connection */ public static Connection getConnection(){ Connection connection = CONNECTION_HOLDER.get(); if(connection == null){ try { connection = DATA_SOURCE.getConnection(); CONNECTION_HOLDER.set(connection); }catch (SQLException e){ LOGGER.error("execute sql error", e); } } return connection; }
据说DbUtils提供的QueryRunner对象可以面向实体进行查询,就像这样子:
/** * select list */ public static <T> List<T> queryEntityList(Class<T> entityClass, String sql, Object... params){ List<T> entityList = new ArrayList<T>(); Connection connection = null; try { connection = getConnection(); entityList = QUERY_RUNNER.query(connection, sql, new BeanListHandler<T>(entityClass), params); }catch (SQLException e){ LOGGER.error("query error", e); } return entityList; }
现在访问数据库就简单了:
public List<Customer> getCustomer(){ String sql = "select * from customer"; return DatabaseHelper.queryEntityList(Customer.class, sql); }
看起来还不错,至少Dao层不会一个个都像穿了大棉袄似得那么厚厚的~
相关推荐
在安卓系统中,“架构”指的是运行安卓应用的硬件和软件平台的组合,它涉及到处理器架构、操作系统内核、中间件层以及用户界面等多个层面。安卓系统支持多种不同的架构,这使得它能够在各种不同类型的设备上运行,从...
1. 数据访问层:负责与数据库进行交互,可能使用ADO.NET或Entity Framework等ORM工具。 2. 业务逻辑层:处理考试规则、用户权限等复杂逻辑。 3. 前端视图:使用HTML、CSS和JavaScript,可能结合AJAX实现异步交互,...
在“JSP+SQL办公自动化管理系统”中,源代码可能包括了JSP页面、Servlet、JavaBean等组件,以及与SQL数据库交互的DAO(数据访问对象)层和Service层代码。通过对源代码的学习,开发者可以理解系统的架构设计和具体...
例如,系统可能分为前端展示层、业务逻辑层和数据访问层,分别负责用户界面、业务处理和数据操作。此外,安全性也是考虑的重点,包括防止SQL注入、XSS攻击等。 源代码是实现网站功能的具体实现,可能包含ASP文件、...
3. 源代码:这部分内容未详细列出,但通常会包含ASP.NET页面(.aspx)、后台代码(.cs或.vb)、配置文件(web.config)、数据库连接字符串、业务逻辑层(Business Logic Layer,BLL)以及数据访问层(Data Access ...
- **三层架构**:可能采用了常见的表现层、业务逻辑层和数据访问层结构,使代码更易于维护和扩展。 - **模板设计**:像`top.asp`这样的文件可能代表了页面模板,提高了代码复用性。 4. **论文部分** - 可能涵盖...
这种端到端的编译流程可以跨越多个层次,包括数据加载、模型优化、算子融合、调度以及最终的代码生成。通过这种方式,TVM 能够充分利用硬件资源,减少内存访问,提升计算效率。 在 CPU 上,TVM 使用自动调度工具来...
源代码部分包含了实现上述功能的程序代码,这可能包括ASP.NET页面、控制器、模型以及数据库访问层等组件。开发者通常会遵循MVC(Model-View-Controller)架构模式,将业务逻辑、数据和用户界面分离,以提高代码的...
1. 数据库设计:这是系统的核心,需要精心设计数据库结构,确保数据的有效组织和高效访问。可能包含多个表,如“城乡基本信息表”、“人口统计表”、“基础设施表”等,每个表都有相应的字段来存储不同类别的数据。 ...
文章可能涵盖如何有效地使用J2EE技术的最佳实践,包括代码组织、测试策略、部署配置和性能优化。 总的来说,"J2EE探险者"系列将带领读者穿越J2EE的复杂世界,揭示其核心概念、工具和技术,帮助专业人士更好地理解...
1. **MongoDB**:作为NoSQL数据库,MongoDB是MERN堆栈的数据存储层。在"HikerDiariesv1"中,MongoDB用于存储用户的个人信息、徒步路线、日记条目等数据。其灵活性和文档结构使得存储非结构化数据变得容易,如用户...