day3 - Spring整合JDBC操作数据库应用

0. Spring Container的整体结构

Spring Container的整体结构

主要内容:
1. Spring配置导入属性文件
2. Spring整合JDBC处理数据库业务
3. 使用JDBCTemplate组件简化数据操作

1. Spring配置导入属性文件

方法1:

1.1 Spring配置导入属性文件方法1

方法2:(推荐使用)


    

2. Spring整合JDBC处理数据库业务

  • 配置数据源
  • 配置数据库事务管理对象并注入被管理的数据源
  • 配置jdbcTemplate模板并注入数据源
  • 配置事务处理属性通知并管理事务管理对象
  • 配置事务拦截切入点关联事务处理通知

我这里的例子使用的是mysql数据库
1)配置数据源
配置apacheDBCP数据源

    
    
        
        
        
        
    

2)配置数据库数据管理组件
配置JDBC事务管理组件管理数据库事务,并注入依赖的数据源

    
    
        
    

3)配置JDBCTemplate模板
JDBCTemplate模板组件提供了简化数据增删改查操作的有用方法

    
    
        
        
        
    

4)配置事务属性通知
事务属性描述了如何处理事务操作,通常使用命名空间进行配置并关联事务管理对象

    
    
        
            
            
            
            
            
            

            
            
            
        
    

5)配置事务拦截接入点关联事务属性
事务AOP拦截设置描述哪些url下的哪些组件哪些方法被切入并应用数据库事务处理。

    
    
        
        
    

3. 使用JDBCTemplate组件简化数据操作

JdbcTemplate是Spring框架提供的执行数据库操作的组件,通常在DAO组件类中注入JdbcTemplate组件对象利用其提供的相关方法实现简化数据操作的业务。

3.1 JDBCTemplate常用方法

使用的时候可以去查询官方的API
1) 常用更新方法

  • int update(String sql) 执行给定的sql语句返回被影响数据库表行数结果
  • int update(String sql, Object args) 执行给定的sql语句并使用args作为sql参数返回被影响数据库行数结果

示例:

    @Autowired
    private BasicDataSource ds; //自动依赖注入

    @Resource(name = "jdbcTemplate")
    private JdbcTemplate jt; //按名称查找

    @Override
    public void addStudent(Student student) throws Exception {
        System.out.println("添加用户到数据库");
        String sql = "insert into student (name, sex, address) value (?,?,?)";

        jt.update(sql,student.getName(), student.getSex(), student.getAddress());

    }

2) 常用的查询方法

  • void query(String sql, RowCallbackHandler rch)
  • T query(String sql, ResultSetExtractor rse)
  • List query(String sql, RowMapper rm)
  • T queryForObject(String sql, Class cls)
  • Map queryForMap(String sql)
  • List queryForList(String sql)

下面举几个查询方法的例子
首先必不可少的要在数据库要建立相应的表,然后建立相应的实体类,然后来实践一下查询方法~

  • List query(String sql, RowMapper rm)
    public List queryDepList() throws Exception {

        String sql = "select id, name, code, newDate, descs from department";
        List depList = null;
        depList = jt.query(sql, new RowMapper() {

            @Override
            public Department mapRow(ResultSet resultSet, int i) throws SQLException {
                Department department = new Department();
                department.setId(resultSet.getString("id"));
                department.setName(resultSet.getString("name"));
                department.setCode(resultSet.getString("code"));
                department.setNewDate(resultSet.getDate("newDate"));
                department.setDescs(resultSet.getString("descs"));
                return department;
            }
        });

        return depList;
    }

如果没有建立实体类的话,可以用Map进行匹配

  • List queryForList(String sql)
    public List> findDepToMapList() throws Exception {

        String sql = "select id, name from department";

        return jt.queryForList(sql);
    }
  • List query(String sql, Class cls)
    public List queryEmpList() throws Exception {

        String sql = "select * from emp";
        List empList = new ArrayList<>();

        empList = jt.query(sql, new BeanPropertyRowMapper<>(Employee.class));
        return empList;
    }
  • T queryForObject(String sql, Class cls)
    public Employee findEmpById(String id) throws Exception {

        String sql = "select id,name, gender, birth, address, " +
                "phone,email from emp where id = '" + id + "' ";

        Employee employee = jt.queryForObject(sql, new BeanPropertyRowMapper<>(Employee.class));

        return employee;
    }

你可能感兴趣的:(day3 - Spring整合JDBC操作数据库应用)