Spring的JDBCTemplate的基本代码操作,这里没用c3p0连接池,用的自带连接池。

Spring的jdbcTemplate操作

1.Spring 框架一站式框架

  • 针对 JavaEE 三层,每一层都有解决技术
  • 在dao层,使用jdbcTemplate

2.Spring 对不同持久化技术的支持

  • Spring为各种支持的持久化技术,都提供了简单操作的模板和回调。
ORM持久化技术模板类
JDBCorg.springframework.jdbc.core.JdbcTemplate
Hibernate5.0org.springframework.orm.hibernate5.HibernateTemplate
IBatis(MyBatis)org.springframework.orm.ibatis.SqlMapClientTemplate
JPAorg.springframework.orm.jpa.JpaTemplate


jdbcTemplate 对 jdbc进行封装

3.jdbcTemplate 使用和Apache公司的DBUtils使用很相似,都是对数据库进行crud操作。

使用jdbcTemplate时要先导包。这里必须导入spring-tx和jdbcTemplate这两个包,缺一不可,虽然spring-tx是关于事务管理的包,但是里面也有jdbcTemplate对tx的依赖。

下载地址

最后别忘了导入数据库驱动的包

下载地址

jdbcTemplate 依赖连接池(这里用到的不是c3p0连接池)获取数据库连接,所以必须先构造连接池。

下面介绍四个操作:增删改查

增加

    @Test
    public void add() {
        //因为JDBCTemplate是依赖数据库连接池的,所以先构造连接池
        DriverManagerDataSource driverManagerDataSource=new DriverManagerDataSource();
        driverManagerDataSource.setDriverClassName("com.mysql.jdbc.Driver");
        driverManagerDataSource.setUrl("jdbc:mysql://localhost:3306/template");
        driverManagerDataSource.setUsername("root");
        driverManagerDataSource.setPassword("");
        //创建jdbctemplate对象,设置数据源
        JdbcTemplate jdbcTemplate=new JdbcTemplate(driverManagerDataSource);

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

注意上面代码中的数据库url是jdbc:mysql://localhost:3306/template,其实这样写也可以jdbc:mysql:///template

修改

    @Test
    public void update(){
        //因为JDBCTemplate是依赖数据库连接池的,所以先构造连接池
        DriverManagerDataSource driverManagerDataSource=new DriverManagerDataSource();
        driverManagerDataSource.setDriverClassName("com.mysql.jdbc.Driver");
        driverManagerDataSource.setUrl("jdbc:mysql://localhost:3306/template");
        driverManagerDataSource.setUsername("root");
        driverManagerDataSource.setPassword("");

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

        //调用jdbctemplate对象里面的方法实现操作
        String sql="update user set password=? where name=?";
        int rows=jdbcTemplate.update(sql, "1314520","FireLang");
        System.out.println(rows);
    }

删除

    @Test
    public void delete(){
        //因为JDBCTemplate是依赖数据库连接池的,所以先构造连接池
        DriverManagerDataSource driverManagerDataSource=new DriverManagerDataSource();
        driverManagerDataSource.setDriverClassName("com.mysql.jdbc.Driver");
        driverManagerDataSource.setUrl("jdbc:mysql://localhost:3306/template");
        driverManagerDataSource.setUsername("root");
        driverManagerDataSource.setPassword("");

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

        //调用jdbctemplate对象里面的方法实现操作
        String sql="delete from user where name=?";
        int rows=jdbcTemplate.update(sql, "LangShen");
        System.out.println(rows);
    }

查询

  • 使用jdbcTemplate实现查询操作

  • jdbcTemplate实现查询,有接口RowMapper

  • jdbcTemplate针对这个接口并没有提供实现类,得到不同的类型数据需要自己进行数据封装

查询单值:

    @Test
    public void showSingleTyepValue(){
        //因为JDBCTemplate是依赖数据库连接池的,所以先构造连接池
        DriverManagerDataSource driverManagerDataSource=new DriverManagerDataSource();
        driverManagerDataSource.setDriverClassName("com.mysql.jdbc.Driver");
        driverManagerDataSource.setUrl("jdbc:mysql://localhost:3306/template");
        driverManagerDataSource.setUsername("root");
        driverManagerDataSource.setPassword("");

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

        //调用jdbctemplate对象里面的方法实现操作
        String sql="select count(name) from user";
        int count=jdbcTemplate.queryForObject(sql, Integer.class);
        System.out.println(count);
    }

查询对象:

    @Test
    public void showSingleObject(){
        //因为JDBCTemplate是依赖数据库连接池的,所以先构造连接池
        DriverManagerDataSource driverManagerDataSource=new DriverManagerDataSource();
        driverManagerDataSource.setDriverClassName("com.mysql.jdbc.Driver");
        driverManagerDataSource.setUrl("jdbc:mysql://localhost:3306/template");
        driverManagerDataSource.setUsername("root");
        driverManagerDataSource.setPassword("");

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

        //调用jdbctemplate对象里面的方法实现操作
        String sql="select * from user where name=?";//这里查询出来的是单个对象。
        User temp=jdbcTemplate.queryForObject(sql, new RowMapper<User>(){

            @Override
            public User mapRow(ResultSet result, int num) throws SQLException {//这里的num表示行号,比如我查询出了几个数据,而num代表ResultSet里面的行号。
                User user=new User(result.getString("name"), result.getString("password"));
                return user;
            }

        },"FireLang");
        System.out.println(temp);
    }

查询返回List集合

    @Test
    public  void showList(){
        //因为JDBCTemplate是依赖数据库连接池的,所以先构造连接池
        DriverManagerDataSource driverManagerDataSource=new DriverManagerDataSource();
        driverManagerDataSource.setDriverClassName("com.mysql.jdbc.Driver");
        driverManagerDataSource.setUrl("jdbc:mysql://localhost:3306/template");
        driverManagerDataSource.setUsername("root");
        driverManagerDataSource.setPassword("");

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

        //调用jdbctemplate对象里面的方法实现操作
        String sql="select * from user";//查询所有
        List<User> templist=jdbcTemplate.query(sql, new RowMapper<User>(){

            @Override
            public User mapRow(ResultSet result, int num) throws SQLException {//这里的num表示行号,比如我查询出了几个数据,而num代表ResultSet里面的行号。
                System.out.println("当前行数: "+num);
                User user=new User(result.getString("name"), result.getString("password"));
                return user;
            }

        });
        System.out.println(templist);
    }

/*
输出结果:

当前行数: 0
当前行数: 1
[User [name=FireLang, password=1314520], User [name=LangShen, password=123456]]

*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值