您的位置:首页 > 其它

MyBatis学习(一)-- 为什么要使用MyBatis

2017-12-05 22:24 218 查看

MyBatis学习(一)– 为什么要使用MyBatis

标签(空格分隔): MyBatis学习

程序例子

问题总结

之前使用JDBC作为数据库持久层,一般需要以下几个步骤:
1. 加载数据库驱动
2. 创建并获得数据库连接(设置连接地址、用户名密码)
3. 创建jdbc statement对象
4. 设置sql语句
5. 设置sql语句中的参数(使用preparedStatement)
6. 通过statement执行sql并获得结果
7. 对sql执行结果并解析处理
8. 释放资源(关闭连接)


代码实例如下:

public static void main(String[] args) {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;

try {
// 加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");

// 通过驱动管理类获取数据库链接
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8",
"root", "mysql");
// 定义sql语句 ?表示占位符
String sql = "select * from user where username = ?";
// 获取预处理statement
preparedStatement = connection.prepareStatement(sql);
// 设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值
preparedStatement.setString(1, "王五");
// 向数据库发出sql执行查询,查询出结果集
resultSet = preparedStatement.executeQuery();
// 遍历查询结果集
while (resultSet.next()) {
System.out.println(resultSet.getString("id") + "  " + resultSet.getString("username"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 释放资源
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (preparedStatement != null) {
try {
preparedStatement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

}


针对上面的代码,总结如下问题:

创建数据库连接、释放资源频繁造成数据库资源的浪费,创建和关闭连接影响性能—-解决方案:采用数据库连接池

将sql硬编码在java代码中,如果sql语句修改需要重新编译java代码,不利于系统的维护 —-解决设想:将sql语句配置在配置文件中,即使sql变化不需要重新编译java代码

在prepareStatement中设置参数,对占位符位置和设置参数值硬编码在java代码中,不利于后期系统维护—解决设想:将sql语句及占位符全部配置在sql文件中

在遍历结果集时,将获取表的字段进行硬编码,不利于后期系统维护 —解决设想:将查询的结果集自动映射成java的pojo对象
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: