spring之jdbcTemplate操作(配合C3P0使用)

  1 spring框架一站式框架

    (1)针对javaee三层,每一层都有解决技术

    (2)在dao层,使用 jdbcTemplate

 

  2 spring对不同的持久化层技术都进行封装

    (1)jdbcTemplate对jdbc进行封装

  3 jdbcTemplate使用和dbutils使用很相似,都数据库进行crud操作

 

CURD操作

  增加

   updata();方法

    1 导入jdbcTemplate使用的jar包

     

      

    2 创建对象,设置数据库信息

    3 创建jdbcTemplate对象,设置数据源

    4 调用jdbcTemplate对象里面的方法实现操作

    // 1 添加操作
    @Test
    public void add() {
//         设置数据库信息
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql:///spring_day03");
        dataSource.setUsername("root");
        dataSource.setPassword("root");

//         创建jdbcTemplate对象,设置数据源
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

//         调用jdbcTemplate对象里面的方法实现操作
        //创建sql语句
        String sql = "insert into user values(?,?)";
        int rows = jdbcTemplate.update(sql, "lucy","250");
        System.out.println(rows);
    }

 

  修改

   updata();方法

    //2 修改操作
    @Test
    public void update() {
        //设置数据库信息
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql:///spring_day03");
        dataSource.setUsername("root");
        dataSource.setPassword("root");
        
        //创建jdbcTemplate对象
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        
        //调用jdbcTemplate里面的方法实现 update方法
        String sql = "update user set password=? where username=?";
        int rows = jdbcTemplate.update(sql, "1314","lucy");
        System.out.println(rows);
    }

 

  删除

    updata();方法

    //3 删除操作
    @Test
    public void delete() {
        //设置数据库信息
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql:///spring_day03");
        dataSource.setUsername("root");
        dataSource.setPassword("root");
        
        //创建jdbcTemplate对象
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        
        //调用update方法实现删除
        String sql = "delete from user where username=?";
        int rows = jdbcTemplate.update(sql, "lucy");
        System.out.println(rows);
    }

 

 

  查询:

    jdbcTemplate.queryForObject();方法

    1 使用jdbcTemplate实现查询操作

    /*
     * QueryRunner runner = new QueryRuner(datasource);
     * 返回对象
     * runner.query(sql,new BeanHandler<User>(User.class));
     * 
     * 返回list集合
     * runner.query(sql,new BeanListHander<User>(User.class))
     * 
     * 1 在dbutils时候,有接口 ResultSetHandler
     * dbutils提供了针对不同的结果实现类
     * 
     * 2 jdbcTemplate实现查询,有接口 RowMapper,
     * jdbcTemplate针对这个接口没有提供实现类,得到不同的类型数据需要自己进行数据封装
     * 
     * */

    2 查询具体实现

      第一个 查询返回某一个值

    @Override
    public <T> T queryForObject(String sql, Class<T> requiredType) throws DataAccessException {
        return queryForObject(sql, getSingleColumnRowMapper(requiredType));
    }

      (1)第一个参数是sql语句

      (2)第二个参数 返回类型的class

    //1 查询表有多少条记录
    @Test
    public void testCount() {
        //设置数据库信息
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql:///spring_day03");
        dataSource.setUsername("root");
        dataSource.setPassword("root");
        
        //创建jdbcTemplate对象
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        
        //调用方法得到记录数
        String sql = "select count(*) from user";
        //调用jdbcTemplate的方法
        int count = jdbcTemplate.queryForObject(sql, Integer.class);
        System.out.println(count);
    }

 

      Jdbc实现

 

    //2 jdbc实现代码
    @Test
    public void testJDBC() {
        Connection conn = null;
        PreparedStatement psmt = null;
        ResultSet rs = null;
        //加载驱动
        try {
            Class.forName("com.mysql.jdbc.Driver");
            //创建连接
            conn = DriverManager.getConnection("jdbc:mysql:///spring_day03", "root", "root");
            //编写sql语句
            String sql = "select * from user where username=?";
            //预编译sql
            psmt = conn.prepareStatement(sql);
            //设置参数值
            psmt.setString(1, "lucy");
            //执行sql
            rs = psmt.executeQuery();
            //遍历结果集
            while(rs.next()) {
                //得到返回结果值
                String username = rs.getString("username");
                String password = rs.getString("password");
                //放到user对象里面
                User user = new User();
                user.setUsername(username);
                user.setPassword(password);
                
                System.out.println(user);
            }
            
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                rs.close();
                psmt.close();
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

 

 

      第二个 查询返回对象

        第一个参数是sql语句

        第二个参数是 RowMapper,是接口,类似于dbutils里面接口

        第三个参数是 可变参数

    //3 查询返回对象
    @Test
    public void testObject() {
        //设置数据库信息
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql:///spring_day03");
        dataSource.setUsername("root");
        dataSource.setPassword("root");
        
        //创建jdbcTemplate对象
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        
        //写sql语句,根据username查询
        String sql = "select * from user where username=?";
        //调用jdbcTemplate的方法实现
        //第二个参数是接口 RowMapper,需要自己写类实现接口,自己做数据封装
        User user = jdbcTemplate.queryForObject(sql, new MyRowMapper(), "mary");
        System.out.println(user);
    }
class MyRowMapper implements RowMapper<User> {

    @Override
    public User mapRow(ResultSet rs, int num) throws SQLException {
        // 1 从结果集里面把数据得到
        String username = rs.getString("username");
        String password = rs.getString("password");
        
        // 2 把得到数据封装到对象里面
        User user = new User();
        user.setUsername(username);
        user.setPassword(password);
        
        return user;
    }
    
}

      第三个 查询返回list集合

        //创建jdbcTemplate对象
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        
        //写sql语句
        String sql = "select * from user";
        //调用jdbcTemplate的方法实现
        List<User> list = jdbcTemplate.query(sql,new MyRowMapper());
        
        System.out.println(list);

 

 

Spring配置连接池和dao使用jdbcTemplate

  1 spring配置c3p0连接池

    第一步 导入jar包

    

    第二步 创建spring配置文件,配置连接池

//        ComboPooledDataSource dataSource = new ComboPooledDataSource();
//        dataSource.setDriverClass("com.mysql.jdbc.Driver");
//        dataSource.setJdbcUrl("jdbc:mysql:///spring_day03");
//        dataSource.setUser("root");
//        dataSource.setPassword("root");
    <!-- 配置c3p0连接池 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <!-- 注入属性值 -->
        <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
        <property name="jdbcUrl" value="jdbc:mysql:///spring_day03"></property>
        <property name="user" value="root"></property>
        <property name="password" value="root"></property>
    </bean>

  2 dao使用jdbcTemplate

  (1)创建service和dao,配置service和dao对象,在service注入dao对象

    <!-- 创建service和dao对象,在service注入dao对象 -->
    <bean id="userService" class="cn.itcast.c3p0.UserService">
        <!-- 注入dao对象 -->
        <property name="userDao" ref="userDao"></property>
    </bean>
    
    <bean id="userDao" class="cn.itcast.c3p0.UserDao">
        <!-- 注入jdbcTemplate对象 -->
        <property name="jdbcTemplate" ref="jdbcTemplate"></property>
    </bean>

    (2)创建jdbcTemplate对象,把模板对象注入到dao里面

    <bean id="userDao" class="cn.itcast.c3p0.UserDao">
        <!-- 注入jdbcTemplate对象 -->
        <property name="jdbcTemplate" ref="jdbcTemplate"></property>
    </bean>
    <!-- 创建jdbcTemplate对象 -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
public class UserDao {
    
    //得到JdbcTemplate对象
    private JdbcTemplate jdbcTemplate;
    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    //添加操作
    public void add() {
        //创建jdbcTemplate对象
//        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        String sql = "insert into user values(?,?)";
        jdbcTemplate.update(sql, "李雷","520");
    }

}

    (3)在jdbcTemplate对象里面注入dataSource

    <!-- 创建jdbcTemplate对象 -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <!-- 把dataSource传递到模板对象里面 -->
        <property name="dataSource" ref="dataSource"></property>
    </bean>

 

posted @ 2018-12-16 19:26  kpsmile  阅读(1380)  评论(0编辑  收藏  举报