发表于: 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
评论