发表于: 2017-10-18 21:52:34
1 765
1;又完善了一点昨天的注解知识,对于注入行为的注解,提到两种方式@Autowired 与@Resource,虽然作用相同,都可以用来装配bean. 都可以写在字段上,或写在setter方法上。但是还是有点区别
@Autowired默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象必须存在。
@Resource(这个注解属于J2EE的),默认安装名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行安装名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。
结论是,用@Resource注解在字段上,这样就不用写setter方法了,并且这个注解是属于J2EE的,减少了与spring的耦合,同时代码看起比较优雅;我尝试了一下,能跑通,但是感觉还是没有直接component方便,或许是还是没理解应用到位,先mark后期用到再深入。
2;JDBCTemplate的学习应用,嗯,来了这么久,昨天好像才看到有用的概念,这个Template实际上就是一个springjdbc的框架,一直不知道JDBCTemplate与jdbc啥关系,问了好几次也没解释清楚。。。。整体来说,普通JDBC处理数据库时,编写很多不必要的代码来处理异常,开闭数据库非常麻烦;为了使 JDBC 更加易于使用,Spring 在 JDBCAPI 上定义了一个抽象层, 以此建立一个JDBC存取框架.这个框架会提供了几种方法和相应的不同类,来简化上述的繁琐内容;而JDBCTemplate就是这些框架里的某一种常用的框架,这个常用的框架里有一个类就叫JdbcTemplate,专业术语:应该是一种中央框架类吧。重点是要使用Jdbctemplate 来完成jdbc 操作,首先要得到JdbcTemplate 的对象,方式的话有好几种吧,不过推荐使用的是下面这个,至于其他的再说。
Spring 提供了 org.springframework.jdbc.core.support.JdbcDaoSupport 类 , 这个类中定义了 JdbcTemplate 属性,也定义了DataSource 属性,当设置DataSource 属性的时候,会创建jdbcTemplate 的实例,所以我们自己编写的DAO 只需要继承JdbcDaoSupport 类,然后注入DataSource 即可。相对而言这一种似乎最简便,不过没有完全理解,代码的话倒是能跑通,先说说过程吧。
整体看一下结构,一个mvn项目,主要是方便并且好看;里面有pom文件来确定依赖;有application文件来注入创建;有property文件来确定打印日志;五个主要类,pojo对象也是数据库的信息;test测试类;dao接口定义规范方法怎么去操作数据库,目的是干什么;impl实现类是用来是实现接口,完成实际操作的部分;然后还有一个mapper类这个的话应该是把前面的pojo对象和数据库信息建立好映射关系,这样实现类的某一些方法比如说返回一个对象,要通过这个映射来转换。
然后是流程,理论上template依赖于连接池来获得数据的连接(这一步就是简化之前jdbc每次都要获取连接)所以必须先要构造连接池,这里是通过配置文件来获取要有,DataSource的属性可以通过注入数据库的一些配置属性添加。
<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/task1?characterEncoding=utf8&useSSL=true" />
<property name="username" value="root" />
<property name="password" value="1234" />
</bean>
接着是创建创建template对象,而Template依赖与DataSource,以ref的方式为JdbcTemplate注入引用
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
接着是JdbcTemplate之后,要有Dao,同时在Dao里添加一个JdbcTemplate的成员,然后以ref的方式将JdbcTemplate注入到Dao中
<bean id="studentDAO" class="big.dada.impl.StudentDAOImpl">
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>
再贴一下,细节pojo
Dao
import big.dada.pojo.Student;
import java.util.List;
//这里导入student类,若是在一个package里就不用了
public interface StudentDAO
{
public void add (Student student);//增加,是把对象映射成数据库的一条信息
public void update(Student student);//修改
public void delete(Student student);//删除
//public void delete(int id),这里也可以把参数改成数据库的,与上面反映射
public Student get(int id);//获取,把数据的一条记录,返回一个对象
public List<Student> list();
}
mapper
public class StudentMapper implements RowMapper<Student>
{
public Student mapRow(ResultSet rs, int rowNum) throws SQLException
{
Student student = new Student();
student.setId(rs.getInt("ID"));
student.setName(rs.getString("name"));
student.setStudy_id(rs.getInt("study_id"));
student.setQq(rs.getInt("qq"));
return student;
}
impl
public class StudentDAOImpl extends JdbcDaoSupport implements StudentDAO
{
public void add(Student student)
{
String sql = "insert into student(id,name,study_id,qq) values(?,?,?,?)";
this.getJdbcTemplate().update(sql, student.getId(), student.getName(),
student.getStudy_id(), student.getQq());
}
public void update(Student student)
{
String sql = "update student set name=?,study_id=?,qq=? where id=?";
this.getJdbcTemplate().update(sql, student.getName(),
student.getStudy_id(), student.getQq(), student.getId());
test
最后是反应到数据库上
然后是junit测试,和log4j很方便就自动生成了
明日计划的事情:
1;springjdbc还需要继续学习,感觉还是很模糊,不够清晰流程
2;可以换个口味,进行一下mybatis的学习
遇到的问题及解决方法:
问题的话就太多了。。。。。。。。。代码报错,配置文件报错,日志输出报错,方法报错。。。
主要是自己代码概念流程原理没有理解,仅仅是跑代码的话,很容易就出错,大到一个类,小到一个标点。。。。还好有junit慢慢测,还有alt+enter自动弥补。。。总之,问题解决了,但是。。。没理解。。。。继续学习吧。。。
收获:
1;template的整体框架暂时有了眉目吧,自己再学学,争取今天搞明白
2;对junit和log4j这俩工具类有了进一步的认识学习,很好
评论