概述
CSDN话题挑战赛第2期
参赛话题:Java技术分享
目录
一、引言
二、原生 JDBC 的使用示例
三、Mybatis 的使用示例
四、原生 JDBC 和 Mybatis 的各自使用场景
五、结语
一、引言
上次写文章是在中秋之前,参加 csdn 的中秋活动,距今将近一个半月。期间有好几次提笔想写一些文字,却提不起兴趣,总觉得写不好。我反思了很久,决定先学习怎么写作。这段时间以来,断断续续的读了几本关于如何写作的书,大概的掌握了一些写作方法,所以今天先写一篇技术文章来练笔。本文会介绍JDBC 和 Mybatis 的开发方式和使用场景,帮助初学者更好的理解持久层技术,并推广 Mybatis 等持久层框架。从现在开始,假设你是初学者。在学习完 JDBC 后,就会继续学习 Mybatis 等持久层框架。在学习的过程中,我们会考虑到一个问题。既然有了JDBC 技术,为什么还会出现持久层框架?
二、原生 JDBC 的使用示例
首先,我们要知道 JDBC 是什么?
JDBC 是一种规范,是一套接口定义,它定义了如何使用JAVA语言操作数据库。然后各大数据库厂商使用Java 语言实现了这一套接口,我们在 Java 项目中就可以通过连接器操作数据库了。最常见的有 Mysql 连接器,不太清楚的可以看我之前写的文章:mysql-connector-java 详解。
下面,我们先看一下原生的 JDBC 编程的使用示例,并总结一下只使用 JDBC 编程的不足之处。
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/test?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();
}
}
}
}
以上是 JDBC 的编程示例,现在我们来总结一下不足之处,如下面四点所示:
1、在创建连接,关闭连接,异常处理的时侯有很多冗余、重复的代码,导致一个很长的方法中业务代码只占一小部分
2、Sql 语句在代码中硬编码,不易维护
3、Sql 输入参数需要自己映射,要手动处理sql中的占位符,将输入参数和占位符对应起来
4、获取数据库返回的数据时,需要手动创建对象,再遍历结果集,将数据放到对象中
三、Mybatis 的使用示例
首先,我们要知道 Mybatis 是什么?
Mybatis 是一个持久层框架,它对 JDBC 的操作数据库的过程进行封装,使开发者只需要关注 Sql 本身,而不需要花费精力去处理例如注册驱动、创建 connection、创建 statement、手动设置参数、检索结果集等繁琐的过程。Mybatis 简化了原生 JDBC 的开发过程,弥补了原生 JDBC 的不足之处。
下面,我们先看一下 Mybatis 编程的使用示例。
/**
* 用户实体
*/
public class User {
private int id;
private String username;// 用户姓名
private String sex;// 性别
private Date birthday;// 生日
private String address;// 地址
}
/**
* 用户管理mapper
*/
public interface UserMapper {
//查询用户列表
public List<User> findUserByUsername(String username);
}
<!-- 映射文件 -->
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.test.mybatis.mapper.UserMapper">
<!-- 查询用户列表 -->
<select id="findUserByUsername" parameterType="java.lang.String"
resultType="cn.itcast.mybatis.po.User">
select * from user where username = #{username}
</select>
</mapper>
/**
* 用户管理service
*/
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
/**
* 查询用户列表
*/
@Override
public List<User> findUserByUsername(String username){
return userMapper.findUserByUsername(username);
}
}
以上是使用 Mybatis 操作数据库的示例,在最后的 service 中可以看到操作数据库很简单,没有冗余的创建连接,关闭连接,处理异常代码。sql 的输入参数会自动映射到sql中,并且 sql 的输出结果集会自动映射到 Java 对象中。让我们可以更加专注于业务代码,不用考虑与业务无关的代码。
四、原生 JDBC 和 Mybatis 的各自使用场景
原生 JDBC 的使用场景有两方面。
一方面是在刚开始学习 Java 技术的时候,我们会在项目中使用原生 JDBC 。
另一方面,在一些非常老的项目中会用到原生的 JDBC ,因为历史原因,在开发这些老项目时,还没有出现持久层框架。如果这些老项目做了技术升级,就会逐步的将原生 JDBC 替换成持久层框架。
总的来说,Mybatis 简化了 JDBC 的开发过程。作为初学者,我们在学习技术时,要充分的理解和学习好 JDBC。但是在正式项目中,为了更好、更快的开发项目,一般都会使用 Mybatis 等持久化框架。
五、结语
最后,做一个总结,原生 JDBC 是使用 Java 语言操作数据库的基础,一定要认真学习,掌握了基础才能更好的学习框架,理解框架的原理。
只有当我们了解到使用原生的 JDBC 操作数据库的不足之处,才能更好的体会到 Mybatis 等持久层框架的优越性。
再说一下后续的规划,我会尝试写一些系列化、系统化的技术文章,将之前写的文章由一个个独立的点串起来成为一条线,使读者能够更好的理解相关技术。
如果有任何问题,欢迎在评论区留言,我会一一解答的。
最后
以上就是爱笑曲奇为你收集整理的持久层技术对比:Mybatis 与 JDBC 的区别到底在哪里一、引言二、原生 JDBC 的使用示例三、Mybatis 的使用示例四、原生 JDBC 和 Mybatis 的各自使用场景五、结语的全部内容,希望文章能够帮你解决持久层技术对比:Mybatis 与 JDBC 的区别到底在哪里一、引言二、原生 JDBC 的使用示例三、Mybatis 的使用示例四、原生 JDBC 和 Mybatis 的各自使用场景五、结语所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复