发表于: 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测试,但不太会运用;而且先写测试,再写接口,再写实现类的流程对我来说还很困难。我现在能把测试自己敲出来就谢天谢地了:(


返回列表 返回列表
评论

    分享到