原生JDBC连接数据库
- 加载数据库驱动
- 通过驱动管理类
Connection
获得数据库连接 - 创建JDBC Statement对象
- 编写SQL语句并设置参数(使用preparedStatement)
- 通过
PreparedStatement
执行SQL并获取ResultSet
结果集 - 对结果进行解析处理
- 释放资源
resultSet
-->preparedStatement
-->connection
Demo程序
public class JDBCTest {
public static void main(String[] args) {
Connection connection=null;
ResultSet resultSet=null;
PreparedStatement preparedStatement=null;
try {
String url = "jdbc:mysql://localhost:3306/mybatis";
String user = "root";
String password = "123456";
String driver = "com.mysql.jdbc.Driver";
Class.forName(driver);
connection = DriverManager.getConnection(url, user, password);
String sql="select * from user where id = ?";
preparedStatement=connection.prepareStatement(sql);
preparedStatement.setString(1,"10");
resultSet =preparedStatement.executeQuery();
while (resultSet.next()){
System.out.println(resultSet.getString("id")+" : "+resultSet.getString("username"));
}
}catch (ClassNotFoundException e){
e.printStackTrace();
}catch (SQLException e){
e.printStackTrace();
}finally {
try {
if(resultSet!=null)
resultSet.close();
}catch (SQLException e){
e.printStackTrace();
}
try{
if(preparedStatement!=null)
preparedStatement.close();
}catch (SQLException e){
e.printStackTrace();
}
try {
if(connection!=null)
connection.close();
}catch (SQLException e){
e.printStackTrace();
}
}
}
}
原生JDBC存在的问题
-
数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能
解决:在
SqlMapConfig.xml
中配置数据链接池,使用连接池管理数据库连接 -
SQL语句在代码中硬编码,造成代码不易维护
解决:将SQL语句配置在
XXXmapper.xml
文件中与Java代码分离 -
使用
preparedStatement
向占有位符号传参存在硬编码,因为SQL语句的where条件不一定,修改SQL还要修改代码,系统不易维护解决:MyBatis自动将Java对象映射至SQL语句,通过
statement
中的parameterType
定义输入参数的类型 -
对结果集解析存在影编码(查询列名)SQL变化导致解析代码变化,系统不易维护
解决:MyBatis自动将SQL执行结果映射至Java对象,通过
statement
中的resultType
定义输出结果的类型
下一篇:MyBatis学习笔记[2]之MyBatis概述和架构原理 https://blog.csdn.net/Rabbit_Judy/article/details/80849140