为什么要用Mybatis?
看一段JDBC的代码
public class DbUtil {
public static final String URL = "jdbc:mysql://localhost:3306/imooc";
public static final String USER = "liulx";
public static final String PASSWORD = "123456";
public static void main(String[] args) throws Exception {
// 1.加载驱动程序
Class.forName("com.mysql.jdbc.Driver");
// 2. 获得数据库连接
Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
// 3.操作数据库,实现增删改查
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT user_name, age FROM imooc_goddess");
// 如果有数据,rs.next()返回true
while(rs.next()){
System.out.println(rs.getString("user_name")+" 年龄:"+rs.getInt("age"));
}
// 关闭连接
rs.close();
stmt.close();
conn.close();
}
}
再封装一次
public class DbUtil {
public static final String URL = "jdbc:mysql://localhost:3306/imooc";
public static final String USER = "liulx";
public static final String PASSWORD = "123456";
private static Connection conn = null;
static{
try {
//1.加载驱动程序
Class.forName("com.mysql.jdbc.Driver");
//2. 获得数据库连接
conn = DriverManager.getConnection(URL, USER, PASSWORD);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static Connection getConnection(){
return conn;
}
public static void close(Connection connection) {
try {
if (connection != null && !connection.isClosed()) {
connection.close();
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
java提供了jdbc来与数据库通讯,使用jdbc操作数据库数据需要五步:
1.加载驱动。
2.获取数据库连接。
3.操作数据库,增删改查。
4.处理结果集
5.关闭连接
看了上面的代码,分析一下,在功能越来越多的情况下会造成什么问题?
重复代码
每次获取连接,处理结果集,关闭连接这些代码都重复的,当我们的功能越来越多,会出现大量的代码冗余。
资源管理
数据库连接是非常占用资源的,尤其是在高并发的情况下,如果每次都去建立数据库连接就会有性能问题。
后面提出了连接池的解决方案。
Result Set 结果集映射
ResultSet需要转换成POJO,都需要手动处理,会产生大量的重复代码,并且无法重用。
SQL和代码耦合
SQL和业务代码耦合在一起,违反高内聚、低耦合的程序设计思想。
还是那个问题为什么要用Mybatis?????
使用原生JDBC在我们日益渐大复杂的系统,频繁的开关数据库连接、各种复杂的Resultset、业务需求的改动、SQL代码和冗余代码的过多,已经各位秃头不堪重负,所以要减负!!!!
怎么减负?
Apache提出了DBUtils工具类,大大减少了操作数据库的代码,但是工具类也只是简单的封装JDBC,并不解渴,真正解放双手的是ORM概念的提出。
工具类解决了:支持数据源、方法封装、映射结果集
工具类没解决:SQL硬编码、参数只能顺序传入、没有提供缓存功能、ORM映射没有实现(实体类到数据库映射)。
(Object Relational Mapping ORM)概念和框架推出,结合连接池的时候可以解决大部分JDBC的问题,节省了大量的开发时间和成本,甚至有的框架可以实现消灭SQL。
如今市场上的框架大部分使用:Mybatis、Jpa、Hibernate。
在这里我就不讨论其他框架的优缺点了,后面会开一篇文章专门解释其优缺点。
我们来聊聊Mybatis可以给我们带来什么?
看看MyBatis的特性:
1.使用连接池对连接进行管理。
2.SQL和代码分离,集中管理。
3.参数映射和动态SQL。
4.结果集映射。
5.缓存管理。
6.重复的SQL提取。
7.插件机制。
mybatis 怎么运行呢?怎么使用?高雅的使用?
请听下回分解
网友评论