JDBC
JDBC(Java Database Connectivity)是Java语言和关系型数据库交互的一种规范。JDBC提供了一套完整的API用于连接、访问数据库,并返回sql执行对应的结果。
本系列主要研究MyBatis源码,JDBC我们仅做一个使用示例,对MyBatis起一个引导作用,并不会对其底层做研究。
示例
导入相应的jar包
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.8</version>
</dependency>
我使用的是Mysql 8,大家进行相应的修改就好
package com.nona.jdbc;
import com.mysql.cj.jdbc.MysqlDataSource;
import java.sql.*;
/**
* @author nona9961
* @date 2021/12/27
*/
public class JDBCExample {
public static void main(String[] args) throws SQLException {
// 获取数据源——不用DriverManager,DataSource的实现类MysqlDataSource是Mysql提供的,所以不需要设置Driver
MysqlDataSource mysqlDataSource = new MysqlDataSource();
mysqlDataSource.setUser("root");
mysqlDataSource.setPassword("123456");
mysqlDataSource.setURL("jdbc:mysql:///myBatis-user");
// 获取连接
Connection connection = mysqlDataSource.getConnection();
// sql
PreparedStatement preparedStatement = connection.prepareStatement("select * from user ");
// 查询获得结果集
ResultSet resultSet = preparedStatement.executeQuery();
// 遍历结果集
while (resultSet.next()) {
ResultSetMetaData metaData = resultSet.getMetaData();
for (int i = 1; i <= metaData.getColumnCount(); i++) {
String columnName = metaData.getColumnName(i);
Object object = resultSet.getObject(columnName);
System.out.println("columnName = " + columnName + ", value = " + object);
}
}
connection.close();
}
}
/*结果为
columnName = id, value = 1
columnName = name, value = 张三
columnName = id, value = 2
columnName = name, value = 李四
columnName = id, value = 3
columnName = name, value = null
*/
可以看到一次查询主要经过了如下几步:
- 创建并配置
DataSource
类- 一般来说这个实现类是由各家的厂商帮忙实现的
- 获取连接
- 准备好sql
- 执行sql
- 操作结果集
我们知道第一步仅在启动初始化阶段执行一次;第二步可以用数据库连接池来优化。
接下来我们直接上手MyBatis,按照文档来使用。
MyBatis示例
打开mybatis官网找到getting started,Introduction
里面有语言切换,有需要的可以换成中文。根据其内容简单写个demo,这就是我们最开始用的程序了。
首先在resources(也就是classpath)里面创建主配置文件mybatis-config.xml
。内容如下
<?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>
<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:///zdy_mybatis"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper.xml"/>
</mappers>
</configuration>
可以看到我们需要在标签dataSource
里面配置数据源相关信息,比起上面JDBC多了driver的参数,由它来给出真正的数据库驱动是什么。
注意到标签mappers
,这个标签用于告诉mybatis,我们sql语句放在那里 ,那么相应的我们在resources里面创建另一个xml文件:mapper.xml
<?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="myMapper">
<select id="selectUser" resultType="com.nona.pojo.User">
select * from user where id=#{id}
</select>
</mapper>
这里我已经写了一个根据id查询user的sql,话不多说跟着官网的实例我们写一个demo
package com.nona.mybatis;
import com.nona.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
/**
* @author nona9961
* @date 2022/1/27
*/
public class GetStartedDemo {
public static void main(String[] args) throws IOException {
// 读取配置文件为流
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
// 根据配置文件创建核心类:sqlSessionFactory;这里没有关闭resourceAsStream是因为读取完配置并解析之后,mybatis自动帮我们关闭了流
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
// try-with-resources用法,好处就是会自动帮你调用close方法关闭资源
try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
// User类自己创建一下就好
User user = sqlSession.selectOne("myMapper.selectUser", 2);
System.out.println(user);
}
}
}
/*
User{id=2, name='李四'}
*/
请大家不要吐槽时间上的跨越,我也没想到下一次想起来更新居然就过了1个月了。
至此,一个简单的demo就完成了,之后我们会根据这个demo去探寻mybatis的源码
暂时搁置
发现java orm比我像的要多得多,暂时把mybatis搁置了