为什么需要ORM框架?
先来看一段JDBC的代码!
static final String DB_URL = "jdbc:mysql://localhost:3308/mybatis?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true";
// Database credentials
static final String USER = "root";
static final String PASS = "root";
@Test
public void QueryStatementDemo() {
Connection conn = null;
Statement stmt = null;
List<TUser> users = new ArrayList<>();
try {
// STEP 2: 注册mysql的驱动
Class.forName("com.mysql.jdbc.Driver");
// STEP 3: 获得一个连接
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
// STEP 4: 创建一个查询
System.out.println("Creating statement...");
stmt = conn.createStatement();
String userName = "caojiulu";
String sql="SELECT * FROM t_user where user_name='"+userName+"'";
ResultSet rs = stmt.executeQuery(sql);
System.out.println(stmt.toString());
// STEP 5: 从resultSet中获取数据并转化成bean
while (rs.next()) {
System.out.println("------------------------------");
// Retrieve by column name
TUser user = new TUser();
// user.setId(rs.getInt("id"));
// user.setUserName(rs.getString("user_name"));
user.setRealName(rs.getString("real_name"));
user.setSex(rs.getByte("sex"));
user.setMobile(rs.getString("mobile"));
user.setEmail(rs.getString("email"));
user.setNote(rs.getString("note"));
System.out.println(user.toString());
users.add(user);
}
// STEP 6: 关闭连接
rs.close();
stmt.close();
conn.close();
} catch (SQLException se) {
// Handle errors for JDBC
se.printStackTrace();
} catch (Exception e) {
// Handle errors for Class.forName
e.printStackTrace();
} finally {
// finally block used to close resources
try {
if (stmt != null)
stmt.close();
} catch (SQLException se2) {
}// nothing we can do
try {
if (conn != null)
conn.close();
} catch (SQLException se) {
se.printStackTrace();
}
}
System.out.println("-------------------------");
System.out.println("there are "+users.size()+" users in the list!");
}
传统的JDBC编程存在的弊端:
1.数据库连接频繁的创建和关闭,缺点是浪费数据库资源,影响操作效率。
设想:使用数据库连接池
2.sql语句是硬编码,如果需求变更需要修改sql,就需要修改java代码,需要重新编译,系统不易维护。
设想:将sql语句 统一配置在文件中,修改sql不需要修改java代码
3.通过prepareStatement向占位符设置参数,存在硬编码(参数位置,参数)问题。系统不易维护。
设想:将sql中的占位符及对应的参数类型配置在配置文件中,能过自动输入到映射
4.遍历查询结果集存在硬编码(列名)
设想:通过进行 sql查询结果向java对象映射,能过自动输出到映射
ORM是什么?
对象关系映射(ORM),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换
ORM框架两大霸主
Mybatis是什么?
Mybatis前身是iBatis,其源于“Internet”和“abatis”的组合,本质是一种半自动的ORM框架,除了
POJO和映射关系之外,还需要编写SQL语句