Spring框架——JDBC
本文内容纲要:
- Spring与JDBC- 数据库配置
- 在beans.xml配置jdbc数据库
- JdbcTemplate类
- 功能
- 用法
- 在Dao类中使用
- @Repository
- @Resource
- 在Service类中
- @Service
- @Resource
- Spring与事务
- 概念
- 原子性(Atomic)
- 一致性(Consistent)
- 隔离性(Isolated)
- 持久性(Durable)
- 编程式事务
- beans.xml
- 声明式事务
Spring与JDBC
数据库配置
在beans.xml配置jdbc数据库
<!-- 数据源 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost:3306/mytest_db</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value></value>
</property>
</bean>
JdbcTemplate
类
功能
JdbcTemplate
类是Spring对JDBC支持类库中的核心类
- 创建和释放资源
- 执行SQL语句、存储过程,并通过ResultSet来返回数据
在beans.xml配置
将dataSource依赖注入jdbcTemplate,指定执行操作的数据库
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"></property>
</bean>
用法
增删改
this.jdbcTemplate.update("insert into book(title,price) values(?,?)", book.getTitle(),book.getPrice());
返回自增值的增删改
final String sql = "insert into book(title,price) values(?,?)";
KeyHolder keyHolder = new GeneratedKeyHolder();
this.jdbcTemplate.update(new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
PreparedStatement pstm = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
pstm.setString(1, book.getTitle());
pstm.setInt(2, book.getPrice());
return pstm;
}
}, keyHolder);
int key = keyHolder.getKey().intValue();
System.out.println(key);
批处理
final String sql = "delete from book where id = ?";
this.jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement pstm, int index) throws SQLException {
pstm.setInt(1, ids[index]);
}
@Override
public int getBatchSize() {
return ids.length;
}
});
查询
在Dao类中使用
@Repository
允许组件扫描来发现和配置自定义DAO
在类中配置该注解表示数据持久层
@Resource
持久化源,数据源DataSource
依赖注入,获取JdbcTemplate
@Repositorypublic class BookDaoImpl {
@Resource
private JdbcTemplate jdbcTemplate;
public List<String> find(){
return this.jdbcTemplate.queryForList("select name from menu", String.class);
}
public List<Menu> findAll(){
return this.jdbcTemplate.query("select * from menu", new RowMapper<Menu>() {
public Menu mapRow(ResultSet rs, int rowNum) throws SQLException{
Menu m = new Menu();
m.setId(rs.getInt(1));
m.setName(rs.getString(2));
m.setParentId(rs.getInt(3));
return m;
}
});
}
public Menu findById(int id) {
return this.jdbcTemplate.queryForObject("select * from menu where id = ?",
new Object[] {id},
new RowMapper<Menu>() {
public Menu mapRow(ResultSet rs, int rowNum) throws SQLException{
Menu m = new Menu();
m.setId(rs.getInt(1));
m.setName(rs.getString(2));
m.setParentId(rs.getInt(3));
return m;
}
});
}
public int countParentIdNull() {
int count = this.jdbcTemplate.queryForObject("select count(id) from menu where parentId is not null", Integer.class);
return count;
}
public void saveBook(Book book) {
this.jdbcTemplate.update("insert into book(title,price) values(?,?)",
book.getTitle(), book.getPrice());
final String sql = "insert into book(title,price) values(?,?)";
KeyHolder keyHolder = new GeneratedKeyHolder();
this.jdbcTemplate.update(new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
PreparedStatement pstm = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
pstm.setString(1, book.getTitle());
pstm.setInt(2, book.getPrice());
return pstm;
}
}, keyHolder);
int key = keyHolder.getKey().intValue();
System.out.println(key);
}
public void batchDelete(int[] ids) {
final String sql = "delete from book where id = ?";
this.jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement pstm, int index) throws SQLException {
pstm.setInt(1, ids[index]);
}
@Override
public int getBatchSize() {
return ids.length;
}
});
}
}
在Service类中
@Service
在类中配置该注解表示业务逻辑层
@Resource
依赖注入,将Dao依赖注入进Service,获取Dao
@Servicepublic class BookServiceImpl {
@Resource
private BookDaoImpl bookDaoImpl;
public void addBook(Book book) {
this.bookDaoImpl.saveBook(book);
}
public void batchDelete(int[] ids) {
this.bookDaoImpl.batchDelete(ids);
}
public int count() {
return this.bookDaoImpl.countParentIdNull();
}
public Menu findById(int id) {
return this.bookDaoImpl.findById(id);
}
public List<Menu> findAll(){
return this.bookDaoImpl.findAll();
}
public List<String> find(){
return this.bookDaoImpl.find();
}
}
Spring与事务
概念
事务是一组原子操作的工作单元
原子性(Atomic)
事务由一个或多个行为捆绑在一起组成一个单独的工作单元,原子性保证事务中的所有操作要么都发生,要么都不发生
一致性(Consistent)
一旦一个事务结束了(不管成功与否),系统所处的状态和它的业务规则是一致的,也就是说数据应当不会被破坏
隔离性(Isolated)
事务应该允许多名用户操作同一个数据,一名用户的操作不会和其他用户的操作相混淆(隔离级别)
持久性(Durable)
一旦事务完成,事务的结果应该持久化,用来保证即使系统崩溃也不会破坏事务的结果
Spring框架提供了编程式事务管理和声明式事务管理
编程式事务
- 可以清楚地控制事务的边界
- 可自行实现事务开始时间、结束时间、撤消操作的时机等
- 可以实现细粒度的事务控制
beans.xml
<!-- 事务 --> <bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
声明式事务
- 事务管理的API不介入程序,最符合一个非侵入型轻量级容器的理想
- Spring Framework的声明式事务管理是建立在Spring的面向切面编程(aspect-oriented programming, AOP) 上的
- Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource、TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分
本文内容总结:Spring与JDBC,数据库配置,在beans.xml配置jdbc数据库,JdbcTemplate类,功能,用法,在Dao类中使用,@Repository,@Resource,在Service类中,@Service,@Resource,Spring与事务,概念,原子性(Atomic),一致性(Consistent),隔离性(Isolated),持久性(Durable),编程式事务,beans.xml,声明式事务,
原文链接:https://www.cnblogs.com/occlive/p/13579527.html
以上是 Spring框架——JDBC 的全部内容, 来源链接: utcz.com/z/362669.html