java使用jdbc操作数据库(maven)

一.直接用原生的mysql-connector包操作

1.引入mysql-connector-java包

 <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.45</version>
 </dependency>

2.创建Properties文件,配置数据库连接信息

在source目录下创建jdbc.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test?serverTimezone=GMT
username=root
password=123456
initialPoolSize = 3
maxPoolSize = 6

3.创建获取properties文件键值对工具PropertiesUtil

package com.itcast.jdbc;

import java.io.IOException;
import java.util.Properties;

/**
 * 获取properties文件的工具
 */
public class PropertiesUtil {
    static Properties properties = new Properties();

    public static boolean loadFile(String fileName){
        try {
            //传入一个输入流
            properties.load(PropertiesUtil.class.getClassLoader().getResourceAsStream(fileName));
        }catch (IOException e) {
            return false;
        }
        return true;
    }

    public static String getPropertyValue(String key){
       String value = properties.getProperty(key);
       return value;
    }
}

4.创建jdbc工具类JdbcUtil

package com.itcast.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class JdbcUtil {
    private static Connection conn = null;

    public static Connection getConn(){
        PropertiesUtil.loadFile("jdbc.properties");
        String driver = PropertiesUtil.getPropertyValue("driver");
        String url = PropertiesUtil.getPropertyValue("url");
        String username = PropertiesUtil.getPropertyValue("username");
        String password = PropertiesUtil.getPropertyValue("password");

        try{
            //获取连接对象Connection
            Class.forName(driver);
            conn = DriverManager.getConnection(url,username,password);
        }catch (ClassNotFoundException e) {
            e.printStackTrace();
        }catch (SQLException e){
            e.printStackTrace();
            close();
        }
        return conn;
    }

    public static void close(){
        try{
            conn.close();
        }catch (SQLException e){
            e.printStackTrace();
        }
    }

}

5.客户端使用,就直接用JdbcUtil工具类就行了 通过操作连接对象操作数据库;

二.spring的JdbcTemplate操作数据库

1.jdbcTemplate是spring封装好的操作数据库的工具,也是用java的jdbc接口,需要依赖连接池数据源(dataSource),jdbcTemplate支持c3po,DBCP两种连接池工具,JdbcTemplate有update()方法执行增删该sql语句,query()执行查询sql

2.1创建UserDao文件,依赖JdbcTemplate,把数据操作封装起来

package com.itcast.dao;

import org.springframework.jdbc.core.JdbcTemplate;

public class UserDao {
    //依赖JdbcTemplate
    private JdbcTemplate jdbcTemplate;

    public JdbcTemplate getJdbcTemplate() {
        return jdbcTemplate;
    }

    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public int add(){
        String sql = "insert into user (`name`,`age`) values(?,?)";
        int count = this.jdbcTemplate.update(sql,"战三",55);
        return count;
    }


}

2.2配置xml,数据源->JdbcTemplate->UserDao

<?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.xsd">

    <!--读取properties配置-->
    <context:property-placeholder location="jdbc.properties"/>
    <!--配置数据源 c3p0-->
    <bean id="comboPooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="user" value="${username}"></property>
        <property name="password" value="${password}"></property>
        <property name="jdbcUrl" value="${url}"></property>
        <property name="driverClass" value="${driver}"></property>
        <property name="initialPoolSize" value="${initialPoolSize}"></property>
        <property name="maxPoolSize" value="${maxPoolSize}"></property>
    </bean>
    <!--配置jdbcTemplate 注入dataSource数据源-->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="comboPooledDataSource"></property>
    </bean>
    <!--配置Dao,注入jdbcTemplate-->
    <bean id="UserDao" name="userDao" class="com.itcast.dao.UserDao">
        <property name="jdbcTemplate" ref="jdbcTemplate"></property>
    </bean>
</beans>

2.3 从容器中获取UserDao,执行add方法即可插入一条数据

 public void run(){
        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
        UserDao userDao = (UserDao) context.getBean("userDao", UserDao.class);
        Integer count = userDao.add();
        System.out.println(count);
    }

三.JDBC原生方式进行事务处理 ,使用Connection对象来提交事务

@Test
    public void jdbc(){
        Connection conn = JdbcUtil.getConn();

        try{
            Statement stat = conn.createStatement();
            conn.setAutoCommit(false); //不自动提交
            String sql_update = " insert into user (name,age) values(\"张三\",100) ";
            stat.executeUpdate(sql_update);
            stat.executeUpdate(sql_update);
            conn.commit(); //提交
        }catch (Exception e){
            e.printStackTrace();
            conn.rollback();
        }

    }

四.spring框架对事务支持

1.引入包  spring-tx, 这个包定义了一些接口,Spring事务管理器的接口是org.springframework.transaction. PlatformTransactionManager,通过这个接口,Spring为各个平台如JDBC、Hibernate等都提供了对应的事务管理器。

2.spring中即提供了编程式事务的管理方式,也提供了声明式事务的管理方式:

编程式事务 TransactionTemplate

模板类 将事务的管理过程封装模板类中,实际开发很少使用】 

声明式事务 AOP
提供根接口 PlatFormTransactionManager 事务管理器接口 
用于描述spring中事务如何管理[如何创建、如何提交、如何回滚] 】

  • 声明式事务 

底层采用AOP技术实现,将事务管理过程(创建、提交、回滚)封装在一个事务通知bean[AfterAdvice ThrowsAdvice]中; 
通过在ioc容器中配置切入点的方式,将这个事务通知bean提供的事务管理功能引用给需要事务的核心业务逻辑方法(DAO)

3. 

猜你喜欢

转载自blog.csdn.net/littlexiaoshuishui/article/details/90644490