Spring:JDBCTemplate&事务
JDBCTemplate
什么是JDBCTemplate?
Spring框架对JDBC进行了封装,使用JDBCTemplate可以很方便地实现对数据库的增删改查操作。
查漏补缺——Druid数据连接池
//创建Properties对象
Properties properties = new Properties();
//通过类的加载器获取系统加载器然后以流的方式获取资源文件
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("Druid.properties");
//使用Properties对象调用load方法,读取资源流
properties.load(is);
//使用Druid资源工厂创建数据源
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
System.out.println(dataSource);
//通过数据源获取连接
Connection connection = dataSource.getConnection();
-
JDBCTemplate准备步骤
-
创建并配置数据库连接池(Druid)
-
配置JdbcTemplate对象,注入DataSource
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"> <property name="url" value="jdbc:mysql://localhost:3307/boerk" /> <property name="username" value="root" /> <property name="password" value="root123" /> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> </bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"></property> </bean>
-
创建service类,创建dao类,在dao类中注入JdbcTemplate
@Repository() public class BookDaoImpl implements BookDao{ @Autowired private JdbcTemplate jdbcTemplate; @Override public void add(User user) { String sql="insert into user values(?,?,?,?)"; int update = jdbcTemplate.update(sql, user.getUid(), user.getUname(), user.getUpassword(), user.getMoney()); System.out.println(update); } } @Service public class BookService { @Autowired() private BookDao bookDao; public void add(User user){ userDao.add(user); } }
-
在Dao(持久层)里添加方法。
-
使用JdbcTemplate调用对应的方法(update等)
-
查询时,使用RowMapper接口的实现类BeanPropertyRowMapper
jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), id);
事务
什么是事务?
事务是数据库操作最基本单元,逻辑上,一组操作要么都成功,如果有一个失败就都失败。
- 事务的四大特性(ACID):原子性、一致性、隔离性、持久性。
- 原子性:不可分割的,要么都成功,要么都失败。
- 一致性:总量不会减少(A给B转了100块钱,A-100,B+100)
- 隔离性:多事务时,各个事务之间不会产生影响。
- 持久性:事务提交后,数据永久的保存。
在银行转账业务中,首先是用户A扣除一定金额,然后再给用户B增加一定金额。这就是一个事务,他们不可分割,总量不会减少,其他的事务不会影响这个事务,一旦提交了,数据就永久保存。