发表于: 2017-04-10 23:15:09
3 1238
今天完成的任务:
拆解springMCV.准备在自己建的项目mybatis的基础上,建成自己的springMVC,实践中却遇到很多的问题,看懂和会用有着很大的区别。下午莎莎师兄的“位面”指导,让人叹叹!本来以为自己涉猎广泛,但实际应用中,师兄的指导思考过程让人有“胜读十年书”之感,好好学习,天天向上。
下面是一个集成了mybatis的增删改查,由最初的JDBC下的增删改查演化而来.
package com.ptteng.test;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.util.List;
import com.ptteng.domain.Student;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class AppTest {
public static void main(String[] args) throws IOException {
String resource = "config.xml";
InputStream is = AppTest.class.getClassLoader().getResourceAsStream(resource);
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = sessionFactory.openSession();
// //单查
// String statement = "com.ptteng.mapping.StudentMapper.getStudent";
// Student student = session.selectOne(statement, 3);
// System.out.println(student);
//
// // 增
// String statement1 = "addStudent";
//
// Student student1 = new Student();
// String name = "大智若3愚";
// student1.setName(name);
// student1.setAge(23);
// int retResult=session.insert(statement1,student1);
// session.commit();
// session.close();
// System.out.println(retResult);
// System.out.println(student1.toString());
//
//
// // 删除
// String statement2="deleteStudent";
// Student student2 = session.selectOne(statement2,5);
// System.out.println(student2);
//
//查全部
String statement3="getAllStudent";
Student student3= new Student();
student3.getId();
System.out.println(student3);
前面的都已经实现,最后查全部的时候遇到问题,运行后结果为;
师兄在旁边指点,经过分析原因是getAllStudent并没有被执行,而是直接获得对象student3初始值,因为初始化后,整数型的初始值为零,字符串类型的初始值为NULL,虽然在这没有赋予,实际jvm已经给它了一个默认值.
对Java理解不深,自己敲代码的时候,虽然程序没有报错,不分析,仅得出一的结果就蒙过去了.今天因为回来要扩展重建原来的mybatis增删改查项目为springMVC项目才发现.
接下来,找原因.
初步分析,在这里主要是要执行"getAllStudent"中包含的sql语句,从mysql获得所有数据结果,问题的关键在于,得到的结果无法通过单个id值映射出来,内容有int型,varchar型,并且是一整个表的数据,所以需要用到lList泛型,修改如下:
String statement3="getAllStudent";
/*莎莎师兄教了一个技巧,非常有用,虽然我不知道session对象可以调用什么方法,但是可以通过"."的提示,选择相关的方 法,其中包含很多信息,给编程带来了相当的方便.*/
List<Student> studentList=session.selectList(statement3);
这样成功的执行了查询语句,获得了所有的mysql表中的数据.
接下来要测试是否成功的获得了数据,将得到的结果输出在Console上来检验,但结果是一个表单,如何分行显示?
分析:分行显示每打印出一个id代表的相关信息,就需要换行,System.out.println() 需要按id分步执行,for循环可以让该方法逐个id打印,难以确定的是无法知道获得的数据表单大小,循环体的大小无法确定.师兄提醒还是用"."的方法查看studentList对象有什么可调用的方法来确定其大小.果然找到了size()这个方法,问题终于解决,遍历一次,分行打印出所有结果.
for( int i=1; i<studentList.size();i++)
{System.out.println(studentList.get(i-1));}
问题解决,留下一个小BUG,name为毛是?
明天的计划:
今天任务进度拖延了,明天赶上进度,敲出自己的springMVC。
遇到的问题:
这次辅导,受到了"段位差距"的刺激,本以为已经相当理解了整个建立springMVC项目的逻辑和流程,只是一个重建的过程,没想到连mybatis下的增删改查都掉到了坑里,以前只重逻辑,没有关心具体输出的结果和程序在执行过程中的细节步骤,不报错,有结果就行,写代码太少.基本功不扎实,就算脑子里有很多想法和知识,也联系不起来或者整合,让计算机实现自己的想法,现在发现的早,以后开始做项目了,积累的问题可就积重难返了.一定要重视实践,细节有大坑,一定先先填平,多敲代码,多注意测试反馈.
收获:
谢谢,莎莎师兄!三人行,必有我师!加油!
评论