结合《深入浅出hibernate》
ORM ( Object/Relation Mapping–对象/关系数据库映射 )
主要面向的是MVC的M层,是业务逻辑和数据逻辑关联紧密部分,也就是持久层部分
耦合:即事务之间的关联关系,解耦合:降低两者的关联关系
程序一:
| import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class update_msg { public boolean update_msg_do(String id,String amount) { Statement stmt=null; try{ Class.forName(“org.gjt.mm.mysql.Driver”).newInstance(); con=DriverManager.getConnection(“localhost”,”qk31″,”test”); String updateSQL=”update msg set amount=’”+amount+”‘ where id=’”+id+”‘”; stmt=con.createStatement();
}catch(Exception e){
con.close(); stmt.close(); }
} }
|
程序二:增加一个配置的抽象类,方便jdbc以及用户名和数据库之类的灵活性
| public abstract class config { public String DB_driver=”org.gjt.mm.mysql.Driver”; public String DB_name=”qk31″; public String DB_passwd=”11111″; public String DB_con=”jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=gbk”; }
import java.sql.Connection; public class update_msg extends config { public boolean update_msg_do(String id,String amount) { Statement stmt=null; try{ Class.forName(DB_driver).newInstance(); con=DriverManager.getConnection(DB_con,DB_name,DB_passwd); String updateSQL=”update msg set amount=’”+amount+”‘ where id=’”+id+”‘”; stmt=con.createStatement();
}catch(Exception e){
con.close(); stmt.close(); }
} }
|
要提高并发,增加连接池之类的,代码再次重构。
通过一个class把update_msg类和config类中间增加一个类,用于对connection和closeCon进以及select和update/insert这些封装成一个类,方便要用连接池或者其他的配置时候修改一下connection方法就可以了。
结构变成:
config->db->update_msg
————————————
DAO(Data Access Object),实际包含:Data Accessor模式和Active Domain Object模式
Data Accessor模式:分离数据访问和业务逻辑访问
Active Domain Object模式:业务数据的对象化封装
DAO模式把数据访问划分抽象层和实现层,分离数据使用和数据访问实现细节
DAO模式可以在数据访问部分实现统一资源调用,通过连接池以及Statement Cache ,Data Cache各种方法优化数据库访问,达到性能提升
DAO(Data Access Object)=Data Accessor(数据访问) + Active Domain Object(数据使用)
数据库一个客户的表custom,一个促销规则表promotion
customer表
| sum:int |
| level:int |
| id:string |
————————-
promotion表:
| ratio:int |
| level:int |
Custom和CostomDAO,promotion和promotionDAO
| public class Costomer{
private int sum,level; private String id; public String getId() { return id; } public void setId(String strId) { id=strId; } 。。。。。。。。 } |
| public class CustomDAO
{ public static Costomer getCustomer(String id) { Customer Customer = null; Connection con=null; ResultSet rset_customer=null; PreparedStatement stmt_customer=null; try{ con=DBHelper.getConnection(); stmt_costomer=con.prepareStatement(“select * from customer where id=?”); stmt_costomer.setString(1,id); rset_customer=stmt_customer.excuteQuery(); while(rset_customer.next) { customer=new customer(); customer.setId(id); int level=rset_customer.getInt(1) 。。。。。 } } } } |