美文网首页
6. Spring JdbcTemplate的基本使用

6. Spring JdbcTemplate的基本使用

作者: 飞扬code | 来源:发表于2019-10-18 16:25 被阅读0次

    1、JdbcTemplate概述

    image.png

    它是spring框架中提供的一个对象,是对原始Jdbc API对象的简单封装。spring框架为我们提供了很多的操作模板类。
    涉及的包是spring-jdbc-5.0.2.RELEASE.jar中,除了要导入这个jar包外,还需要导入一个spring-tx-5.0.2.RELEASE.jar(它是和事务相关的)。

    2、JdbcTemplate对象的创建

    image.png
    image.png

    数据库样例

    create table account(
        id int primary key auto_increment,
        name varchar(40),
        money float
    )character set utf8 collate utf8_general_ci;
    
    insert into account(name,money) values('aaa',1000);
    insert into account(name,money) values('bbb',1000);
    

    pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.neuedu</groupId>
        <artifactId>spring_demo08_jdbctemplate</artifactId>
        <version>1.0-SNAPSHOT</version>
        <packaging>jar</packaging>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>5.0.2.RELEASE</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>5.0.2.RELEASE</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-tx</artifactId>
                <version>5.0.2.RELEASE</version>
            </dependency>
    
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.6</version>
            </dependency>
        </dependencies>
    </project>
    

    建立实体类

    package com.neuedu.domain;
    
    import java.io.Serializable;
    
    /**
     * 账户的实体类
     */
    public class Account implements Serializable {
    
        private Integer id;
        private String name;
        private Float money;
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Float getMoney() {
            return money;
        }
    
        public void setMoney(Float money) {
            this.money = money;
        }
    
        @Override
        public String toString() {
            return "Account{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    ", money=" + money +
                    '}';
        }
    }
    
    package com.neuedu.domain.com.neuedu.jdbctemplate;
    
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.jdbc.datasource.DriverManagerDataSource;
    
    /**
     * JdbcTemplate的最基本用法
     */
    public class JdbcTemplateDemo1 {
        public static void main(String[] args) {
            //准备数据源:spring的内置数据源
            DriverManagerDataSource ds = new DriverManagerDataSource();
            ds.setDriverClassName("com.mysql.jdbc.Driver");
            ds.setUrl("jdbc:mysql://localhost:3306/mydata");
            ds.setUsername("root");
            ds.setPassword("123456");
    
            //1.创建JdbcTemplate对象
            JdbcTemplate jt = new JdbcTemplate();
            //给jt设置数据源
            jt.setDataSource(ds);
            //2.执行操作
            jt.execute("insert into account(name,money)values('ccc',1000)");
        }
    }
    
    

    运行程序查看数据库:


    image.png

    JdbcTemplate在Spring IOC中的使用

    操作繁琐,Spring IOC应用


    image.png

    建立bean.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd">
    
            <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
                <property name="dataSource" ref="dataSource"></property>
            </bean>
    
            <!-- 配置数据源-->
            <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
                <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
                <property name="url" value="jdbc:mysql://localhost:3306/mydata"></property>
                <property name="username" value="root"></property>
                <property name="password" value="123456"></property>
            </bean>
    
    </beans>
    

    测试:

    package com.neuedu.domain.com.neuedu.jdbctemplate;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.jdbc.datasource.DriverManagerDataSource;
    
    /**
     * JdbcTemplate的最基本用法
     */
    public class JdbcTemplateDemo2 {
    
        public static void main(String[] args) {
            //1.获取容器
            ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
            //2.获取对象
            JdbcTemplate jt = ac.getBean("jdbcTemplate",JdbcTemplate.class);
            //3.执行操作
            jt.execute("insert into account(name,money)values('ddd',2222)");
        }
    }
    
    
    image.png

    3、JdbcTemplate的CRUD操作

    测试类:
    插入

    //1.获取容器
    ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
    //2.获取对象
    JdbcTemplate jt = ac.getBean("jdbcTemplate",JdbcTemplate.class);
    
    //3.执行操作
    //插入
    jt.update("insert into account(name,money)values(?,?)","eee",3333f);
    //更新
    jt.update("update account set name=?,money=? where id=?","test",4567,6);
    //删除
    jt.update("delete from account where id=?",6);
    
    
    //查询所有
    List<Account> accounts = jt.query("select * from account where money > ?",new AccountRowMapper(),1000f);
    for(Account account : accounts){
           System.out.println(account);
    }
    
    
    List<Account> accounts = jt.query("select * from account where money > ?",new BeanPropertyRowMapper<Account>(Account.class),1000f);
    for(Account account : accounts){
          System.out.println(account);
    }
    
    
    //查询一个
    List<Account> accounts = jt.query("select * from account where id = ?",new BeanPropertyRowMapper<Account>(Account.class),1);
    System.out.println(accounts.isEmpty()?"没有内容":accounts.get(0));
    
    
    //查询返回一行一列(使用聚合函数,但不加group by子句)
    Long count = jt.queryForObject("select count(*) from account where money > ?",Long.class,1000f);
    System.out.println(count);
    
    
    /**
     * 定义Account的封装策略
     */
    class AccountRowMapper implements RowMapper<Account> {
        /**
         * 把结果集中的数据封装到Account中,然后由spring把每个Account加到集合中
         * @param rs
         * @param rowNum
         * @return
         * @throws SQLException
         */
        @Override
        public Account mapRow(ResultSet rs, int rowNum) throws SQLException {
            Account account = new Account();
            account.setId(rs.getInt("id"));
            account.setName(rs.getString("name"));
            account.setMoney(rs.getFloat("money"));
            return account;
        }
    }
    

    相关文章

      网友评论

          本文标题:6. Spring JdbcTemplate的基本使用

          本文链接:https://www.haomeiwen.com/subject/iesumctx.html