MyBatis简介
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。
MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
原来的名字叫iBais
本来代码在Apache放着,后来又放到Google Code上了。然后就改名为Mybatis了~
优点
- 很容易学,很小巧,没有第三方依赖,装两个jar包+几个sql映射文件即可
- 灵活,因为我是学完动态sql之后才回来写的笔记,月学到后面越发现这玩意是真灵活能有很多组合呀,判断啊。然后呢,sql写在xml文件里,能方便的进行统一管理和优化。
- 提供映射标签,支持对象与数据库的字段关系映射
- 提供xml标签,支持动态sql就是编写一些判断语句根据实时发生的情况进行改变这就叫动态
缺点
- 写sql 的时候工作量很大,对于很多字段的,关联了很多表的更是这样,学着学着我就有感觉这玩意也没多容易啊不想前面学的spring和springMVC这么简单,这还是要写这么多。
- sql语句依赖于数据库,移植性差
- 二级缓冲机制不太行
JDBC
JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据。JDBC代表Java数据库连接
JDBC操作数据库的流程
面试可能会问,背!
下面这些就很固定的步骤
- 导入数据库驱动
- 注册驱动
- 获取数据库连接对象
- 写sql
- 预编译
- 执行sql
- 封装对象
JDBC连接池
获取数据库连接对象的时候太消耗资源,所以呢就出现连接池技术
我将数据库连接对象多放几个在一个池子里,你用的时候直接从池子里取不用的话在放回来。这样就不用一直连数据库了,提高了效率节省了资源
常用的连接池有Druid,C3P0
它优化后的JDBC流程为:
- 导入Druid的jar包
- 定义配置文件
- 通过工厂类获取数据库连接池对象
- 写sql
- 预编译
- 执行sql
- 封装结果
/** * 定义一个方法,查询emp表的数据将其封装为对象,然后装载集合,返回 */ public class JdbcDemo06 { public static void main(String[]args){ List<Emp> list = new JdbcDemo06().findall(); System.out.println(list); } public List<Emp> findall() { Connection conn = null; Statement stmt = null; ResultSet res = null; ArrayList<Emp> list = null; try { //1.注册驱动 Class.forName("com.mysql.jdbc.Driver"); //2.获取连接对象 conn = DriverManager.getConnection("jdbc:mysql:///db2", "root", "root"); //3.定义sql String sql = "select * from emp"; //4.获取执行sql对象 stmt = conn.createStatement(); //5.执行sql res = stmt.executeQuery(sql); //6.处理结果 Emp emp = null; list = new ArrayList<>(); while (res.next()) { int id = res.getInt("id"); String ename = res.getString("ename"); int job_id = res.getInt("job_id"); //创建emp对象,并赋值 emp = new Emp(); emp.setId(id); emp.setEname(ename); emp.setJob_id(job_id); //装载集合 list.add(emp); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException throwables) { throwables.printStackTrace(); } finally { if (stmt != null) { try { stmt.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } if (res != null) { try { res.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } } return list; } } 输出结果为: [Emp{id=1001, ename='孙悟空', job_id=4}, Emp{id=1002, ename='卢俊义', job_id=3}, Emp{id=1003, ename='林冲', job_id=3}, Emp{id=1004, ename='唐僧', job_id=2}, Emp{id=1005, ename='李逵', job_id=4}, Emp{id=1006, ename='宋江', job_id=2}, Emp{id=1007, ename='刘备', job_id=2}, Emp{id=1008, ename='猪八戒', job_id=4}, Emp{id=1009, ename='罗贯中', job_id=1}, Emp{id=1010, ename='吴用', job_id=3}, Emp{id=1011, ename='沙僧', job_id=4}, Emp{id=1012, ename='李逵', job_id=4}, Emp{id=1013, ename='小白龙', job_id=4}, Emp{id=1014, ename='关羽', job_id=4}]
Spring JdbcTemplate
用原生的jdbc API进行开发太繁琐了,例如我们要手动控制数据库连接的开启,异常处理,事务处理,最后还要关闭连接释放资源。
Spring帮我们提供了一个JDBC模块,它对Jdbc API进行了封装,目的就是为了更简洁的使用JDBC API。
使用SpringJDBC,开发人员只需要定义必要的参数、指定需要执行的sql语句,即可对数据库进行访问。
至于驱动的加载、数据库连接的开启与关闭、SQL 语句的创建与执行、异常处理以及事务处理等繁杂乏味的工作,则都是由 Spring JDBC 完成的。
简单的说就是,Spring框架对JDBC进行封装,使用JdbcTemplate方便实现对数据库操作。
为什么不用Spring JdbcTemplate
功能简单;
sql语句编写在java代码里;
硬编码高耦合
Hibernate?
全自动ORM框架,将jdbc的操作再次封装
只需要将一个javaBean交给它,它就能自己从数据库中取数据,全自动映射,不用自己写sql
如果要自己写sql,需要专门学习HQL
Mybatis?!
解决了Hibernate的问题,把编写sql这一步提取出来,把sql写在配置文件中
让程序员自己写sql
这节主要是简单了解下mybatis和jdbc,jdbctemplate他们的概念和他们之间的联系