发表于: 2017-07-08 16:43:58
4 1264
今天做的事:
了解spring框架,学会配置文件bean.xml的用途
代码就不贴了,比较基础。
Spring 是通过配置beans.xml 来对类和接口进行管理
配置bean里的映射,property标签内的ref是关联bean用的,name对应bean里的变量名,这个变量就不需要我们在程序中通过new来新建对象了;而是用新的方法:通过新建Application对象app,然后通过ClassPathXmlApplicationContext获取beans.xml信息,再通过刚刚创建的Application对象app新建bean变量名对用的对象。
简单的说,就是对象新建的管理交给了beans.xml配置文件,我们就不用考虑新建对象的问题了(理解的对么?)
具体的操作就是:
一 配置beans.xml并删除代码里原本用来管理接口实现的代码
二 改写调用的方法 ClassPathXmlApplicationContext("xmlProfile").getBean("beanName");
好处是:
一 程序的扩展性变强,只需要通过配置文件便可以进行管理,例如修改接口的实现方式变得非常简单。
二 程序的可阅读性提高,不需要进入代码层面进行阅读接口实现的方式,只需要在配置文件中查看即可。
接下来完成jdbcTemplate实现增删查改。(貌似jdbcTemplate实现增删查改是用到spring框架的)
今天在网上找了一天的JDBCTemplate教程,但是还没有找到一个,我能根据教程完整实现的,所以JDBCTemplate实现增删查改还是未完成,明天需要继续跟进了,而且涉及到了spring框架的知识,尤其是bean.xml配置文件等。
按着教程打出来的代码,运行起来有很多时候会报错。我把代码贴出来,师兄帮我看一下。
项目结构
其中
User.java
package com.jdbct;
/**
* Created by Administrator on 2017/07/08.
*/
public class User {
private Integer id;
private String name;
public User(){}
public User(Integer id,String name){
this.id = id;
this.name = name;
}
public User(String name){
this.name = name;
}
public int getId(){return id;}
public void setId(Integer id){
this.id=id;
}
public String getName(){return name;}
public void setName(String name){
this.name=name;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
UserDao.java
package com.jdbct.dao;
import com.jdbct.User;
import java.util.List;
/**
* Created by Administrator on 2017/07/08.
*/
public interface UserDao {
public void insertUser(User user);
public void deleteById(int id);
public User selectById(int id);
public void updateUser(User user);
public List<User> queryUsers();
}
UserDaoImpl.java
import javax.sql.DataSource;
import java.util.List;
/**
* Created by Administrator on 2017/07/08.
*/
public class UserDaoImpl implements UserDao {
private JdbcTemplate jdbcTemplate;
//这个方法没有用到
public void setDataSource(DataSource ds){
this.jdbcTemplate = new JdbcTemplate(ds);
}
public void insertUser(User user){
String sql = "insert into user(id,name) values(null,?)";
jdbcTemplate.update(sql,new Object[]{user.getName()});
}
public void deleteById(int id){
String sql = "delete from user where id=?";
jdbcTemplate.update(sql,new Object[]{id});
}
@SuppressWarnings("unchecked")
public User selectById(int id) {
String sql = "select id,name from user where id=?";
List<User> user =(List<User>) jdbcTemplate.query(sql,new Object[]{id},new UserRowMapper());
User u = null;
if(user.size()>0){
u = user.get(0);
}
return u;
}
@SuppressWarnings("unchecked")
public List<User> queryUsers(){
List<User> users = (List<User>) jdbcTemplate.query("select * from user",new UserRowMapper());
return users;
}
public void updateUser(User user) {
jdbcTemplate.update("update user set name = ? where id = ?",new Object[]{user.getName(),user.getId()});
}
}
UserRowMapper.java
package com.jdbct.dao;
import com.jdbct.User;
import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* Created by Administrator on 2017/07/08.
*/
public class UserRowMapper implements RowMapper {
public Object mapRow(ResultSet rs, int index) throws SQLException {
User user = new User(rs.getInt("id"),rs.getString("name"));
return user;
}
}
beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!--数据库驱动-->
<property name="driverClass" value="${DriverClass}"/>
<!--数据库连接的URL-->
<property name="jdbcUrl" value="${jbdcUrl}"/>
<!--数据库连接的用户名-->
<property name="user" value="${user}"/>
<!--数据库连接的密码-->
<property name="password" value="${password}"/>
</bean>
<bean id="jdbcTemplate"
class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource"><ref bean="dataSource"/></property>
</bean>
<bean id="userDAO" class="com.jdbct.dao.UserDaoImpl">
<!--这里不注解会有一个报错——cannot resolve property 'jdbcTemplate';spring XML model validation
<property name="jdbcTemplate">
<ref bean="jdbcTemplate" />
</property>
-->
</bean>
</beans>
jb.properties
DiverClass=com.mysql.jdbc.Driver
jdbcUrl=jdbc\:mysql\://localhost\:3306/mybatis?useUnicode\=true&characterEncoding\=UTF-8
user=root
password=yubotao9527
UserRowMapper.java
import com.jdbct.User;
import com.jdbct.dao.UserDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* Created by Administrator on 2017/07/08.
*/
public class UserDaoImplTest {
public static void main(String[] args){
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
UserDao user = (UserDao)ctx.getBean("userDAO" );
// UserDao user = new UserDaoImpl();
user.insertUser(new User("yaod"));
User u1 = user.selectById(1);
System.out.println(u1);
u1.setName("hehe");
user.updateUser(u1);
u1 = user.selectById(1);
System.out.println(u1);
user.deleteById(1);
u1 = user.selectById(1);
System.out.println(u1);
}
}
然后这样运行,报错如下
明天计划:继续jdbcTemplate的学习;继续学习spring的相关知识,尤其是bean.xml文件配置等,其他的暂时不知道,明天继续了解,用到啥学啥。
遇到问题:主要就是JDBCTemplate实现增删查改未完成,教程找不到合适的。
收获:了解一些spring的知识,一些关于bean.xml文件配置的知识,一些JDBCTemplate的知识,但还需要继续跟进。
最后回答老大问题环节:
1.怎么查找资料
答:一般情况是需要学啥,就去百度关键字,然后看博客,教程;遇到一些名词,方法,对象,类什么的没见过的,也是百度,先看百度百科的词条,理解不了,继续看博客,教程啥的。
2.定位问题
答:这个应该是比较欠缺的能力了,不然不至于学东西这么费劲了;一般试错,报错了,能看懂就照着改,看不懂就贴错误去百度,但有很多时候查也查不到,就要问师兄,但我有时候又不太想问,总想自己找到解决办法,很浪费时间。理解能力和学习能力的问题就没办法定位了吧:)
3.解决问题
答:百度搜,找有没有和我犯同样/相似错误的,有就可以照抄:)(是借鉴,对);如果实在找不到,肯定就要问人了,但是我对这个时间尺度把控的不好,到底卡住多长时间就应该马上问人了?
4.怎样重构代码
答:萌新,还不懂重构代码;应该和重载不是一回事吧,括弧笑。
ps:是不是更新以前写的粗鄙代码啊?
5.怎么选择框架
答:这是大佬思考的问题,我这个萌新现在只知道spring框架,还是昨天了解的:)
6.怎么测试
答:以前写简单的小代码,都是用main主函数测试,来了这两天,学会了junit测试,但不太会运用;而且先写测试,再写接口,再写实现类的流程对我来说还很困难。我现在能把测试自己敲出来就谢天谢地了:(
评论