今天做了什么
搜索DAO层编写的时候,发现还有其他层。
于是搜索了java的分层结构。
SSH是 struts+spring+hibernate的一个集成框架,是目前比较流行的一种Web应用程序开源框架。
集成SSH框架的系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层(实体层)。
大概分为action层、service层、model层、dao层。
DAO层往往是在数据持久层,作用包括连接数据库和crud。
而JdbcTemplate是spring框架中的组成部分,于是又搜索了spring。
spring是J2EE应用程序框架,是轻量级的IoC(控制反转,把创建对象的权力交给框架,用xml文件解耦)和AOP(面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术,利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑 各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。)的容器框架,主要是针对javaBean的生命周期进行管理的轻量级容器,可以单独使用,也可以和Struts框架,ibatis框架等组合使用。
然后在知乎看到一个关于三大框架的答案,关于框架的学习,需要了解在没有这些框架之前如何处理,才能知道框架做了什么事情。
spring实现了完全解耦类之间的依赖关系, Spring的作用就是完全解耦类之间的依赖关系,一个类如果要依赖什么,那就是一个接口。至于如何实现这个接口,这都不重要了。只要拿到一个实现了这个接口的类,就可以轻松的通过xml配置文件把实现类注射到调用接口的那个类里。所有类之间的这种依赖关系就完全通过配置文件的方式替代了。所以Spring框架最核心的就是所谓的依赖注射和控制反转。
不过spring有点太复杂了。。。先搁置。。。
但spring也是可以拆分来用的
只看spring中jdbctemplate的使用。
如果不用JdbcTemplate,必须创建大量的冗余代码(创建连接,关闭连接,处理异常)中的所有DAO数据库的操作方法 - 插入,更新和删除。它的效率并不是很高,容易出错和乏味。
private DataSource dataSource;
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
public void insert(Customer customer){
String sql = "INSERT INTO CUSTOMER " +
"(CUST_ID, NAME, AGE) VALUES (?, ?, ?)";
Connection conn = null;
try {
conn = dataSource.getConnection();
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1, customer.getCustId());
ps.setString(2, customer.getName());
ps.setInt(3, customer.getAge());
ps.executeUpdate();
ps.close();
} catch (SQLException e) {
throw new RuntimeException(e);
} finally {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {}
}
}
}
使用JdbcTemplate可节省大量的冗余代码,因为JdbcTemplate类会自动处理它。
private DataSource dataSource;
private JdbcTemplate jdbcTemplate;
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
public void insert(Customer customer){
String sql = "INSERT INTO CUSTOMER " +
"(CUST_ID, NAME, AGE) VALUES (?, ?, ?)";
jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate.update(sql, new Object[] { customer.getCustId(),
customer.getName(),customer.getAge()
});
}
Interface和Imple比较好理解一个是接口,一个是实现,dao层只有接口没有实现。
也看过一个人问可不可以将所有sql操作封装为一个baseDao,觉得对于复杂的业务很难处理。。。
明天打算做什么
继续看spring,开始了解mybatis
遇到的问题
对于分层之后的结构各部分功能可以理解,但是不太明白分层的必要性。
spring的学习只能从jdbctemplate入手,其他的部分无从入手。
收获
spring非常重要,有人说是带给了java第二次青春。
了解开发流程、开发框架和分布式开发才是最重要的。对于java,代码好不好看倒不是最关键了,稳定可维护才是。