什么是框架?
- 框架就是一个架子,好比表演节目,别人给你搭好了舞台(框架),怎么表演表演什么节目看你自己的需求
- 框架是一个半成品
- 对于Java语言来说,框架就是别人代码的封装,我们在使用别人代码的基础上完成我们自己的功能,拿来主义。体现了代码的可复用性、可重用性
框架要解决什么样的问题?
- 框架要解决的是基础代码的整合问题,因为软件复杂度越来越高,我们不可能把所有代码都从零进行开发,此时我们就需要一个优秀的框架整合基础代码。
- 框架往往经过多年发展,安全性、性能、可扩展性等非常好
什么时候使用框架?
企业级项目(有一定的规模)开发(避免大炮打蚊子)
怎么用框架?
Java框架使用的共性
- 就是一堆Jar包,导入jar包
- 往往允许通过配置文件进行设置(xml)
- 调用Jar包中的API使用框架
什么是分层?
分层其实就是把代码按照不同的功能放到不同的代码文件中,本质就是代码的拆分
- Model1模式:Jsp+Javabean(jsp接收请求)
- Model2模式(MVC)(servlet接收请求)
M:model(service+dao)
V:view(jsp页面视图)
C:controller(serlvet)
经典三层
表现层/视图层(jsp+servlet,view+Controller)
服务层(service)
Dao层(dao)
分层有什么好处?
解耦合、出现问题容易定位位置、维护代码方便
分层开发下的常见框架有哪些?
- 表现层/视图层:struts2、springmvc
- 服务层:spring
- Dao层:hibernate、mybatis
- SSH = sturts + spring + hibernate
- SSM = spring + springmvc + mybatis
一个流行的框架一定有它流行的道理,原生的代码让人容易理解底层的结构和原理,但是在谈到一个能够当做企业级的项目的时候,框架的优越性就显现出来了。那么框架到底好到哪里了呢?
我们来拿JDBC的原声带吗来做分析,也为后面所介绍的Mybatis做一个铺垫:
package com.ujiuye.mybatis.dao;
import com.ujiuye.mybatis.pojo.User;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
public class UserDaoImpl implements UserDao {
private String driver = "com.mysql.jdbc.Driver";
private String url = "jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8";
private String username = "root";
private String password = "root";
public List<User> queryUserList() throws Exception {
List<User> userList = new ArrayList<User>();
Class.forName(driver);
/**
* 问题一:频繁获取/释放数据库连接,影响数据库和应用性能
* 解决:数据库连接池技术,C3P0,DRUID(阿里巴巴荣誉出品,号称前无古人后无来者世界最强没有之一)
*/
Connection connection = DriverManager.getConnection(url, username, password);
/**
* 问题二:sql语句硬编码,后期难以维护
* 解决:若sql语句和java代码分离,比如sql写在配置文件中。Mybatis就是这么干的
*/
String sql = "select * from user";
/**
* 问题三:sql语句where条件和占位符一一对应,后期难以维护
*/
// String sql1 = "select * from user where username=? and id=?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
// preparedStatement.setInt(1,2);
ResultSet resultSet = preparedStatement.executeQuery();
User user = null;
/**
* 问题四:结果集解析麻烦,查询列硬编码
* 期望:如果单条记录直接返回实体对象,如果多条记录返回实体的集合
*/
while(resultSet.next()) {
user = new User();
user.setId(resultSet.getInt("id"));
user.setUsername(resultSet.getString("username"));
user.setSex(resultSet.getString("sex"));
user.setBirthday(resultSet.getDate("birthday"));
user.setAddress(resultSet.getString("address"));
userList.add(user);
}
resultSet.close();
preparedStatement.close();
connection.close();
return userList;
}
}