zoukankan      html  css  js  c++  java
  • Spring Jdbc 框架整合的第一天

    Spring  Jdbc的概述

    它是Spring框架的持久层子框架。用于对数据库的操作

    什么是数据库的操作?

    答:对数据库的增删改查

    在使用Spring  Jdbc框架,要用到一个类---->JdbcTemplate,他是spring  jdbc  子框架中提供的一个操作类,用于对原始jabc  API的简单封装

    那么如何创建Template呢?

    首先看一下它的源码:

    public JdbcTemplate() {
    
    }
    
     
    
    /**
    
     * Construct a new JdbcTemplate, given a DataSource to obtain connections from.
    
     * <p>Note: This will not trigger initialization of the exception translator.
    
     * @param dataSource the JDBC DataSource to obtain connections from
    
     */
    
    public JdbcTemplate(DataSource dataSource) {
    
    setDataSource(dataSource);
    
    afterPropertiesSet();
    
    }
    
     
    
    /**
    
     * Construct a new JdbcTemplate, given a DataSource to obtain connections from.
    
     * <p>Note: Depending on the "lazyInit" flag, initialization of the exception translator
    
     * will be triggered.
    
     * @param dataSource the JDBC DataSource to obtain connections from
    
     * @param lazyInit whether to lazily initialize the SQLExceptionTranslator
    
     */
    
    public JdbcTemplate(DataSource dataSource, boolean lazyInit) {
    
    setDataSource(dataSource);
    
    setLazyInit(lazyInit);
    
    afterPropertiesSet();
    
    }

    在此段代码中我们可以看出要创建一个jdbcTemplate 对象,需要获得一个数据库连接的数据源

    如何获得一个数据库连接的数据源呢?

    org.springframework.jdbc.datasource.DriverManagerDataSource,这个路径位于jdbc驱动包中

    再配置springjdbc的四要素:

    实现代码:

    配置文件代码:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
        
        <!--配置一个数据源  
            由于jjabc模块提供的DriverManagerDataSource数据源,是一个直连数据源,
            所以每次访问数据库,都要去打开连接才能访问,效率不高!
            所以引入了连接池的概念。。。
            连接池中的四个重要属性
            1.最大超时毫秒数
            2.最大连接数
            3.最小连接数
            4.最大空闲时间
            
            destroy-method:在连接池对象注销之前,先关闭数据库(关闭连接池)
        
        -->
        <!-- 数据源的作用:获得数据库的链接,从而引出springJDBC的四要素 -->
        <bean name="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
        <!-- 配置springJDBC四要素 -->
        <!-- 驱动 -->
        <property name="driverClassName" value="org.gjt.mm.mysql.Driver"></property>
        <!-- 连接字符串 -->
        <property name="url" value="jdbc:mysql://localhost:3306/sms"></property>
        <!-- 用户名 -->
        <property name="username" value="root"></property>
        <!-- 密码 -->
        <property name="password" value="1234"></property>
        <!-- 最大超时毫秒数 -->
        <property name="maxWaitMillis" value="30000"></property>
        <!-- 最大连接数 -->
        <property name="maxTotal" value="100"></property>
        <!-- 最小连接数 -->
        <property name="initialSize" value="50"></property>
        <!-- 最大空闲连接 -->
        <property name="maxIdle" value="55"></property>
        </bean>
        
        <!-- 获得JDBCTemplate操作对象 -->
        <bean name="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <!-- 设置 -->
        <property name="dataSource" ref="dataSource"></property>
        </bean>
        
        <!-- 配置dao -->
        <bean name="studentDAO" class="cn.gzsxt.dao.StudentDAO">
        <property name="jdbcTemplate" ref="jdbcTemplate"></property>
        </bean>
    
    </beans>

    dao层:

    package cn.gzsxt.dao;
    
    import org.springframework.jdbc.core.JdbcTemplate;
    
    import cn.gzsxt.pojo.Student;
    
    public class StudentDAO implements DAO<Student>{
    
        private JdbcTemplate JdbcTemplate;
        
        
        
        public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
            JdbcTemplate = jdbcTemplate;
        }
    
    
    
        @Override
        public int insert(Student entity) {
            // TODO Auto-generated method stub
            
            //事物的操作(增删改)都可以是update方法
            Object [] objects = {entity.getStuName(),entity.getStuPwd()};
            int update = JdbcTemplate.update("INSERT INTO t_student(stuName,stuPwd) VALUES(?,?)", objects);
            return update;
        }
    
    }

    pojo层

    package cn.gzsxt.pojo;
    
    import java.io.Serializable;
    
    public class Student implements Serializable{
    
        /**什么是序列化?
         * 将对象通过流的形式写出去
         * 反序列化
         * 读取流形式的数据
         * 
         */
        private static final long serialVersionUID = 114525114257637298L;
        private int stuId;
        private String stuName;
        private String stuPwd;
        public int getStuId() {
            return stuId;
        }
        public void setStuId(int stuId) {
            this.stuId = stuId;
        }
        public String getStuName() {
            return stuName;
        }
        public void setStuName(String stuName) {
            this.stuName = stuName;
        }
        public String getStuPwd() {
            return stuPwd;
        }
        public void setStuPwd(String stuPwd) {
            this.stuPwd = stuPwd;
        }
        public Student(int stuId, String stuName, String stuPwd) {
            super();
            this.stuId = stuId;
            this.stuName = stuName;
            this.stuPwd = stuPwd;
        }
        public Student() {
            super();
            // TODO Auto-generated constructor stub
        }
        
        
        
    }

    测试代码:

    package cn.gzsxt.test;
    
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import cn.gzsxt.dao.StudentDAO;
    import cn.gzsxt.pojo.Student;
    
    public class ApplicationContextTest {
        private StudentDAO studentDAO;
        private ClassPathXmlApplicationContext conn;
        
        @Before
        public void Before(){
            conn = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
            //获得数据源对象
            studentDAO = conn.getBean(StudentDAO.class);
        }
        
        @After
        public void after(){
            conn.close();
        }
        
        /**
         * junit代替main方法,使得类能同时有多个main方法的功能
         * 使用时要注意,返回值必须为空,为void
         */
    //    @Test
    //    public void dataSource(){
    //        //通过配置文件创建容器
    //        ClassPathXmlApplicationContext conn = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
    //        
    //        //获取数据源对象
    //        DataSource dataSource = conn.getBean(DataSource.class);
    //        
    //        try {
    //            //打印数据库链接地址,测试连接是否成功
    //            System.out.println(dataSource.getConnection());
    //        } catch (SQLException e) {
    //            // TODO Auto-generated catch block
    //            e.printStackTrace();
    //        }
    //    
    //    }
        @Test
        public void insert(){
                Student entity = new Student();
                entity.setStuName("王八");
                studentDAO.insert(entity);
            
        }
    }

    spring jdbc 的优化!

    由于jdbc模块提供的DriverManagerDataSource数据源,是一个直连数据源,所以每次访问数据库,都要去打开连接才能访问,效率不高,所以引入了连接池的概念,连接池的四个重要属性:

    1.最大超时毫秒数

    2.最大连接数

    3.最小连接数

    4.最大空闲时间

    如何关闭连接池呢?

    destroy-method:在连接池对象注销之前,先关闭数据库(关闭连接池)

  • 相关阅读:
    CCF NOI1079 合法C标识符
    CCF NOI1080 统计字符
    CCF NOI1076 进制转换
    CCF NOI1065 最小公倍数
    CCF NOI1139 高精度减法
    CCF NOI1138 高精度加法
    CCF NOI1115 找数
    CCF NOI1097 数列
    CCF NOI1089 高精度运算
    NUC1931 Problem D 区间素数【素数筛选】
  • 原文地址:https://www.cnblogs.com/hq1997/p/10720689.html
Copyright © 2011-2022 走看看