一.直接用原生的mysql-connector包操作
1.引入mysql-connector-java包
mysql
mysql-connector-java
5.1.45
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
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.