发表于: 2020-10-16 23:30:47

1 1408


今天完成的事情: 
遇到的问题: 

报错org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: No constructor found in com.jnshu.Pojo.Student matching [java.lang.Integer, java.lang.String, java.lang.Boolean, java.sql.Date]

报这个问题是因为在实体类中定义了有参构造函数,但是忽略了无参构造函数的定义,所以在执行查询的时候会报如下错误:

比如创造了一个带有参数的构造方法,那么无参的构造方法必须显式的写出来,否则会编译失败"这句话有点不妥,应该这么理解:每个类至少要有一个构造函数,如果你自己构建了一个带有参数的构造函数而没有再显示的写出无参的构造函数也是可以的,不过当你尝试通过一个无参的构造函数来构建(new)时,此时编译器才会报错,因为找不到这个无参的构造函数。也就是说当一个类你没有给他构造函数,则编译器会自动补上一个无参的,若有的话就不会,你需要显示将此无参的构造函数写出来。

所以在创建某个实体类的时候,应该养成一个好习惯,显示构造一个无参构造函数,这样就会避免后面遇到的奇葩问题了。

Spring报错org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'StudentDao'


log4j报错:ERROR StatusLogger No log4j2 configuration file found.

查资料发现,log4j2只支持xml和json两种格式的配置,所以配置log4j.properties是没有作用的。
log4j的2.x版本在默认情况下,系统选择configuration文件的优先级如下
1.classpath下名为log4j-test.json或者log4j-test.jsn文件
2.classpath下名为log4j2-test.xml
3.classpath下名为log4j.json或者log4j.jsn文件
4.classpath下名为log4j2.xml

所以我把上面的log4j.properties的文件改为log4j2.xml文件。


我的做法是直接加上log4j2.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{YYYY-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n" />
</Console>
<RollingFile name="RollingFile" filename="log/test.log"
filepattern="${logPath}/%d{YYYYMMddHHmmss}-fargo.log">
<PatternLayout pattern="%d{YYYY-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n" />
<Policies>
<SizeBasedTriggeringPolicy size="10 MB" />
</Policies>
<DefaultRolloverStrategy max="20" />
</RollingFile>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Console" />
<AppenderRef ref="RollingFile" />
</Root>
</Loggers>
</Configuration>
最后成功运行

重新复习了面向对象的内容

“人把大象装进冰箱”

1.面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做。

  • ① 把冰箱门打开
  • ② 抬起大象,塞进冰箱
  • ③ 把冰箱门关闭

2.面向对象:强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。

 人{


          打开(冰箱){

                     冰箱.开开();

         }

                   抬起(大象){
                        大象,进入(冰箱);

                 }

}
                      冰箱{

                          开开(){}
}


大象{

                 进入(冰箱);

}

发现这个例子很形象,知道了JAVA的面向对象语言的大概意思

了解Person p3 = p1只是栈中的地址指向堆中p1,并没有创造新的对象,所以p3.age = 10;


明天计划的事情:

上午快速复习一遍面向对象三大特征,目前比较了解的只有继承了,多态和封装都不太了解。下午把自己Spring+mybatis整合的程序过一遍,了解各个程序的对应关系

 

收获:依旧还有很多基础知识不太理解





返回列表 返回列表
评论

    分享到