簡介:
1 spring的jdbcTemplate操作:
(1): 實現crud操作
-->增加,修改,刪除,調用模板update方法
-->查詢某個值的時候,調用queryForObject方法
----自己實現類封裝數據
-->查詢對象,調用queryForObject方法
-->查詢list集合,調用query方法
2 spring配置連接池
(1)配置c3p0連接池
(2)dao注入jdbcTemplate操作
3 spring事務管理
(1)事務概念
(2)spring進行事務管理api
(3)基於xml配置和註解方式實現事務管理
Spring的jdbcTemplate操作
1 spring框架一站式框架 (1)針對javaee三層,每一層都有解決技術 (2)在dao層,使用 jdbcTemplate
2 spring對不同的持久化層技術都進行封裝
(1)jdbcTemplate對jdbc進行封裝
3 jdbcTemplate使用和dbutils使用很相似,都數據庫進行crud操作 |
增加
1 導入jdbcTemplate使用的jar包
2 創建對象,設置數據庫信息 3 創建jdbcTemplate對象,設置數據源 4 調用jdbcTemplate對象裏面的方法實現操作
|
修改
刪除
查詢
1 使用jdbcTemplate實現查詢操作
2 查詢具體實現 第一個 查詢返回某一個值 (1)第一個參數是sql語句 (2)第二個參數 返回類型的class
Jdbc實現
第二個 查詢返回對象 第一個參數是sql語句 第二個參數是 RowMapper,是接口,類似於dbutils裏面接口 第三個參數是 可變參數
第三個 查詢返回list集合
|
Spring配置連接池和dao使用jdbcTemplate
1 spring配置c3p0連接池 第一步 導入jar包 第二步 創建spring配置文件,配置連接池 (1)把代碼在配置文件中進行配置
2 dao使用jdbcTemplate (1)創建service和dao,配置service和dao對象,在service注入dao對象 (2)創建jdbcTemplate對象,把模板對象注入到dao裏面 (3)在jdbcTemplate對象裏面注入dataSource |
jdbcTemplate測試代碼
JdbcTemplateDemo1:
public class JdbcTemplateDemo1 {
private static DriverManagerDataSource dataSource;
private static JdbcTemplate jdbcTemplate;
static {
dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///test");
dataSource.setUsername("root");
dataSource.setPassword("123");
jdbcTemplate = new JdbcTemplate(dataSource);
}
@Test
public void add() {
String sql = "insert user values(?,?)";
int row = jdbcTemplate.update(sql, "liu", "123");
System.out.println(row);
}
@Test
public void delete() {
String sql = "delete from user where username = ?";
int row = jdbcTemplate.update(sql,"he");
System.out.println(row);
}
@Test
public void update() {
String sql = "update user set username=? where username=?";
int row = jdbcTemplate.update(sql,"wei","liu");
System.out.println(row);
}
}
JdbcTemplateDemo2:
public class JdbcTemplateDemo2 {
private static DriverManagerDataSource dataSource;
private static JdbcTemplate jdbcTemplate;
static {
dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///test");
dataSource.setUsername("root");
dataSource.setPassword("123");
jdbcTemplate = new JdbcTemplate(dataSource);
}
/**
* 查詢數量
*/
@Test
public void query1() {
String sql = "select count(1) from user";
int row = jdbcTemplate.queryForObject(sql, Integer.class);
System.out.println(row);
}
/**
* 查詢單個
*/
@Test
public void query2() {
String sql = "select * from user where username=?";
User user = jdbcTemplate.queryForObject(sql, new MyRowMapper(), "Ling");
System.out.println(user);
}
/**
* 查詢集合
*/
@Test
public void query3() {
String sql = "select * from user";
List<User> lists= jdbcTemplate.query(sql, new MyRowMapper());
System.out.println(lists);
}
/**
* 原生實現jdbc的查詢
*/
@Test
public void testJDBC() {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
//加載驅動
try {
Class.forName("com.mysql.jdbc.Driver");
//創建連接
connection = DriverManager.getConnection("jdbc:mysql:///test","root","123");
//編寫sql語句
String sql = "select * from user where username=?";
//預編譯sql
preparedStatement = connection.prepareStatement(sql);
//設置參數值
preparedStatement.setString(1, "Ling");
//執行sql
resultSet = preparedStatement.executeQuery();
//遍歷結果集
while(resultSet.next()) {
//得到返回結果集
String username = resultSet.getString("username");
String password = resultSet.getString("password");
User user = new User();
user.setUsername(username);
user.setPassword(password);
System.out.println(user);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
//關閉連接
try {
resultSet.close();
preparedStatement.close();
connection.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class MyRowMapper implements RowMapper<User> {
@Override
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
String username = rs.getString("username");
String password = rs.getString("password");
User user = new User();
user.setUsername(username);
user.setPassword(password);
return user;
}
}
Spring c3p0配置連接池:
配置文件:
<!-- 配置c3p0連接池 -->
<!-- javax.sql.DataSource -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- 注入屬性 -->
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql:///test"></property>
<property name="user" value="root"></property>
<property name="password" value="123"></property>
</bean>
Spring 事務管理:
配置文件詳細代碼:
<?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"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
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
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 以上是所有的約束配置 -->
<!-- 配置註解包 -->
<context:component-scan base-package="cn.tx.*"></context:component-scan>
<!-- 配置c3p0連接池 -->
<!-- javax.sql.DataSource -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- 注入屬性 -->
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql:///test"></property>
<property name="user" value="root"></property>
<property name="password" value="123"></property>
</bean>
<!-- 創建jdbcTemplate對象,注入dataSource -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 實例化UserService對象 用於測試 -->
<bean id="useService" class="cn.tx.service.UserService"></bean>
<bean id="userDao" class="cn.tx.dao.UserDao"></bean>
<!-- 第一步配置事務管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 第二步 開啓事務註解 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
</beans>
項目結果目錄:
User:
public class User {
private String usrname;
private String password;
private String salary;
public String getUsrname() {
return usrname;
}
public void setUsrname(String usrname) {
this.usrname = usrname;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSalary() {
return salary;
}
public void setSalary(String salary) {
this.salary = salary;
}
@Override
public String toString() {
return "User [usrname=" + usrname + ", password=" + password + ", salary=" + salary + "]";
}
}
UserDao:
package cn.tx.dao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
public class UserDao {
@Autowired
private JdbcTemplate jdbcTemplate;
/**
* 加錢
*/
public void addSalary() {
String sql = "update account set salary = salary+? where username=?";
jdbcTemplate.update(sql, "1000","小王");
}
public void decressSalary() {
String sql = "update account set salary = salary+? where username=?";
jdbcTemplate.update(sql, "-1000","小五");
}
}
UserService:
package cn.tx.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import cn.tx.dao.UserDao;
@Transactional
public class UserService {
@Autowired
private UserDao userDao;
/**
* 轉賬的業務方法
*/
public void tranferAccount() {
//多錢的方法
userDao.addSalary();
//當方法業務中,出現異常的時候 會導致轉賬業務出現異常
int sum = 3 / 0;
//少錢的方法
userDao.decressSalary();
}
}
test:
package cn.tx.test;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.tx.service.UserService;
public class TestTx {
@Test
public void testUserService() {
ApplicationContext context = new ClassPathXmlApplicationContext("all_schema_application.xml");
UserService useService = (UserService) context.getBean("useService");
useService.tranferAccount();
}
}
github:
https://github.com/2402zmybie/spring_jdbctemplate
https://github.com/2402zmybie/spring_tx