1. SpringJdbc
1.1 demo实现
spring提供了很多模板对象,叫做xxxTemplate
实现步骤:
- 导入坐标
- 创建数据和POJO
- 使用
jdbcTemplate
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
@Test
//测试JdbcTemplate开发步骤
public void test() throws PropertyVetoException {
//创建数据源对象
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test");
dataSource.setUser("root");
dataSource.setPassword("root");
JdbcTemplate jdbcTemplate = new JdbcTemplate();
//设置数据源对象 知道数据库在哪
jdbcTemplate.setDataSource(dataSource);
//执行操作
int row = jdbcTemplate.update("insert into account values(?,?)", "tom", 5000);
System.out.println(row);
}
可以把jdbcTemplate
和dataSource
放到spring
容器中
1.2 基本操作
-
查询操作
// 查询一个 jdbcTemplate.queryForObject("select * from 表明 where id = ?", 实体类.class, id具体值); // 查询所有 jdbcTemplate.query("select * from 表明", BeanPropertyRowMapper<实体>(实体.class));
-
更新操作
jdbcTemplate.update();
2. 事务控制
- 配置平台事务管理器(不同的dao层实现不一样)
- 配置事务增强
- 配置AOP织入(底层aop实现)
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="myPointcut" expression="execution(* *.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="myPointcut"></aop:advisor>
</aop:config>
其中<tx:method>
表示切点放到的事务参数配置:
name
:切点名称isolation
:隔离级别propogation
:事务传播行为timeout
:超时时间read-only
:是否只读
注解驱动在类或者方法上加对应的@Transactional
注解即可
注意打开事物的注解驱动:<tx:annotation-driven />