Spring集成的JDBC编码和事务管理

àì夳堔傛蜴生んèń 2022-07-12 07:45 266阅读 0赞

代码:

1.配置文件

beans.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans
  3. xmlns="http://www.springframework.org/schema/beans"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xmlns:aop="http://www.springframework.org/schema/aop"
  6. xmlns:tx="http://www.springframework.org/schema/tx"
  7. xmlns:p="http://www.springframework.org/schema/p"
  8. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  9. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
  10. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
  11. <!-- 定义BasicDataSource数据源 -->
  12. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  13. <!-- 指定连接数据库的JDBC驱动 -->
  14. <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
  15. <!-- 指定数据库所用的url-->
  16. <property name="url" value="jdbc:mysql://localhost:3306/bookshop"></property>
  17. <!-- 指定连接数据库的用户名 -->
  18. <property name="username" value="root"></property>
  19. <!-- 指定连接数据库的密码 -->
  20. <property name="password" value="1234"></property>
  21. <!-- 连接池启动时的初始值 -->
  22. <property name="initialSize" value="1"></property>
  23. <!-- 连接池的最大值 -->
  24. <property name="maxActive" value="500"></property>
  25. <!-- 最大空闲值,当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 -->
  26. <property name="maxIdle" value="2"></property>
  27. <!-- 最小空闲值,当空闲的连接数小于阈值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 -->
  28. <property name="minIdle" value="1"></property>
  29. </bean>
  30. <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  31. <property name="dataSource" ref="dataSource"/>
  32. </bean>
  33. <tx:annotation-driven transaction-manager="txManager"/>
  34. <bean id="personService" class="cn.itcast.service.impl.PersonServiceBean">
  35. <property name="datasource" ref="datasource"></property>
  36. </bean>
  37. </beans>

2.源代码

Person.java

  1. package cn.itcast.bean;
  2. public class Person {
  3. private Integer id;
  4. private String name;
  5. public Integer getId() {
  6. return id;
  7. }
  8. public void setId(Integer id) {
  9. this.id = id;
  10. }
  11. public String getName() {
  12. return name;
  13. }
  14. public void setName(String name) {
  15. this.name = name;
  16. }
  17. public Person(String name) {
  18. this.name = name;
  19. }
  20. }

PersonService.java

  1. package cn.itcast.service;
  2. import java.util.List;
  3. import cn.itcast.bean.Person;
  4. public interface PersonService {
  5. /*
  6. * 保存Person
  7. */
  8. public void save(Person person);
  9. /*
  10. * 更新Person
  11. */
  12. public void update(Person person);
  13. /*
  14. * 获取Person
  15. */
  16. public Person getPerson(Integer personid);
  17. /*
  18. * 获取所有Person集合的记录
  19. */
  20. public List<Person> getPersons();
  21. /*
  22. * 删除制定ID的person
  23. */
  24. public void delete(Integer personid);
  25. }

PersonRowMapper.java

  1. package cn.itcast.service.impl;
  2. import java.sql.ResultSet;
  3. import java.sql.SQLException;
  4. import org.springframework.jdbc.core.RowMapper;
  5. import cn.itcast.bean.Person;
  6. public class PersonRowMapper implements RowMapper {
  7. @Override
  8. public Object mapRow(ResultSet rs, int index) throws SQLException {
  9. // TODO Auto-generated method stub
  10. Person person=new Person(rs.getString("name"));
  11. person.setId(rs.getInt("id"));
  12. return person;
  13. }
  14. }

PersonServiceBean.java

  1. package cn.itcast.service.impl;
  2. import java.util.List;
  3. import javax.sql.DataSource;
  4. import org.springframework.jdbc.core.JdbcTemplate;
  5. import org.springframework.transaction.annotation.Transactional;
  6. import cn.itcast.bean.Person;
  7. import cn.itcast.service.PersonService;
  8. @Transactional
  9. public class PersonServiceBean implements PersonService {
  10. private DataSource datasource;
  11. private JdbcTemplate jdbcTemplate;
  12. public void setDatasource(DataSource datasource) {
  13. this.jdbcTemplate=new JdbcTemplate(datasource);
  14. }
  15. public void save(Person person) {
  16. // TODO Auto-generated method stub
  17. jdbcTemplate.update("insert into person(name) values(?)", new Object[]{person.getName()}, new int[]{java.sql.Types.VARCHAR});
  18. }
  19. @Override
  20. public void update(Person person) {
  21. // TODO Auto-generated method stub
  22. jdbcTemplate.update("update person set name=? where id=?", new Object[]{person.getName(),person.getId()}, new int[]{java.sql.Types.VARCHAR,java.sql.Types.INTEGER});
  23. }
  24. @Override
  25. public Person getPerson(Integer personid) {
  26. // TODO Auto-generated method stub
  27. return (Person) jdbcTemplate.queryForObject("select * from person where id=?", new Object[]{personid}, new int []{java.sql.Types.INTEGER},new PersonRowMapper());
  28. }
  29. @Override
  30. public List<Person> getPersons() {
  31. // TODO Auto-generated method stub
  32. return (List<Person>) jdbcTemplate.query("select * from person",new PersonRowMapper());
  33. }
  34. @Override
  35. public void delete(Integer personid) {
  36. // TODO Auto-generated method stub
  37. jdbcTemplate.update("delete from person where id=?", new Object[]{personid}, new int[]{java.sql.Types.INTEGER});
  38. }
  39. }

3.单元测试类

PersonServiceTest.java

  1. package junit.test;
  2. import static org.junit.Assert.*;
  3. import org.junit.BeforeClass;
  4. import org.junit.Test;
  5. import org.springframework.context.ApplicationContext;
  6. import org.springframework.context.support.ClassPathXmlApplicationContext;
  7. import cn.itcast.bean.Person;
  8. import cn.itcast.service.PersonService;
  9. public class PersonServiceTest {
  10. private static PersonService personService;
  11. @BeforeClass
  12. public static void setUpBeforeClass() throws Exception {
  13. try {
  14. ApplicationContext cxt=new ClassPathXmlApplicationContext("beans.xml");
  15. personService=(PersonService) cxt.getBean("personService");
  16. } catch (Exception e) {
  17. // TODO Auto-generated catch block
  18. e.printStackTrace();
  19. }
  20. }
  21. @Test public void save(){
  22. for(int i=0;i<5;i++){
  23. personService.save(new Person("海哥"+i));
  24. }
  25. }
  26. @Test public void getPerson(){
  27. Person person=personService.getPerson(1);
  28. System.out.println(person.getName());
  29. }
  30. @Test public void update(){
  31. Person person=personService.getPerson(1);
  32. person.setName("张xx");
  33. personService.update(person);
  34. }
  35. @Test public void delete(){
  36. personService.delete(1);;
  37. }
  38. @Test public void getBeans(){
  39. for(Person person : personService.getPersons()){
  40. System.out.println(person.getName());
  41. }
  42. }
  43. }

发表评论

表情:
评论列表 (有 0 条评论,266人围观)

还没有评论,来说两句吧...

相关阅读

    相关 SpringJdbc事务管理

      Spring提供了对事务的声明式事务管理,只需要在配置文件中做一些配置,即可把操作纳入到事务管理当中,解除了和代码的耦合。   Spring声明式事务管理,核心实现就是基