一、Spring的jdbcTemplate操作(代码方式)
jdbcTemplate:spring中针对dao层的解决技术。
功能:对数据库进行crud操作,与dbutils相似。
实现原理:jdbcTemplate封装了jdbc。
知识点:spring一站式框架:针对javaee三层,每一层都有解决技术
增删改操作:
步骤:
1)导入jdbcTemplate使用的jar包
2)创建DriverManagerDataSource驱动管理数据源对象
DriverManagerDataSource dataSource = new DriverManagerDataSource();
3)使用数据源对象设置数据库信息(四大参数)
4)创建jdbcTemplate对象,传参设置数据源
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
5)写sql语句。
6)调用jdbcTemplate中方法实现操作
代码示例:
/**
* 增删改
* @author 一万年行不行
*
*/
public class CDU {
//增操作
//@Test
public void create(){
//1)导包
//2)创建DriverManagerDataSource驱动管理数据源对象
DriverManagerDataSource dataSource = new DriverManagerDataSource();
//3)使用数据源对象设置数据库信息(四大参数)
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/spring_day03");
dataSource.setUsername("root");
dataSource.setPassword("123456");
//4)创建jdbcTemplate对象,传参设置数据源
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
//5)写sql语句
String sql = "insert into user value(?,?)";
//6)调用jdbcTemplate中方法实现操作
jdbcTemplate.update(sql,"zhangsan","123");
}
//改
//@Test
public void updata(){
//1)导入jdbcTemplate使用的jar包
//2)创建DriverManagerDataSource驱动管理数据源对象
DriverManagerDataSource dataSource = new DriverManagerDataSource();
//3)使用数据源对象设置数据库信息(四大参数)
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/spring_day03");
dataSource.setUsername("root");
dataSource.setPassword("123456");
//4)创建jdbcTemplate对象,传参设置数据源
JdbcTemplate jdbcTamplate = new JdbcTemplate(dataSource);
//5)写sql语句。
String sql = "update user set password=? where username=?";
//6)调用jdbcTemplate中方法实现操作
jdbcTamplate.update(sql,"1234","zhangsan");
}
//删
@Test
public void delete1(){
//2)创建DriverManagerDataSource驱动管理数据源对象
DriverManagerDataSource dataSource = new DriverManagerDataSource();
//3)使用数据源对象设置数据库信息(四大参数)
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/spring_day03");
dataSource.setUsername("root");
dataSource.setPassword("123456");
//4)创建jdbcTemplate对象,传参设置数据源
JdbcTemplate jdbcTamplate = new JdbcTemplate(dataSource);
//5)写sql语句。
String sql = "delete from user where username=?";
//执行sql
jdbcTamplate.update(sql,"zhangsan");
}
}
三种返回结果的查询
难点:需要自己手动把结果集封装到对象中。sping中template不提供封装
RowMapper接口:按行映射ResultSet(结果集)
具体实现:
1)写一个类,实现RowMapper接口。类中默认重写mapRow方法。
2)在方法中:
a.从结果集中得到属性值数据,
b.把属性值数据封装到类中
代码示例:
//泛型为被封装的对象
class MyRowMapper implements RowMapper<User>{
/*
* 第一个参数:查询结果集
* 第二个参数:查询结果的行数
*/
@Override
public User mapRow(ResultSet rs, int num) throws SQLException {
//1)从结果集中得到属性值
String username = rs.getString("username");
String password = rs.getString("password");
//2)封装属性值到对象中
User user = new User();
user.setUsername(username);
user.setPassword(password);
return null;
}
}
1)返回值查询
2)返回对象查询
3)返回list集合查询
二、Spring的jdbcTemplate操作(配置方式)
使用 配置文件与连接池,实现crud
步骤:
1)导入jar包
2)创建spring配置文件
3)配置连接池
4)配置创建模板对象,注入连接池对象(向模板传入dataSource)
5)配置创建dao对象,注入模板对象为属性
6)配置创建service,注入dao
代码示例:
xml:
<!-- 1)配置连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/spring_day03"></property>
<property name="user" value="root"></property>
<property name="password" value="123456"></property>
</bean>
<!-- 2)配置创建模板对象,注入连接池对象(向模板传入dataSource) -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 3)创建dao对象,注入模板对象为属性-->
<bean id="dao" class="c3p0.Dao">
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>
<!-- 4)创建service,注入dao -->
<bean id="service" class="c3p0.Service">
<property name="dao" ref="dao"></property>
</bean>
service与dao:
public class Service {
private Dao dao;
public void setDao(Dao dao) {
this.dao = dao;
}
public void add(){
dao.add();
}
}
public class Dao {
//创建模板属性、set方法
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public void add(){
//1)写sql语句
String sql = "insert into user value(?,?)";
//2)调用jdbcTemplate中方法实现操作
jdbcTemplate.update(sql,"zhangsan","123");
}
}
三、Spring的事务管理
作用:封装了事务中所用功能。自动对方法完成事务开启、关闭、回滚等操作
spring事务管理两种方式
1)编程式事务管理(不用)
2)声明式事务管理
声明式事务管理的两种实现方式
1)基于xml配置文件实现
2)基于注解实现
声明式事务管理(xml配置)
思想:使用aop思想配置
步骤:
1)配置事务管理器
2)配置事务增强
3)配置切面
配置代码:
<!-- 1)配置事务管理器,注入dataSource -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 2)配置事务增强 -->
<tx:advice id="txadvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="account*"/>
</tx:attributes>
</tx:advice>
<!-- 3)配置切面 -->
<aop:config>
<!-- 切入点 -->
<aop:pointcut expression="execution(* tx.OrderService.*(..))" id="pointcut1"/>
<!-- 切面 -->
<aop:advisor advice-ref="txadvice" pointcut-ref="pointcut1"/>
</aop:config>
声明式事务管理(注解)
1)配置事务管理器
2)配置事务注解
3)在要使用事务的方法所在类上面添加注解
<!-- 1)配置事务管理器,注入dataSource -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 2)开启对事务管理器的注解扫描 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
3)在要使用事务的方法所在类上面添加注解