FunnyBear的Java之旅 - Spring篇7步连接MySQL

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FunnyBear的Java之旅 - Spring篇7步连接MySQL相关的知识,希望对你有一定的参考价值。

准备工作

a) 启动mysql服务器, 使用MySQL Workbench新建数据库

技术分享

b) 下载Eclipse EE, 并安装Maven和Spring Framework插件

c) 由于默认的Maven服务器可能被墙,所以需要为Maven配置mirror server,此处不展开解释

最终的项目结构将如图所示,具体每个文件的作用将在下文中逐步介绍

技术分享

第一步:在Eclipse中新建Maven project。 主要是为了方便jar的导入和项目结构的管理

技术分享技术分享

第二步:导入相关jar包。修改Maven project自动生成的pom.xml文件。可以通过Eclipse的Maven插件,以界面的方式进行修改,也可以直接修改xml文件。

其中主要包含以下几类jar包:

a) Spring的jar包,主要用来提供依赖注入,标注解析和数据模型生成的功能

b) MySQL connector, 为JDBC提供数据库连接驱动器

c) Apache Commons DBCP (DB connection pool), 载入JDBC实例,暴露对数据进行操作的接口

技术分享
<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>4.2.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.2.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>4.2.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>4.2.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>javax.inject</groupId>
        <artifactId>javax.inject</artifactId>
        <version>1</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>6.0.4</version>
    </dependency>
    <dependency>
        <groupId>commons-dbcp</groupId>
        <artifactId>commons-dbcp</artifactId>
        <version>1.4</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>4.3.3.RELEASE</version>
    </dependency>
</dependencies>
View Code

第三步:新建DAO对象,该对象的字段应与数据库表中的列相对应。这里我们以准备工作中新建的user表为例,新建一个User对象。

技术分享
public class User {
    private String name;
    private String email;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "User [name=" + name + ", email=" + email + "]";
    }
}
View Code

第四步:准备JDBC配置文件,该文件将通过Spring,以配置文件的形式,为对象设置属性。jdbc.properties

技术分享
jdbc.username = root
jdbc.password = admin
jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/webshop
View Code

第五步:新建Spring beans配置文件,beas.xml

a) <context:component-scan> 用于指定从哪个package中扫描标记(Annotation), 如@Component, 就会被扫描成为一个bean,即一个实例对象,被放置于Spring的ApplicationContext中

b) <context:property-placeholder> 用于指定从哪个配置文件中导入对象属性,这里导入我们创建的JDBC属性文件

c) 以Bean的方式声明一个BasicDataSource对象,用<property>标签,从属性文件中读取属性,赋值给BasicDataSource对象

技术分享
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">

    <context:component-scan base-package="com.funnybear.springtest.DAOtest">
    </context:component-scan>

    <context:property-placeholder
        location="com/funnybear/springtest/properties/jdbc.properties" />

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName" value="${jdbc.driver}"></property>
        <property name="url" value="${jdbc.url}"></property>
        <property name="username" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>

</beans>
View Code

 第六步:新建UsersDAO类,UsersDAO.java

a) @Component 相当于在bean.xml中声明一个bean,UsersDAO对象将被存储于ApplicationContext中

b) @Autowired 用于指定类中需要进行依赖注入的属性。在这里,我们在bean的声明的dataSource类将被注入到UsersDAO类中,这一过程由Spring framework完成

c) 新建一个RowMapper对象,将数据填充进User对象

技术分享
package com.funnybear.springtest.DAOtest;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Component;

@Component("usersDAO")
public class UsersDAO {

    private JdbcTemplate jdbc;

    @Autowired
    public void setDataSource(DataSource dataSource) {
        this.jdbc = new JdbcTemplate(dataSource);
    }

    public List<User> getUsers() {

        return jdbc.query("select * from users", new RowMapper<User>() {

            public User mapRow(ResultSet rs, int rowNum) throws SQLException {
                User user = new User();

                user.setName(rs.getString("name"));
                user.setEmail(rs.getString("email"));

                return user;
            }

        });

    }
}
View Code

第七步:在程序主类中,调用UsersDAO

a) 导入bean.xml来生成ApplicationContext

b) 取出UsersDAO实例,这时UsersDAO和它所依赖的对象会被真正创建

c) 调用并显示数据,至此就完成了整个流程

技术分享
package com.funnybear.springtest.DAOtest;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext(
                "com/funnybear/springtest/configurations/beans.xml");

        UsersDAO dao = (UsersDAO) context.getBean("usersDAO");
        System.out.println(dao.getUsers());

        ((ClassPathXmlApplicationContext) context).close();
    }
}
View Code

总结:Spring并不是连接数据的必要组件,但它提供的依赖注入和数据对象转换类,能帮助我们以配置的方式访问数据库,从而让项目结构更清晰,更易于维护。

最后,欢迎转载,但请注明出处。

以上是关于FunnyBear的Java之旅 - Spring篇7步连接MySQL的主要内容,如果未能解决你的问题,请参考以下文章

FunnyBear的Java之旅 - Spring篇7步连接MySQL

第1章—Spring之旅—简化Spring的java开发

Spring学习笔记——Spring之旅

spring之旅

Java之旅--定时任务(TimerQuartzSpringLinuxCron)

SpringInAction读书笔记--第1章Spring之旅