工作这么久,也换了不少工作,每次面试还像高中时参加考试一样,胆战心惊,不知所措。说好听点,是心理素质差,缺乏经验;说难听些,就是知识点掌握不到位,毫无勇气面对别人的考察。因此在我的认知中Spring及其相关组件、MyBatis、Redis等等都是我内心宏伟目标的绊脚石。可事实真是这样吗?二战期间,中国人民面临极端困难,有些人甚至出卖自己的尊严,倒戈敌人,可伟人坚定认为:一切反动派都是纸老虎!最终的事实证明了伟人的论断是完全正确的。那从本篇开始我们要梳理的MyBatis,究竟是阻碍我们前进的绊脚石、纸老虎呢,还是助力我们登上人生巅峰的垫脚石呢?我想,学完这些文章后大家就会有自己的答案了!
本篇文章继续沿用前面文章的写作思路:以案例开始,而后渐次展开,直至弄懂其本质为止。本篇文章我们会展示两个案例,它们分别为:使用手动方式完成MySQL数据库的操作;使用mybatis完成MySQL数据库的操作。
手动方式操作MySQL
本小节,我们以JDBC的方式操作MySQL数据库。本案例操作的数据表为tbl_user,其中的关键字段有:id、nick_name、user_name。下面是jdbc方式操作数据库的具体代码:
public static void handle() throws ClassNotFoundException, SQLException {
// 1. 加载并注册 JDBC 驱动程序:
// 根据不同版本的 MySQL Connector/J 可能会有所变化
Class.forName("com.mysql.cj.jdbc.Driver");
// 2. 建立数据库连接
// 数据库地址、端口号和名称
String url = "jdbc:mysql://localhost:3306/usermanage";
// 数据库用户名
String username = "root";
// 数据库密码
String password = "chinasoft202007";
// 获取数据库连接
Connection connection = DriverManager.getConnection(url, username, password);
//
connection.setAutoCommit(true);
// 3. 创建 SQL 语句对象和结果集对象
Statement statement = connection.createStatement();
ResultSet resultSet = null;
// 4. 执行查询操作
// 表名和字段名
String query = "SELECT * FROM tbl_user";
resultSet = statement.executeQuery(query);
// 处理查询结果
while (resultSet.next()) {
String
id = resultSet.getString("id");
String name = resultSet.getString("login_name");
System.out.println("ID: " + id + ", Name: " + name);
}
// 关闭连接和释放资源
if (connection != null) {
try {
connection.close();
} catch (Exception e) {
}
}
if (statement != null) {
try {
statement.close();
} catch (Exception e) {
}
}
if (resultSet != null) {
try {
resultSet.close();
} catch (Exception e) {
}
}
}
从上述代码我们可以看出使用JDBC方式操作MySQL数据库大概可以分为六大步骤,它们分别为:
- 加载并注册 JDBC 驱动程序(Class.forName("com.mysql.cj.jdbc.Driver"))
- 建立数据库连接
- 创建 SQL 语句对象和结果集对象
- 执行查询操作
- 关闭连接和释放资源
mybatis方式操作MySQL
本小节,我们继续以mybatis的方式操作MySQL数据库。本案例操作的数据表同样是tbl_user。下面是mybatis方式操作数据库的具体代码:
ublic static void mybatis() throws IOException {
// 默认是 resource 目录
String resource = "config.xml";
// 将文件读取为流
InputStream inputStream = Resources.getResourceAsStream(resource);
// 创建 SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 获取 SqlSession
SqlSession session = sqlSessionFactory.openSession();
// 查询数据总量
Object obj = session.selectOne("org.com.chinasofti.springtransaction.UserDao.queryCountByCondition");
// 查询表中的记录
session.select("org.com.chinasofti.springtransaction.UserDao.queryByCondition", new ResultHandler() {
@Override
public void handleResult(ResultContext resultContext) {
UserDto userDto = (UserDto) resultContext.getResultObject();
System.out.println(userDto.getId() + "\t" + String.format("%-20s", userDto.getNickName()) + "\t" + String.format("%-35s", userDto.getUserName()));
// System.out.println(String.format("%-20s", userDto.getUserName()));
}
});
System.out.println("Totals\t" + obj.toString());
}
下面展示一下mybatis中config文件的具体配置,如果想了解详细的配置参数,可以参考官网:入门_MyBatis中文网。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<typeAlias alias="user" type="org.com.chinasofti.springtransaction.User"/>
<typeAlias alias="userDto" type="org.com.chinasofti.springtransaction.UserDto"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://数据库IP:端口/数据库名?serverTimezone=GMT"/>
<property name="username" value="用户名"/>
<property name="password" value="密码"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="user.xml"/>
</mappers>
</configuration>
在梳理本篇文章的时候,找到了一篇介绍mybatis重点配置项的博客。如果有兴趣,可以参考一下,具体地址为:MyBatis 快速入门和重点详解-CSDN博客。