发表于: 2017-08-19 23:52:28

1 1033


今天完成的事

完成JDBCTempalte的操作,本来想着上午就能完成,结果发现每走一步都有一个坎

但是在和师兄的共同努力下,完成了一个和网上不一样的单元测试 下面会把新增的方法语句着色

鸣谢:郑州JAVA大佬  张帆

1 目录结构

实现了Interface和impl分离

2.配置文件

圈红部分是IDEA利用jdbc.properties添加的,原来的在网上可以轻松找到,就不贴了

3.写实体类 

public class Hero {

    private int id;

    private String name;

    private int blood;

    private int defence;

//显性构造一个Hero类,本来系统会自己默认构造一个隐形的构造,但在JDBCtemplate对数据库操作中需要显性调用这个类所以自己构造

    public Hero() {

    }

    public int getId() {

        return id;

    }

    public void setId(int id) {

        this.id = id;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public int getBlood() {

        return id;

    }

    public void setBlood(int blood) {

        this.blood = blood;

    }

    public int getDefence() {

        return defence;

    }

    public void setDefence(int defence) {

        this.defence = defence;

    }

    public String toString() {

        return "id: " + id + "\nname: " + name + "\nblood: " + blood + "\ndefence: " + defence;

    }

    //对于应上面的类,进行赋值

    public Hero(String name, int blood, int defence) {

        this.name = name;

        this.blood = blood;

        this.defence = defence;

    }

}     

构造类Hero和赋值语句的用处主要是为了后面实现Update和Insert方法所建,后面会体现出来

4.写DAO   这里直接根据要使用的方法入参,比如 select  xx from hero where id=xx就直接入参(int  id)

5.编写Impl

public class HeroImpl implements HeroDAO {

    private JdbcTemplate template;

    public JdbcTemplate getTemplate() {

        return template;

    }

    public void setTemplate(JdbcTemplate template) {

        this.template = template;

    }

    public List<Hero> listALL() {

        String sql = "select * from hero";

        return (List<Hero>) template.query(sql, new BeanPropertyRowMapper(Hero.class));

    }

    public void add(Hero hero){

//在JDBCtemplate中insert和update方法很别,在Hero中单独构造的类就在这个方法用

        String sql = "insert into hero(name,blood,defence) values(?,?,?) ";

        template.update(sql, hero.getName(), hero.getBlood(), hero.getDefence());

    }

    public void update(int blood,int id){

        String sql = "update hero set blood=? where id = ?";

        template.update(sql,blood,id);

    }

    public void delete(int id){

        String sql ="delete from hero where id =?";

        template.update(sql,id);

    }

    public List<Hero>getHeroById(int id){

        String sql = "select * from hero where id = ?";

        return(List<Hero>)template.query(sql, new BeanPropertyRowMapper(Hero.class),id);

    }

}

接下来直接写单元测试

首先配置junit的JAR包,在pom中添加依赖

Insert

public class AddTest {

    ClassPathXmlApplicationContext appConetxt = new ClassPathXmlApplicationContext("applicationContext.xml");

    HeroDAO heroDAO = appConetxt.getBean(HeroDAO.class);

  Hero hero = new Hero("赵信",1000,50);  

//在这里创造一个hero对象供测试使用

    @Test

    public void add(){

       heroDAO.add(hero);

   }

}

update

public class UpdateTest {

    ClassPathXmlApplicationContext appConetxt = new ClassPathXmlApplicationContext("applicationContext.xml");

    HeroDAO heroDAO = appConetxt.getBean(HeroDAO.class);

   int blood =1000;

                 int id = 3;

//把id为3的对象中想要更改的数据直接赋值,

    @Test

    public void update() {

    heroDAO.update(blood,id);

    }

}

delete

public class DelteTest {

    ClassPathXmlApplicationContext appConetxt = new ClassPathXmlApplicationContext("applicationContext.xml");

    HeroDAO heroDAO = appConetxt.getBean(HeroDAO.class);

    int id= 5;

//直接指定删除ID为5的对象

  @Test

    public void delete(){

        heroDAO.delete(id);

    }

}

这里查找所有和查找单个放在一起了 ,有需要同学的自己分开

public class ListTest {

     ClassPathXmlApplicationContext appConetxt = new ClassPathXmlApplicationContext("applicationContext.xml");

       HeroDAO heroDAO = appConetxt.getBean(HeroDAO.class);

        int id = 9;

//查找所有对象并输出

    @Test

       public void ListAll() {

        List<Hero> heroList = heroDAO.listALL();

        System.out.println(heroList.toString());

    }

       //查找ID为9的对象,并输出

@Test

       public void getHeroById(){

        heroDAO.getHeroById(id);

        System.out.println(heroDAO.getHeroById(id));

               }

}

测试截图




Delete就不展示了。。。。最喜欢的几个英雄删哪个都不舍得,好吧其实是懒

明天的计划:

整理一下mybatis和JDBCtemplate,把小课堂Word先写一下

遇到的问题:

cannot be cast to java.util.List

java.lang.ClassCastException: POJO.Hero cannot be cast to java.util.List

java.lang.Exception: Method update should have no parameters

这两个报错决定让我和帮我解决问题的师兄不在跟随网上的资料走,就鼓捣出来了手动构造(不是系统自动构造隐性Hero)一个显性Hero类的方法,对容易报上面那3种错的update方法和insert方法很有效


收获:今天完成了JDBCtemplate,真正体会了程序员的心酸,明明思路很清晰,却做一步错一步,开始怀疑自己的思路是不是对的,一整天都在思考这些,弄完了之后才放松下来,这一天很充实


任务进度:任务一任务20

任务预计完成时间:2017-8-25

无延期风险

禅道地址:http://task.ptteng.com/zentao/project-task-276-unclosed.html





返回列表 返回列表
评论

    分享到