最近学习java与数据库的连接,jdbc是其中最重要的工具。虽然说现在有很多仓储层框架,比如mybatis之类的,我们不用直接跟jdbc打交道,但这些框架的底层还是离不开jdbc。
使用jdbc需要先往spring容器注入DataSource的bean
@Configuration
@Slf4j
public class DataSourceConfig {
@Autowired
private CommonProperties commonProperties;
@Bean
public DataSource getDataSource() {
log.info("开始配置mysql...");
DriverManagerDataSource dataSource = new DriverManagerDataSource(commonProperties.getUrl(),
commonProperties.getUserName(),
commonProperties.getUserPwd());
dataSource.setDriverClassName(commonProperties.getDriver());
log.info("mysql配置成功...");
return dataSource;
}
}
DataSource的实现类有很多,比如
org.springframework.jdbc.datasource.DriverManagerDataSource,该类建立连接是只要有连接就新建一个connection,根本没有连接池的作用。
org.apache.commons.dbcp.BasicDataSource,该实现类真正使用了连接池技术。
我的这个demo采用了DriverManagerDataSource,
创建一个DriverManagerDataSource实例化对象,并交给spring容器托管,bean的创建需要使用到数据库相关的参数,通过CommonProperties读取application.properties中的配置项:
datasource.url=jdbc:mysql://localhost:3306/Test
datasource.username=root
datasource.password=123456
datasource.driver-class-name=com.mysql.jdbc.Driver
JDBC操作
dataSource准备好之后,接下来就可以进行数据的增删查改了,本次demo进行了一次简单的查询操作,使用到的类有
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.sql.DataSource;
在service层,我们直接建立连接,发起sql查询,结果读取操作:
public void queryInfo() {
Connection connection = null;
PreparedStatement selectStatement = null;
try {
//手动sql查询
connection = dataSource.getConnection();
selectStatement = connection
.prepareStatement("SELECT * FROM T_Record WHERE RecordId = 11007");
ResultSet resultSet = selectStatement.executeQuery();
if (resultSet.next()) {
log.info("{}", resultSet.getString("UserName"));
}
} catch (SQLException e) {
log.error("查询数据库失败", e);
} finally {
try {
if (null != selectStatement) {
selectStatement.close();
}
if (null != connection) {
connection.close();
}
} catch (Exception e) {
log.error("关闭数据库连接失败", e);
}
}
}
上述demo,通过dataSource这个bean活动数据库连接对象connection,通过PreparedStatement发起sql查询,查询结果存储与ResultSet中。
很多orm框架底层就是封装了上述这些操作。