MyBatis是持久层的框架,方便对数据库进行操作
这节课只是分析,不用敲代码
原始jdbc操作(以查询数据为例):
//注册驱动
Class.forName("com.mysql.jdbc.Driver");
//获得连接
Connection connection = DriverManager.getConnection("jdbc:mysql:///test","root","123456");
//获得statement
PreparedStatement statement = connect.prepareStatement("select id,username,password from user");
//执行查询
ResultSet resultSet = statement.executeQuery();
//遍历结果集
while(resultSet.next()){
//封装实体
User user = new User();
user.setId(resultSet.getInt("id"));
user.setUsername(resultSet.getString("username"));
user.setPassword(resultSet.getString("username"));
//user实体封装完毕
System.out.println(user);
}
//释放资源
resultSet.close();
statement.close();
connection.close();
原始jdbc操作(以插入数据为例):
//模拟实体对象
User user = new User();
user.SetId(2);
user.setUsername("tom");
user.setPassword("lucy");
//注册驱动
Class.forName("com.mysql.jdbc.Driver");
//获得连接
Connection connection = DriverManager.getConnection("jdbc:mysql:///test","root","123456");
//获得statement
PreparedStatement statement = connect.prepareStatement("insert into user(id,username,password) values(?,?,?)");
//设置占位符参数
statement.setInt(1,user.getId());
statement.setString(2,user.getUsername());
statement.setString(3,user.getPassword());
//执行更新操作
statement.executeUpdate();
//释放资源
statement.close();
connection.close();
对比分析上面的查询数据、插入数据的写法。原始jdbc开发存在的问题如下
1、数据库连接创建、释放频繁造成系统资源浪费,从而影响系统性能
2、sql语句在代码中硬编码,造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码
3、查询操作时,需要手动将结果集中的数据手动封装到实体中。插入操作时,需要手动将实体的数据设置到sql语句的占位符位置
应对上述问题给出的解决方案如下
1、使用数据库连接池初始化连接资源
2、将sql语句抽取到xml配置文件中
3、使用反射、内省等底层技术,自动将实体与表进行属性与字段的自动映射
上面的解决方法不需要我们手动去实现,因为MyBatis就是专门解决这些问题的框架
什么是mybatis
1、mybatis是一个优秀的基于java的持久层(也就是dao层)框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创 建statement等繁杂的过程
2、mybatis通过xml或注解的方式,把要执行的各种statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句
3、最后mybatis框架执行sql,并将结果映射为java对象并返回。采用ORM思想(Object-Relational Mapping 对象关系映射)解决了实体和数据库映射的问题,对jdbc进行 了封装,屏蔽了jdbc api底层访问细节,使我们不用与jdbc api打交道,就可以完成对数据库的持久化操作
mybatis是持久层框架之一,是dao层的解决方案