简介:
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