发表于: 2019-12-12 11:59:35

1 1090


今天完成的事情:

1.使用JdbcTemplate连接数据库

1)导入c3p0数据源
<dependency>
    <groupId>com.mchange</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.5.4</version>
</dependency>

2)配置applicationContext.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"
      xmlns:context="http://www.springframework.org/schema/context"
      xmlns:tx="http://www.springframework.org/schema/tx"
      xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
   <!-- 导入资源文件 -->
   <context:property-placeholder location="classpath:db.properties"/>

   <!-- 配置 C3P0 数据源 -->
   <bean id="dataSource"
         class="com.mchange.v2.c3p0.ComboPooledDataSource">
       <property name="user" value="root"></property>
       <property name="password" value="19980710"></property>
       <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8"></property>
       <property name="driverClass" value="com.mysql.cj.jdbc.Driver"></property>
   </bean>

   <!-- 配置 Spring 的 JdbcTemplate -->
   <bean id="jdbcTemplate"
         class="org.springframework.jdbc.core.JdbcTemplate">
       <property name="dataSource" ref="dataSource"></property>
   </bean>

</beans>

3)编写测试类

package com.jdbcTemplate;

import org.junit.BeforeClass;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.sql.DataSource;
import java.sql.SQLException;

public class JdbcTemplateTest {
private JdbcTemplate jdbcTemplate;
   private ApplicationContext ac = null;

   {
ac=new ClassPathXmlApplicationContext("applicationContext.xml");
       jdbcTemplate=(JdbcTemplate) ac.getBean("jdbcTemplate");
   }


//测试连接
   @Test
   public void testDataSource() throws SQLException
{
DataSource dataSource=ac.getBean(DataSource.class);
       System.out.println("ok"+dataSource.getConnection());
   }

//测试修改数据
   @Test
   public void testUpdate() {
String sql = "update user set name = ? where id = ?";
       jdbcTemplate.update(sql, "张三", 1);
   }

}


2.复习Java基础

3.简单练习了Debug


明天计划的事情:使用JDBCTemplate的时候分离Interface和Imple,学习Mybatis


遇到的问题:
1.Debug的Step Into功能失灵,进不去方法中。网上有Eclipse失灵的解决办法,没有找到idea中的解决办法

2.添加依赖报错无法下载(问题在师兄的帮助下解决了,但具体原因不太清楚,上网搜了下可能的原因,可能是因为和之前添加的依赖发生冲突导致的)


收获:

1.依赖注入

依赖注入(Dependency Injection)和控制反转(Inversion of Control)是同一个概念。具体含义是:当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,在 传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者 实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入。


2.继承性

(1)继承性的好处
        1)减少了代码的冗余,提高代码的复用性
        2)便于功能的扩展
        3)为多态性的使用,提供了前提
(2)继承性的格式:class A extends B { }
        A:子类、派生类、subclass

        B:父类、超类、基类、superclass

    体现:一旦子类A继承父类B以后,子类A中就获取了父类B中声明的所有属性和方法。

    特别的,父类中声明为private的属性或方法,子类继承父类后,仍然认为获取了父类中私有的结构。
    只有因为封装性的影响,使得子类不能直接调用父类结构而已。
    子类继承父类后还可以声明自己特有的属性和方法,实现功能的拓展。
(3)Java中继承性的规定
        1)一个类可以被多个子类继承

        2)一个类只能有一个父类 


3.Java中继承性的规定

    1)一个类可以被多个子类继承

    2)一个类只能有一个父类

    3)子类直接继承的父类叫直接父类,间接继承的父类叫间接父类

    4)子类继承父类后,就获取了直接父类以及间接父类中声明的属性和方法 


4.c3p0是什么?

c3p0是一个库。它扩展了传统的jdbc数据库连接池,并且支持JDBC3规范和JDBC2的标准扩展。


5.为什么使用c3p0?

首先,c3p0是一种jdbc数据库连接池。那么为什么使用数据库连接池呢?因为数据库连接是一种关键的、有限的、昂贵的资源。传统的模式(如传统的java web项目中,servlet的beans中建立数据库连接),每次连接都需要验证用户,消耗了大量的时间和资源。而数据库连接池在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已经建立的空闲连接对象。使用完毕后,用户不关闭连接,而是将数据库连接对象放回连接池中。数据库连接池管理数据连接的建立、断开,同时监视数据库连接数量和使用情况。使用数据库连接池会显著提高整个应用程序的伸缩性(大大提高了连接数量)和健壮性(能够应对大量用户频繁连接数据库,减少系统资源的消耗),提高应用程序的性能指标。


6.方法的重写(override)
1)重写:子类继承父类以后,可以对父类中同名同参数的方法,进行覆盖操作
2)应用:重写以后,当创建子类对象以后,通过子类对象调用子父类中的同名参数的方法时,实际执行的是子类重写父类的方法。
3)重写的规定:
        子类重写的方法的方法名和形参列表与父类被重写的方法的方法名和形参列表相同;
        子类重写的方法的权限修饰符不小于父类被重写的方法的权限修饰符;
        返回值类型:
            父类被重写的方法的返回值类型是void,则子类重写的方法的返回值类型只能是void
            父类被重写的方法的返回值是A类型,则子类重写的方法的返回值类型可以是A类或A的子类
4)子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型



返回列表 返回列表
评论

    分享到