1、 什么是MyBatis?(百度百科);
- MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。
- MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。【降低了冗余度】
- MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。【映射机制】
2、 MyBatis是SSM框架中的一种框架:;
- SSM框架包含:Spring + SpringMVC + MyBatis【框架就是对通用代码的封装,一般包含大量的类和接口】
- MVC的三层架构如下:
(1)表现层(UI):接收前端的请求,并把结果返回给前端
(2)业务逻辑层(BLL):处理表现层转发的前端请求,将从持久层的数据返回到表现层
(3)数据访问层(DAL):根据从业务层转发的请求去操作数据库,并将操作结果返回到业务层
3、 有了JDBC为什么还要使用MyBatis?;
-
对于MyBatis的底层就是有JDBC来完成的,可以说MyBatis属于JDBC的优化
-
JDBC具有一些缺点:
-
SQL语句内嵌在Java程序中,不灵活,违反了OCP原则
-
传递参数和结果集获取中包含很多重复代码,冗余度太高了
-
案例如下:
// sql语句写死在java程序中
String sql = "select id,idCard,username,password,birth,gender,email,city,street,zipcode,phone,grade from t_user";
PreparedStatement ps = conn.prepareStatement(sql);
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);
}
4、 什么是对象关系映射呢?(ORM);
- O(Object):JVM 中 java 对象
- R(Relation):关系型数据库
- M(Mapping):映射
如图中所示,有一个User类,我们可以创建多个类的实例;t_user 代表三条数据,包含的字段与User类相同。
从表中的一条记录到Java对象 或 Java对象到表中一条记录的对应关系,就是映射。
5、 MyBatis框架有哪些特点呢?;
○属于半自动化ORM框架
○支持定制化 SQL、存储过程、基本映射以及高级映射
○避免了几乎所有的 JDBC 代码中手动设置参数以及获取结果集
○支持XML开发,也支持注解式开发。【大部分是采用XML方式开发】
○将接口和 Java 的 POJOs(Plain Ordinary Java Object,简单普通的Java对象)映射成数据库中的记录
○体积小好学:一个jar包,两个XML配置文件。
○完全做到sql解耦合。
○提供了基本映射标签、 提供了高级映射标签、提供了XML标签,支持动态SQL的编写。