Spring-03-practice

  1. 创建1个Table
    Spring-03-practice_第1张图片
    2.导入相关依赖
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>6.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>5.10.1</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.25</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.8</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>6.0.6</version>
        </dependency>
    </dependencies>

3.JdbcTemplate
JdbcTemplate 是 Spring 对 JDBC 的封装,目的是使JDBC更加易于使用,JdbcTemplate是Spring的一部分。JdbcTemplate 处理了资源的建立和释放,它帮助我们避免一些常见的错误,比如忘了总要关闭连接。他运行核心的JDBC工作流,如Statement的建立和执行,而我们只需要提供SQL语句和提取结果即可。
Spring为了简化数据库访问,主要做了以下几点工作:
提供了简化的访问JDBC的模板类,不必手动释放资源;
提供了一个统一的 DAO 类以实现 Data Access Object 模式;
把SQLException封装为DataAccessException,这个异常是一个RuntimeException,并且让我们能区分SQL异常的原因,例如,DuplicateKeyException表示违反了一个唯一约束;
能方便地集成Hibernate、JPA和MyBatis这些数据库访问框架。
java代码

    /*
    public void testForJava(){
        //创建一个连接池对象
        DruidDataSource druidDataSource=new DruidDataSource();
        druidDataSource.setUrl("jdbc:mysql:///spring_practice");
        druidDataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        druidDataSource.setUsername("root");
        druidDataSource.setPassword("root");


        //实例化对象即可
        JdbcTemplate jdbctemplate=new JdbcTemplate();
        jdbctemplate.setDataSource(druidDataSource);

        //jdbcTemplate.update()             非查询语句
        //jdbcTemplate.queryForObject()     查询单个对象
        //jdbcTemplate.query()              查询集合
    }

     */
    

IoC方式

    <context:property-placeholder location="jdbc.properties"></context:property-placeholder>
    <bean id="DataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="url" value="${jdbc.url}"></property>
        <property name="driverClassName" value="${jdbc.driver}"></property>
        <property name="username" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>

    <bean id="JdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="DataSource"></property>
    </bean>

properties文件

jdbc.url=jdbc:mysql://localhost:3306/spring_practice
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.username=root
jdbc.password=root

1、spring 中的 RowMapper
sping中的RowMapper可以将数据中的每一行数据封装成用户定义的类。
我们在数据库查询中,如果返回的类型是用户自定义的类型(其实我们在数据库查询中大部分返回的都是自定义的类)则需要包装,如果是Java自定义的类型,如:String则不需要。
如果sping与hibernate 相结合了,基本上是用不到,大多数都是在spring单独使用时用到,常见的情况就是与JdbcTemplate一起使用。
可以通过建立内部类实现RowMapper接口,RowMapper中有一个mapRow方法,所以实现RowMapper接口一定要实现mapRow方法,而对自定义类的包装就在mapRow方法中实现。

        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("spring-01.xml");
        JdbcTemplate jdbcTemplate = applicationContext.getBean(JdbcTemplate.class);
        String sql="select * from students where id=?";

        Student student = jdbcTemplate.queryForObject(sql, new RowMapper<Student>() {
            @Override
            public Student mapRow(ResultSet rs, int rowNum) {
                //rs 结果记
                //rowNum 行数

                Student stu = new Student();
                try {
                    stu.setId(rs.getInt("id"));
                    stu.setName(rs.getString("name"));
                    stu.setGender(rs.getString("gender"));
                    stu.setAge(rs.getInt("age"));
                    stu.setClasses(rs.getString("class"));
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
                return stu;
            }
        }, 2002);

执行结果:
在这里插入图片描述

你可能感兴趣的:(SSM自学,spring,oracle,java)