反射和数据库优化

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39135287/article/details/79473733

           

一、反射

 1. 内加载机制

 1. 加载字节码文件到内存(字节码文件当成模板)

 2. 把静态(方法,字段,代码块)初始化(公共部分准备好)

 3. 如果创建对象的时候,会从模板区域找

   2.Class获取的三种方式

      1.Class.forName(全路径);

      2.对象.getClass()  (  this.getClass()  )

      3.类名.class

   2. 字节码

     1.字段Field

        常用方法:getField(字段名name)  获取指定字段(字段为public

                  getDeclareField(字段名 name) 获取指定字段 (字段为private

         

          例如:

            /*1.获取Class对象*/

            Class<?> clazz = Class.forName("com.huaxin.crm.bean.HxUser");

            /*2.创建对象*/

HxUser object = (HxUser) clazz.newInstance();

            /*3.获取public字段*/

Field field = clazz.getField("num");

field.set(object, 19);

              /*4.获取private字段*/

Field field2 = clazz.getDeclaredField("str");

            /*5.设置访问权限*/

field2.setAccessible(true);

field2.set(object, "王麻子");

     2.构造方法 Constructor

         常用方法:getConstructor(参数的class类型) 获取指定的构造方法(构造方法为public

                  getDeclareConstructor(参数的class类型) 获取指定的构造方法 (构造方法为private

   例如:

            // 1.获取Class对象

Class<?> clazz = Class.forName("com.huaxin.crm.bean.HxUser");

// 2. 获取构造方法

Constructor<?> constructor = clazz.getConstructor(String.class);

constructor.newInstance("张三");

     3.方法 Method

         常用方法:getMethod(方法名name,参数的class类型) 获取指定的方法(方法为public

                  getDeclareMethod(方法名name,参数的class类型) 获取指定的方法 (方法为private

例如:

         // 1.获取Class对象

Class<?> clazz = Class.forName("com.huaxin.crm.bean.HxUser");

// 2.获取构造方法

Constructor<?> constructor = clazz.getConstructor(String.class);

// 3.创建对象

Object object = constructor.newInstance("张三");

// 4.获取方法

Method method = clazz.getMethod("addnum", int.class);

method.invoke(object, 18);  //第一个参数为对象,表示调用哪个对象的方法,第二个是参数

  注意:当获取私有字段或者方法时,要设置其访问权限,setAccessible(true), 否则私有方法或者字段不可访问

 

 

二、数据库优化

   1.硬编码优化

      加载驱动(1)、获取链接(3)    

(1)首先在项目下创建一个文件

(2)文件内容格式为 keyname = value

(3)类名.class.getClassLoad().getResourceAsStream(“文件名”); 

      注意:如果文件直接建立在src下,则直接填写文件名。建立在包下面,则前面要加上相应的包名

(4)创建Properties对象

(5)加载字节码 Properties对象.Load(InputStream in)

(6)获取getPropertieskeyname)  

2. 数据库增删改优化

  增删改公共部分: 获取Connection连接、结果查询executeUpdate()

        不公共部分: sql执行语句

 优化:  jdbc中创建一个Update(String sql, Object ... objects);

        其中sql 为数据库执行语句、 Object ... objects 为可变数组

   

     

3. 数据库查询优化

  不公共部分:sql语句,结果集resultSet的处理(返回一个对象、集合、一列数据)

    优化:在jdbc中创建一个QueryString sql,ResultHandle handle, Object ... objects

        其中sql 为数据库执行语句、ResultHandle handle 为对结果集的处理,根据调用者的需求是返回一个对象、集合还是一列数据、 Object ... objects 为可变数组

 

      

对返回单个对象的处理

 

其中:resultSet.getMetaData() 为获取数据库中的数据源

      通过数据源metaData.getColumnCount()可以获取有多少列数据

      通过数据源metaData.getColumnName(int i)可以获取每一列的列名

 

对返回对象集合的处理

 

对一列数据的处理

 

其中:str为要查询的那一列的列名

猜你喜欢

转载自blog.csdn.net/qq_39135287/article/details/79473733