发表于: 2016-11-09 00:42:37
2 2195
一遇到的问题
搞了3个小时没有解决。一点啦回去睡觉啦 呜呜 失败啦
public class testStudent {
/***
* 获得MyBatis SqlSessionFactory
* SqlSessionFactory 负责创建SqlSession ,一旦创建成功,就可以用SqlSession实例来执行映射语句
* @return
*/
public static SqlSessionFactory getSqlSessionFactory(){
SqlSessionFactory sessionFactory=null;
String resource="com/wangsx/ITtask1/Configuration.xml";
try {
sessionFactory=new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resource));
} catch (IOException e) {
e.printStackTrace();
}
return sessionFactory;
}
@Test
public void getStudentById() {
SqlSession session = getSqlSessionFactory().openSession();
try{
StudentOperation studentOperation = session.getMapper(StudentOperation.class);
Student student = studentOperation.selectStudentById(1);
System.out.println(student.getId());
}
catch (Exception e) {
e.printStackTrace();
} finally{
session.close();
}
}
@Test
public void addStudent() {
Student student = new Student();
student.setAge(11);
student.setCreateAt(new Date());
student.setName("wangjing1");
student.setProfession("z");
student.setUpdateAt(new Date());
SqlSession session = getSqlSessionFactory().openSession();
try{
//参数:映射文件的命名空间+sql语句id
StudentOperation studentOperation = session.getMapper(StudentOperation.class);
studentOperation.addStudent(student);
session.commit();
System.out.println(student.getName());
}
catch (Exception e) {
e.printStackTrace();
} finally{
session.close();
}
}
}
报错:上述addStudent能添加记录,而getStudentById报下面的错误:
java.lang.NullPointerException
at com.wangsx.ITtask1.testStudent.getStudentById(testStudent.java:34)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
求解......
此问题已解决。花了将近六个小时的时间。哎 丢人啊。
原因:我的Student类定义的属性与数据库字段名字不同 而我的StudentMapper中返回类型为resultType而不是用的resultMap
收获:感谢修真院的小兄弟帮我看代码,第一次真正搞MyBatis。
小兄弟提醒我一下:
1.了解原始开发 代理开发 注解开发
2.任务二用注解开发
3.今天没有时间啦,马会有其它的事情。
今天把任务一整理完,争取放到Git上面,明天全面开发任务二
评论