JAVA WEB中如何让数据库连接对开发人员完全透明?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA WEB中如何让数据库连接对开发人员完全透明?相关的知识,希望对你有一定的参考价值。
书上的技术,确实开了眼界。
列相关测试代码如下,慢慢体会开发的模式。
PropsUtil
package org.smart4j.chapter2.util; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Created by sahara on 2016/3/15. */ public final class PropsUtil { private static final Logger LOGGER=LoggerFactory.getLogger(PropsUtil.class); public static Properties loadProps(String fileName){ Properties props = null; InputStream is = null; try { is = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName); if (is == null) { throw new FileNotFoundException(fileName + "file is not found"); } props = new Properties(); props.load(is); } catch (IOException e){ LOGGER.error("load propertis file failure", e); } finally { if (is != null) { try { is.close(); } catch (IOException e) { LOGGER.error("close input stream failure", e); } } } return props; } public static String getString(Properties props, String key) { return getString(props, key, ""); } public static String getString(Properties props, String key, String defaultValue) { String value = defaultValue; if (props.containsKey(key)) { value = props.getProperty(key); } return value; } public static int getInt(Properties props, String key) { return getInt(props, key, 0); } public static int getInt(Properties props, String key , int defaultValue) { int value = defaultValue; if (props.containsKey(key)) { value = CastUtil.castInt(props.getProperty(key)); } return value; } public static boolean getBoolean(Properties props, String key) { return getBoolean(props, key, false); } public static boolean getBoolean(Properties props, String key, Boolean defaultValue) { boolean value = defaultValue; if (props.containsKey(key)) { value = CastUtil.castBoolean(props.getProperty(key)); } return value; } }
Customer--model:
package org.smart4j.chapter2.model; /** * Created by sahara on 2016/3/14. */ public class Customer { private long id; private String name; private String contact; private String telephone; private String email; private String remark; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getTelephone() { return telephone; } public void setTelephone(String telephone) { this.telephone = telephone; } public String getContact() { return contact; } public void setContact(String contact) { this.contact = contact; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
DatabaseHelper:
package org.smart4j.chapter2.helper; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.List; import java.util.Properties; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanListHandler; import org.smart4j.chapter2.util.PropsUtil; /** * Created by sahara on 2016/3/16. */ public final class DatabaseHelper { private static final Logger LOGGER = LoggerFactory.getLogger((DatabaseHelper.class)); private static final String DRIVER; private static final String URL; private static final String USERNAME; private static final String PASSWORD; private static final QueryRunner QUERY_RUNNER = new QueryRunner(); private static final ThreadLocal<Connection> CONNECTION_HOLDER = new ThreadLocal<Connection>(); static { Properties conf = PropsUtil.loadProps("config.properties"); DRIVER = conf.getProperty("jdbc.driver"); URL = conf.getProperty("jdbc.url"); USERNAME = conf.getProperty("jdbc.username"); PASSWORD = conf.getProperty("jdbc.password"); try { Class.forName(DRIVER); } catch (ClassNotFoundException e) { LOGGER.error("can not load jdbc driver", e); } } public static Connection getConnection() { Connection conn = CONNECTION_HOLDER.get(); if (conn == null) { try { conn = DriverManager.getConnection(URL, USERNAME, PASSWORD); }catch (SQLException e) { LOGGER.error("get connection failure", e); throw new RuntimeException(e); }finally { CONNECTION_HOLDER.set(conn); } } return conn; } public static void closeConnection() { Connection conn =CONNECTION_HOLDER.get(); if (conn != null) { try { conn.close(); } catch (SQLException e) { LOGGER.error("close connection failure", e); throw new RuntimeException(e); }finally { CONNECTION_HOLDER.remove(); } } } public static <T> List<T> queryEntityList(Class<T> entityClass, String sql, Object...params) { List<T> entityList; try { Connection conn = getConnection(); entityList = QUERY_RUNNER.query(conn, sql, new BeanListHandler<T>(entityClass), params); } catch (SQLException e) { LOGGER.error("query entity list failure", e); throw new RuntimeException(e); } finally { closeConnection(); } return entityList; } }
CustomerService:
package org.smart4j.chapter2.service; import java.sql.*; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Properties; import org.omg.PortableInterceptor.USER_EXCEPTION; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.smart4j.chapter2.model.Customer; import org.smart4j.chapter2.util.PropsUtil; import org.smart4j.chapter2.helper.DatabaseHelper; /** * Created by sahara on 2016/3/14. */ public class CustomerService { private static final Logger LOGGER = LoggerFactory.getLogger((CustomerService.class)); public List<Customer> getCustomerList() { String sql = "SELECT * FROM customer"; return DatabaseHelper.queryEntityList(Customer.class, sql); } public Customer getCustomer(long id) { // TODO return null; } public boolean createCustomer(Map<String, Object> fieldMap) { // TODO return false; } public boolean updateCustomer(long id, Map<String, Object> fieldMap) { // TODO return false; } }
测试过程截图:
以上是关于JAVA WEB中如何让数据库连接对开发人员完全透明?的主要内容,如果未能解决你的问题,请参考以下文章