A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 逐野 初级黑马   /  2018-1-17 16:18  /  581 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

【石家庄校区】学习小结
反射:
      在运行时,我们可以获取任意一个类的所有方法和属性
      在运行时,让我们调用任意一个对象的所有方法和属性
      
      前提:
            要获取类的对象(Class对象)
            
      Class:
            Constructor<?>[]getConstuctors():获取一个对象中所有的构造方法(public所修饰的构造)
            Constructor<T>getConstuctor(Class<?>... parameterTypes):根据传入字节码参数获取构造方法(若无参数,获取的是无参构造)
            TnewInstance():使用无参的构造方法创建对象
            Field[]getFidlds():获取对象中所有的被public修饰的成员变量
            FieldgetField(String name):根据变量名获取对象中的被public修饰的成员变量对象
            Field[]getDeclaredFields():获取对象中所有的成员变量
            MethodgetMethod(String name,Class<?>...parameterTypes):获取对象中被public修饰的成员方法对象,name为方法名,可变参数为方法参数
            MethodgetDeclaredMethod(String name,Class<?>...parameterTypes):获取对象的成员方法对象
      Constuctor:
            TnewInstance(Object... initargs):使用构造方法创建对象
            voidsetAccessible(boolean flag):如果为true取消Java的访问检查,暴力访问
      Field:
            Objectget(Object obj):返回对象的对象值
            voidset(Object obj,Object value):通过成员变量对象,修改指定为指定的值
            voidsetAccessible(boolean flag):如果为true取消Java的访问检查,暴力访问
      Method:
            Objectinvoke(Object,Object...args):调用方法
            voidsetAccessible(boolean flag):如果为true取消Java的访问检查,暴力访问
SQL语句
      SQL分类
            数据定义语言:简称DDL,用来定义数据库对象:数据库,表,列等。关键字:create,alter,drop等
            数据操作语言:简称DML,用来对数据库中表的记录进行更新。关键字:insert,delete,update等
            数据控制语言:简称DCL,用来定义数据库的访问权限和安全级别,及创建用户。
            数据查询语言:简称DQL,用来查询数据库中表的记录。关键字:select,from,where等
      SQL语法特点:
            SQL语句可以单行或多行书写,以;结尾
            可使用空格和缩进来增强语句的可读性
            MySQL数据库的SQL语句不区分大小写,建议使用大写,例如:SELECT * FROM user。
            同样可以使用/**/的方式多行注释
            #单行注释
            --单选注释(空格不能少)
            字符串和日期要使用''单引号或""双引号包裹,推荐单引号
      SQL数据类型
            int              整型
            double      浮点型
            varchar            字符串型(可变字符型)
            date           日期类型,只有年月日,没有时分秒
            time           时间类型
            datetime    日期时间类型
      SQL语句
            CREATEDATABASE 数据库名 (CHARACTER SET 字符集);
            SHOWDATABASES; 显示所有数据库
            SHOWCREATE DATABASE 库名;查看该库的信息
            DROPDATABASE 数据库名;删除数据库
            USE库名;使用库
            SELECTDATABASE();查看当前正在使用的数据库
            创建数据表
            CREATETABLE 表名(
                  列名1 数据类型(长度) 约束,
                  列名2 数据类型(长度) 约束,
                  ...
            )
                  约束:
                       主键:PRIMARY KEY,限制该列的记录值不能为空且唯一,相当于同时设定了NOT NULL和UNIQUE
                       非空:NOT NULL
                       自增:AUTO_INCREMENT,设置该列的记录值可以自动增加(只能用于数据类型)
                       唯一:UNIQUE:不能重复
                       外键:FOREIGN KEY,主要是连接加一个表的主键
                       检查:CHECK(条件),限制该列插入的记录值是否符合要求
                       默认值:DEFAULT,限制该列记录如果没有插入值,则使用默认值
            SHOWTABLES:查看库中的所有表
            DESC表名:查看表结构
            DROPTABLE 表名:删除表
      DOS命令行乱码
            临时:set name 'gbk';(将数据库数据修改为Windows的GBK)
                  
            
      增删改
            修改表名:
                  RENAMETABLE 表名TO 新名;
            修改表的字符集:
                  ALTERTABLE 表名CHARACTER SET 字符集;
            列
                  添加列,添加字段:
                       ALTERTABLE 表名ADD 列名 数据类型 约束;
                  修改列:
                       ALTERTABLE 表名MODIFY 列名 数据类型 约束;
                  修改列名:
                       ALTERTABLE 表名CHAGE 旧列名 新列名 数据类型 约束;
                  删除列:
                       ALTERTABLE 表名DROP 列名;
            添加数据
                  一次添加单条:
                       INSERTINTO 表名(列名1,列名2,列名3....)VALUES (值1,值2,值3)
                  添加数据格式,所有值全给出
                       INSERTINTO 表名VALUES (全列值)
                  一次添加多条:
                       INSERTINTO 表名(列名1,列名2,列名3...)VALUES(值1,值2,值3),(值1,值2,值3),...
                  注意:
                       列名,表名问题
                       对应问题,个数,数据类型
                       插入主键可以用null代替
            更新(修改)数据
                  UPDATE表名SET 列1=值1,列2=值2....WHERE 条件;
            删除数据
                  DELETEFROM 表名WHERE 条件;
                  清空数据:
                       DELETEFROM 表名;
                             逐条删除记录,不会重置自增计数器
                       TRUNCATETABLE 表名;
                             全部删除记录,重置自增计数器
                       
      查询数据
            普通查询:
                  查询指定列的数据
                       SELECT列名1,列名2 ... FROM 表名;
                  查询所有列的数据
                       SELECT* FROM 表名;
                  去重查询
                       SELECTDISTINCT 列名FROM 表名;
                       #如果多个列,则按照多个列组合去重
                  查询重新命名列
                       SELECT列名AS 临时列名 FROM 表名 AS 临时表名;
                  在查询数据中,可以直接进行数学计算
            条件查询:
                  即按指定条件查询记录返回符合条件的结果集, 使用SELECT和WHERE组合
                  作用: 条件子句, 过滤符合条件的结果
                  运算符
                       比较运算符
                             =:相等
                             <>或!=: 不等
                             >:大于
                             <:小于
                             >=:大于等于
                             <=:小于等于
                             BETWEEN...AND...: 在一个范围内(包含头和尾), BETWEEN 0 AND 10; 0~10
                             IN(): 在列表中, 满足列表中一个即可
                                   如: IN (1, 3, 5)
                             ISNULL: 是空
                             LIKE通配符`: 模糊查询
                                   通配符种类
                                         %:一个百分号可以表示任意个字符. 比如王%, 王大锤, 王五
                                         _:一个下划线可以表示一个字符. 比如王_, 只能匹配王五
                       逻辑运算符
                             AND:与.两边条件同时成立才成立
                             OR:或.两边条件只要有一个成立就成立
                             NOT:非,取相反结果
                                   NOTBETWEEN ... AND ...: 不在范围内
                                   NOTIN: 不在列表中
                                   NOTLIKE: 不匹配
                                   ISNOT NULL: 非空
                       日期也是可以比较的
            对结果集进行排序
                  ORDERBY 列名[DESC][ASC],列名 [DESC][ASC]
                  先过滤条件WHERE查询再排序
            分组
                  GROUPBY 列名[HAVING] 条件
                  分组必须跟随聚合函数
                  SELECT查询的时候,被分组的列,要出现在SELECT选择列的后面
      聚合函数:
            count:统计个数
            sum:求和
            avg:平均值,如果列中有空值,则忽略不算
            max:求最大值
            min:求最小值
JDBC
      JDBC:
            就是一套API,就是Sun定义的类或者是接口,由数据库厂商实现
      JDBC开发步骤
            前提: 导入数据库驱动jar包
            代码编写步骤:
                  1.注册驱动
                       告知JVM使用哪一个数据库驱动
                             使用java.sql.DriverManager类静态方法registerDriver(Driver driver)
                             Driver是一个接口,参数传递,传入MySQL驱动程序中的实现类
                             //DriverManager.registerDiver(newDriver());
                             通过源代码看出,源代码已经注册了驱动,不需要重复再次注册,不推荐
                             推荐使用反射注册
                             Class.forName("com.mysql.jdbc.Driver");
                  2.获取连接
                       使用JDBC中的类, 创建对MySQL数据库的连接
                             DriverManager方法:
                             staticConnection getConnection(String url,String user,String password)
                                   返回值是Connection接口的实现类,在mysql驱动程序
                                   url:数据库地址 jdbc:mysql://连接的主机IP:端口号/数据库名字
                                         如:String url="jdbc:mysql://localhost:3306/mybas";
                                               可以将localhost:3306删除,默认为localhost:3306
                  3.获取语句执行平台
                       通过连接对象获取对SQL语句的执行者对象
                       Connection调用方法
                       StatementcreatStatement():获取Statment,该对象用于将SQL语句发送到数据库   
                       PreparedStatementpreparedStatment(String sql):预编译SQL语句
                             方法中参数,SQL语句的参数全部采用问号占位符
                  4.执行SQL语句
                       使用执行者对象, 向数据库执行SQL语句, 并获取执行结果
                       Statement接口
                             intexecuteUpdate(Stirng sql):执行SQL语句,仅限于INSERT,DELETE,UPDATE,返回生效的行数
                             ResultSetexeceteQuery(String sql):执行SQL,仅限于SELECT
                             ResultSet接口
                                   booleannext():将结果集的指针向下移动一行,并返回是否还有下一条记录
                                         注意:没有调用该方法之前,ResultSet的光标是在第一行之前,只有调用一次next方法后,指针才能指向第一条记录
                                   StringgetString(String columnName):以字符串形式获取columnName列的数据
                       防止注入攻击
                             PreparedStatment:对SQL预编译存储,多次高效的执行SQL
                             使用PreparedStatement的set方法对占位符上的参数进行设置
                             如:setObject(inti,Object obj);i从1开始
                  5.处理结果
                       根据项目的业务需求对结果进行操作
                  6.释放资源
                       释放数据库连接, 必须
                       stat.close();
                       con.close();
                       
      SQL的注入攻击
            原因:使用字符串拼接,用户输入单引号
            如:1' or '1=1
      ORM:对象关系映射,就是指Java对象和关系型数据表的相互转换过程
            
      dao:一般操作数据库的包叫做dao
DBUtils
      可以操作事务,回滚
      QuerRunner
            update(Connectioncon,String sql,Object...param),用来完成表数据的增加,删除,更新操作
            query(Connectioncon,String sql,ResultSetHandler r,Object...parm),查询数据
                  注意:query方法返回值,返回的值是泛型,具体返回值类型,跟随结果集处理方式变化
      ResultSetHandler
            ArrayHandler  将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值
            ArrayListHandler   将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中。
            BeanHandler   将结果集中第一条记录封装到一个指定的javaBean中。
            BeanListHandler    将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中
                  注意:JavaBean必须要有空参构造
            ColumnListHandler     将结果集中指定的列的字段值,封装到一个List集合中
            ScalarHandler 它是用于单数据。例如select count(*) from 表操作。
            MapHandler   将结果集第一行封装到Map集合中,Key列名, Value 该列数据
            MapListHandler    将结果集第一行封装到Map集合中,Key列名, Value 该列数据,Map集合存储到List集合
设计模式:
      实际的软件开发,对问题的处理总结经验,设计模式.
      在JAVA中,一共有23种设计模式
      分类
            创建型
            关系型
            功能型
      单例模式:
            保证一个类的对象唯一性
            饿汉式:
                  私有构造方法
                  在本类的成员位置,创建出自己类的对象
                  提供一个静态的方法getXXX(getInstance),获取单例对象         
                  在多线程下安全
            懒汉式(安全的,高效的应用):
                  私有构造方法
                  在本类的成员位置,定义自己类的变量赋值为空
                  提供一个静态的方法getXXX(getInstance),如果变量为空则创建自己类的对象,返回单例对象
                  在多线程并发下不安全
                  解决方式:
                       加锁:snychronizeda     
                       在锁的外面加上非空判断,如果不为非空则不需要拿锁,这样可以提高运行的效率
      
      工厂模式:
            将所有的创建对象的任务,交给一个工厂实现
            找工厂获取即可
            
            简单工厂:
                  优点:方便创建对象
                  缺点:如果传入的对象没有找到,会出现空指针异常
            工厂方法:
                  将每个对象,交给了各自工厂去创建
                  缺点:如果对象太多,那么工厂也太多
            
            
              

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马