发表于: 2018-04-04 23:59:57
2 663
今天完成的事情:(一定要写非常细致的内容,比如说学会了盒子模型,了解了Margin)
明天计划的事情:(一定要写非常细致的内容)
遇到的问题:(遇到什么困难,怎么解决的)
收获:(通过今天的学习,学到了什么知识)
今天完成的事情: 1.0 总算弄懂jbdc template编写的配置操作,能清楚依赖问题学会导入jar包
1.1 建立了四个包,弄懂了pojo是什么
POJO(Plain Ordinary Java Object)简单的Java对象,是普通JavaBeans。使用POJO名称是为了避免和EJB混淆起来, 而且简称比较直接. 其中有一些属性及其getter setter方法的类,没有业务逻辑,但不允许有业务方法,也不能携带有connection之类的方法。理想地讲,一个POJO是一个不受任何限制的Java对象。 其实说白了,我觉得POJO就是像我之前创的Student类之定义了基本属性和简单get和set方法.
因为我对javaBean也不是很懂于是也查了一下:javaBean是一种组件技术,就好像你做了一个扳子,而这个扳子会在很多地方被拿去用,这个扳子也提供多种功能(你可以拿这个扳子扳、锤、撬等等),而这个扳子就是一个组件。JavaBean是公共Java类,但是为了编辑工具识别,需要满足至少三个条件:
- 1.有一个public默认构造器(例如无参构造器,)
- 2.属性使用public 的get,set方法访问,也就是说设置成private,同时get,set方法与属性名的大小也需要对应。例如属性name,get方法就要写成,public String getName(){},N大写。
- 3.需要序列化。这个是框架,工具跨平台反映状态必须的
1.2 初步编写了配置applicationContext.xml文件,尝试编写了POJO>>Student类,StudentDaoimpl继承类
这是applicationContext.xm;文件配置。
因为我还不是很懂关于bean标签的编写,所以参考和借鉴了师兄和网上的一些写法,跌跌撞撞的也算把他写出来了。可是就算写出来,我也是充满了疑惑
我去查了一下关于编写bean标签的格式:
<bean id="随意起名" 类路径"></bean>
<bean id="strutsHelloWorld" class="impl.StrutsHelloWorld"></bean>
的方式,添加到Spring的容器中作为预加载的资源放在Spring的这个容器中。
<property name="helloWorld" ref="strutsHelloWorld"/>
最后在 property标签中,以ref属性像name选定的函数中注入对应的参数,来调整需要被使用函数的路径以及被调用函数,运行时,这个函数就会被使用,从而呈现想要的效果。
所以我认为在id后加可以随意名字,后面紧接着是它的类路径名,ref后加的是函数的参数,但当我看到下面这条语句还是不知所措,
<bean name="StudentDAO" class="DAOIMPL.StudentDaoimpl">
<property name="jdbcTemplate"
ref ="jdbcTemplate">
问题1:为什么这句的name和ref都是jdbcTemplate?我按ctrl点一个Template进去就直接进入了下面这条函数中,但关于这条函数我也不是很懂,只知道它是个关于jdbc的set语句,传入的是一个JdbcTemplate类的对象的函数
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
applicationContext.xml文件
<beans>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource">
<ref local="dataSource"/>
</property>
</bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/enrolment" />
<property name="username" value="root" />
<property name="password" value="19971015" />
</bean>
<bean name="StudentDAO" class="DAOIMPL.StudentDaoimpl">
<property name="jdbcTemplate"
ref ="jdbcTemplate">
</property>
</bean>
<bean name="student" class="POJO.Student">
<property name="dao"
ref ="StudentDAO">
</property>
</bean>
</beans>
StudentDAO接口 这里我先为了配置先只写了一个查询的方法
import POJO.Student;
import java.util.List
public interface StudentDAO {
List<Student> findAllStudent();
}
Student类
问题2:为什么Student类调了DAO的包,而StudentDAO接口 调了Sdudent的包?这个函数能起到什么作用?public StudentDAO getDao() {
return dao;
}
import DAO.StudentDAO;
import java.util.List;
public class Student {
private int id ;
private String name ;
private String gender;
private StudentDAO dao ;
public StudentDAO getDao() {
return dao;
}
public void setDao(StudentDAO dao) {
this.dao = dao;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public List<Student> findAllStudent(){
return dao
}
}
StudentDaoimpl继承类
import ....//省略一下其他的包
import POJO.Student;
public class StudentDaoimpl implements StudentDAO{
private JdbcTemplate jdbcTemplate;
public List<Student> findAllStudent() {
String sql = "select * from people";
final List<Student> list = new ArrayList<Student>();
jdbcTemplate.query(sql,new RowCallbackHandler(){
public void processRow(ResultSet rs) throws SQLException {
Student s = new Student();
s.setId(rs.getInt("id"));
s.setName(rs.getString("name"));
s.setGender(rs.getString("age"));
list.add(s);
}
});
return list;
}
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}
}
2.查阅并学习了一些关于IOC依赖注入思想
这里我可以推荐一篇博客讲的很生动 嗯 https://blog.csdn.net/xz0125pr/article/details/49129659
我们现在看到的画面,就是我们要实现整个系统所需要完成的全部内容。这时候,A、B、C、D这4个对象之间已经没有了耦合关系,彼此毫无联系,这样的话,当你在实现A的时候,根本无须再去考虑B、C和D了,对象之间的依赖关系已经降低到了最低程度。所以,如果真能实现IOC容器,对于系统开发而言,这将是一件多么美好的事情,参与开发的每一成员只要实现自己的类就可以了,跟别人没有任何关系! 我们再来看看,控制反转(IOC)到底为什么要起这么个名字?我们来对比一下: 软件系统在没有引入IOC容器之前,对象A依赖于对象B,那么对象A在初始化或者运行到某一点的时候,自己必须主动去创建对象B或者使用已经创建的对象B。无论是创建还是使用对象B,控制权都在自己手上。软件系统在引入IOC容器之后,这种情形就完全改变了,如图所示,由于IOC容器的加入,对象A与对象B之间失去了直接联系,所以,当对象A运行到需要对象B的时候,IOC容器会主动创建一个对象B注入到对象A需要的地方。 通过前后的对比,我们不难看出来:对象A获得依赖对象B的过程,由主动行为变为了被动行为,控制权颠倒过来了,这就是“控制反转”这个名称的由来。
现在,我们利用电脑主机和USB接口来实现一个任务:从外部USB设备读取一个文件。 电脑主机读取文件的时候,它一点也不会关心USB接口上连接的是什么外部设备,而且它确实也无须知道。它的任务就是读取USB接口,挂接的外部设备只要符合USB接口标准即可。所以,如果我给电脑主机连接上一个U盘,那么主机就从U盘上读取文件;如果我给电脑主机连接上一个外置硬盘,那么电脑主机就从外置硬盘上读取文件。挂接外部设备的权力由我作主,即控制权归我,至于USB接口挂接的是什么设备,电脑主机是决定不了,它只能被动的接受。电脑主机需要外部设备的时候,根本不用它告诉我,我就会主动帮它挂上它想要的外部设备,你看我的服务是多么的到位。这就是我们生活中常见的一个依赖注入的例子。在这个过程中,我就起到了IOC容器的作用。
明天计划的事情:1.继续完成今天没有完成的事情
2.学习Spring JDBC查询数据接口RowCallbackHandler、RowMapper
(明天白天会出去,可能时间不会太够)
收获:好吧,本来以为今天会把编写DAO的任务给解决掉的,没想到现实还是这么的骨感,哈哈。关键我在查阅资料的时间占了很大的一部分,讲真网上查资料是真的耗时间,因为很有可能你在查一个问题的时候另一个你又不知道的问题阻挡了你的进程,心里真的很凉感觉自己啥都不知道,有啥都要去查,但发现80%都很抽象。emmmm,会怀疑人生的 。不知不觉就12点了。。
评论