当前位置:首页 > 问答 > 正文

Maven里头怎么搞定数据库连接和整合那些事儿,实用又不复杂的指南

Maven里头搞定数据库连接和整合,说白了就是三件事儿:告诉Maven你需要哪个数据库的“驱动程序”(就是那个能让Java程序认识数据库的jar包),然后写一个靠谱的配置告诉程序怎么连数据库,最后选个顺手的工具去执行SQL,咱们一步步来,用最实在的方式说清楚。

第一件事:在Maven里“叫外卖”——引入数据库驱动

你的Java程序想和MySQL、PostgreSQL这类数据库说话,中间得有个翻译官,这个翻译官就是数据库驱动,这个驱动是以jar包的形式存在的,你不需要自己去网上找然后手动下载,那太麻烦了,Maven的核心功能就是帮你管理这些依赖。

怎么做呢?打开你的Maven项目里的那个pom.xml文件,在<dependencies>标签里面,把你需要的驱动加进去,你现在最常用的是MySQL,你就去Maven的中央仓库网站(搜“maven repository”就能找到)搜“mysql connector j”,找到之后,选择和你数据库版本匹配的版本号,把那一大段XML代码复制过来。

举个例子,MySQL 8.x的驱动依赖看起来大概是这样的:

<dependencies>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.33</version> 
    </dependency>
</dependencies>

(根据Maven Central Repository上的MySQL Connector/J信息)

你复制粘贴完,Maven就会自动帮你把这个jar包下载到你的本地仓库里,这样,你的项目就知道怎么跟MySQL打交道了,如果你用PostgreSQL、Oracle或者其他数据库,过程一模一样,只是换一下依赖的内容而已。

第二件事:写个“接头暗号”——配置数据库连接信息

光有驱动还不行,你得告诉程序具体去连哪台机器上的哪个数据库,用什么账号密码,这些信息我们通常不会硬编码在Java代码里,因为换一个环境(比如从你的电脑换到服务器)就得改代码,太容易出错,最好的办法是写在一个配置文件里。

最常用、最简单的配置文件就是properties文件,你在项目的资源目录(通常是src/main/resources)下创建一个叫jdbc.properties的文件,里面的内容就像填表格一样:

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/你的数据库名?serverTimezone=Asia/Shanghai
jdbc.username=你的数据库用户名
jdbc.password=你的数据库密码

这里解释一下:

  • jdbc.driver:这是驱动类的全名,就是刚才引入的那个jar包里提供的。
  • jdbc.url:这是数据库的“地址”。localhost表示数据库在你本机,如果是远程服务器就换成IP地址;3306是MySQL默认的端口号;你的数据库名要换成真实的数据库名称,后面那个serverTimezone参数对于MySQL 8很重要,不设置可能报时区错误。
  • 用户名和密码就是你登录数据库用的。

第三件事:选个“得力助手”——使用JDBC Template还是别的

现在驱动和配置都有了,接下来就是怎么写代码去操作数据库,最原始的办法是用JDBC自己写,但那会很啰嗦,要处理各种异常,写很多重复代码,在Spring框架里,有个好东西叫JdbcTemplate,它把很多麻烦事都帮你包起来了,用起来非常简单。

你需要在pom.xml里引入Spring JDBC的依赖(如果你已经在用Spring Boot,它通常已经自动包含了):

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

(根据Spring Boot官方文档关于Starter的说明)

你需要让Spring知道你的数据库配置在哪,你可以用一个Java配置类来做这件事:

@Configuration
@PropertySource("classpath:jdbc.properties") // 告诉Spring去读那个配置文件
public class DataSourceConfig {
    @Value("${jdbc.driver}")
    private String driver;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;
    @Bean
    public DataSource dataSource() {
        // 这里用一个简单好用的数据源实现
        HikariDataSource dataSource = new HikariDataSource();
        dataSource.setDriverClassName(driver);
        dataSource.setJdbcUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }
    @Bean
    public JdbcTemplate jdbcTemplate(DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }
}

这个配置类干了啥呢?它通过@PropertySource找到了我们之前写的jdbc.properties文件,然后用@Value把里面的值一个个注入到变量里,它创建了一个DataSource(数据源),这个数据源就像是一个管理数据库连接的池子,用HikariCP这个高效的开源实现,它创建了一个JdbcTemplate的实例,并把数据源交给他。

在你需要操作数据库的类里(比如一个UserDao),你就可以直接“注入”这个JdbcTemplate来用了:

@Repository
public class UserDao {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    public String getUserNameById(Long id) {
        String sql = "SELECT name FROM user WHERE id = ?";
        // 一行代码就搞定查询,异常什么的JdbcTemplate都处理了
        return jdbcTemplate.queryForObject(sql, String.class, id);
    }
}

你看,这样是不是就清楚多了?总结一下就是:Maven管依赖,配置文件管连接信息,JdbcTemplate管简化操作,这三板斧下来,大部分简单的数据库操作需求都能满足,而且结构清晰,以后也容易维护,如果你想用更高级的ORM工具 like MyBatis 或者 JPA,基本原理也是类似的,只是最后一步换了个更强大的“助手”而已。

Maven里头怎么搞定数据库连接和整合那些事儿,实用又不复杂的指南