Spring配置文件配置c3p0连接MySQL数据库简单实现(注解版)

导入Maven依赖

<!-- 报错java不支持发型版本加上 properties-->
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <spring-version>5.0.2.RELEASE</spring-version>
</properties>

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
    <dependency>
        <groupId>c3p0</groupId>
        <artifactId>c3p0</artifactId>
        <version>0.9.1.2</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.11</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.2.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring-version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>${spring-version}</version>
    </dependency>
</dependencies>

编写实体类

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * 功能:实体类
 * @author 花子June
 * @modifier 花子June
 * @date 2021-03-16 8:57
 * @Version V1.0
 */
@Component 
public class Person {

    @Value("6")
    private String pId;
    @Value("hy")
    private String pName;
    @Value("45")
    private String page;

    public Person() {
    }

    public Person(String pId, String pName, String page) {
        this.pId = pId;
        this.pName = pName;
        this.page = page;
    }

    public String getpId() {
        return pId;
    }

    public void setpId(String pId) {
        this.pId = pId;
    }

    public String getpName() {
        return pName;
    }


    public void setpName(String pName) {
        this.pName = pName;
    }

    public String getPage() {
        return page;
    }


    public void setPage(String page) {
        this.page = page;
    }

    @Override
    public String toString() {
        return "Person{" +
                "pId='" + pId + '\'' +
                ", pName='" + pName + '\'' +
                ", page='" + page + '\'' +
                '}';
    }
}

编写properties配置文件

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/db_wlp?serverTimezone=UTC
jdbc.user=root
jdbc.password=xxxx

编写DataSource配置类

import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
import java.beans.PropertyVetoException;

/**
 * 功能:
 * @author 花子June
 * @modifier 花子June
 * @date 2021-03-16 10:57
 * @Version V1.0
 */
@PropertySource("jdbc.properties") 	// 导入配置文件
@ComponentScan("com.wlp")			// 扫描包下的注解
@Component("dataSource")			// 普通类注册bean并设置bean的id
public class Datasource {

    @Value("${jdbc.driver}")		// 设置driver为properties中的数据
    private String driver;
    @Value("${jdbc.url}")			// 设置url为properties中的数据
    private String url;
    @Value("${jdbc.user}")			// 设置user为properties中的数据
    private String user;
    @Value("${jdbc.password}")		// 设置password为properties中的数据
    private String pass;

    @Bean 
    // 标注将该方法的返回值存储到 Spring 容器中(可设置id)
    // 之后可根据id自动注入
    public ComboPooledDataSource getDataSource() throws PropertyVetoException {
		// 获取ComboPooledDataSource 对象
        ComboPooledDataSource dataSource = new ComboPooledDataSource();

		// 设置 driver,url,pass,user
        dataSource.setDriverClass(driver);  // 设置Driver有异常(已抛出)
        dataSource.setJdbcUrl(url);
        dataSource.setPassword(pass);
        dataSource.setUser(user);

		// 返回一个DataSource数据源
        return dataSource;
    }

}

编写Dao

/**
 * 功能:
 * @author 花子June
 * @modifier 花子June
 * @date 2021-03-16 8:59
 * @Version V1.0
 */
public interface PersonDao {
	// 插入一条数据
    int insertPerson(Person p) throws Exception;

}
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
import java.sql.Connection;
import java.sql.PreparedStatement;

/**
 * 功能:
 * @author 花子June
 * @modifier 花子June
 * @date 2021-03-16 10:28
 * @Version V1.0
 */
@Repository("personDaoImpl2")
public class PersonDaoImpl2 implements PersonDao {

	// 使用注解会自动注入,但需要提供构造方法,
	// 如果存在多个ComboPooledDataSource 需指定bean的id
    private ComboPooledDataSource dataSource;

    public PersonDaoImpl2(ComboPooledDataSource dataSource) {
        this.dataSource = dataSource;
    }

    @Override
    public int insertPerson(Person p) throws Exception {
		// 获取数据库连接并预编译sql语句
        PreparedStatement ps = dataSource.getConnection().prepareStatement("insert into person values(?,?,?)");

		// 设置?的值
        ps.setString(1,p.getpId());
        ps.setString(2,p.getpName());
        ps.setString(3,p.getPage());

		// 执行并返回结果
        return ps.executeUpdate();   // 省略关闭资源
    }
}

编写Service

/**
 * 功能:
 *
 * @author 花子June
 * @modifier 花子June
 * @date 2021-03-16 9:07
 * @Version V1.0
 */
public interface PersonService {

    int save(Person p);
}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

/**
 * 功能:
 *
 * @author 花子June
 * @modifier 花子June
 * @date 2021-03-16 10:39
 * @Version V1.0
 */
@Service  // 注册bean
public class PersonServiceImpl2 implements PersonService {

	// 使用注解自动注入并指定注入的bean的id 
    @Qualifier("personDaoImpl2")
    @Autowired  
    private PersonDao personDao;

    @Override
    public int save(Person p) {
        try {
        	// 执行dao中的方法并返回结果
            return personDao.insertPerson(p);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return 0;
    }
}

测试

 @Test
    public void text3(){
		// 获取管理注解bean的容器
        ApplicationContext anno = new AnnotationConfigApplicationContext(Datasource.class);

		// 根据bean的id获取对象
        PersonServiceImpl2 p2 = anno.getBean("personServiceImpl2", PersonServiceImpl2.class);

		// 执行方法
        System.out.println(p2.save(new Person("4","51","65")));
    }
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值