一、什么是框架
● 在文献中看到的framework被翻译为框架
● java常用的框架:
- SSM三大框架:Sping + SpringMVC + MyBatis
- SpringBoot
- SpringCloud
● 框架其实就是对通用代码的封装,提前写好了一堆接口和类,我们可以在做项目的时候直接引入这些接口和类(引入框架),基于这些现有的接口和类进行开发,可以大大提升开发的效率。
● 框架一般以jar包的形式存在(jar包中有class文件以及各种配置文件等)。
● SSM三大框架的学习顺序:MyBatis—Spring—SpringMVC
二、三层架构
● 表现层(UI):直接跟前端打交互(一是接收前端ajax请求,二是返回json数据给前端)
● 业务逻辑层(BLL):一是处理表现层转发过来的前端请求(也就是具体业务),二是将从持久层获取的数据返回到表现层。
● 数据访问层(DAL):直接操作数据库完成CRUD,并将获得的数据返回到上一层(也就是业务逻辑)。
● Java持久层框架:
- MyBatis
- Hibernate(实现了JPA规范)
- JOOQ
- Guzz
- Spring Data(实现了JPA规范)
- ActiveJDBC
三、JDBC的不足
实例代码1:
//.......
// sq1语句写死在java程序中
String sq1 ="insert into tuser(id,idCard,username,password,birth,gender,email,city,street,zipcode,phone,grade) values(?,?,?,?,?,?,?,?,?,?,?,?)";
PreparedStatement ps =conn.prepareStatement(sql);
// 繁琐的赋值:思考一下,这种有规律的代码能不能通过反射机制来做自动化。
ps.setString(1,“1");
ps.setString(2, "123456789");
ps.setString(3,"zhangsan");
ps.setString(4,"123456");
ps.setString(5,"1980-10-11");
ps.setString(6,"男");
ps.setString(7,"zhangsan@126.com");
ps.setString(8,"北京");
ps.setString(9,"大兴区凉水河二街");
ps.setString(10,"1000000");
ps.setString(11,"16398574152");
ps.setString(12,"A");// 执行SOL
int count =ps.executeUpdate();
// ......
实例代码2:
//......
//sql语句写死在程序里
String sq1="select id,idCard,username,passwordbirth,gender,email,city,street,zipcode,phone,grade from t user";
PreparedStatement ps = conn.prepareStatement(sal);
ResultSet rs =ps.executeQuery();
List<User> userList = new ArrayList<>();
//思考以下循环中的所有代码是否可以使用反射进行自动化封装。
while(rs.next()){
// 获取数据
String id = rs.getString("id");
String idCard =rs.getString("idCard");
String username =rs.getString("username");
String password = rs.getString("password");
String birth = rs.getString("birth");
String gender = rs.getString("gender");
String email = rs.getString("email");
String city = rs.getString("city");
String street = rs.getString("street");
String zipcode = rs.getString("zipcode");
String phone = rs.getString("phone"); String grade = rs.getString("grade");// 创建对象
User user = new User();
// 给对象属性赋值 user.setId(id);
user.setIdCard(idCard):
user.setUsername(username);
user.setPassword(password);
user.setBirth(birth);
user.setGender(gender);
user.setEmail(email);
user.setCity(city);
user.setStreet(street);
user.setZipcode(zipcode);
user.setPhone(phone);
user.setGrade(grade);
// 添加到集合
userList.add(user);}
//......
不足:
- SQL语句写死在Java程序中,不灵活。改SQL的话要更改代码。违背开闭原则OCP。
- 给 ?传值是繁琐的。思考:能不能自动化?
- 将结果集封装成Java对象是繁琐的。思考:能不能自动化?
四、下载MyBatis并了解MyBatis
● Mybatis本质上就是对JDBC的封装,通过Mybatis完成CRUD。
● Mybatis在三层架构中负责持久层的,属于持久层框架。
● Mybatis的发展【引用百度百科】:
- MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。
- iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)。
- 当前,最新版本是MyBatis 3.5.11,其发布时间是2022年09月18日。
● 下载:Releases · mybatis/mybatis-3 (github.com)
● ORM:对象关系映射
- O(Obiect):Java虚拟机的Java对象
- R(Relational):关系型数据库
- M(Mapping):将Java虚拟机中的java对象映射到数据库表中的一行记录,或是将数据库表中一行记录映射成Java虚拟机中的一个Java对象。
● MyBatis框架特点:
- 支持定制化 SQL、存储过程、基本映射以及高级映射
- 避了几乎所有的JDBC 代码中手动设置参数以及获取结果集
- 支持XML开发,也支持注解式开发。[为了保证sql语句的灵活,所以mybatis大部分是采用XML方式开发]
- 将接口和Java的POJOs(Plain Ordinary Java Obiect,简单普通的Java对象)映射成数据库中的记录体积小好学: 两个ar包,两个XML配置文件,
- 完全做到sql解耦合,
- 提供了基本映射标签
- 提供了高级映射标签
- 提供了XML标签,支持动态SQL的编写
- ......