发表于: 2016-11-03 11:35:55
2 2099
今天完成的事情:
接11-1的继续
1)新建spring-myBatis.xml文件,用于将myBatis配置文件整合到spring中,同时完成对dao对象的创建和管理
①配置MapperScannerConfigurer,传入sqlSessionFactory,指定扫描dao包(底层应该是利用sqlSessionFactory创建sqlSession,再用sqlSession的getMapper方法创建dao的实体对象),此处出了两个报错
nested exception is java.lang.IllegalStateException: Cannot convert value of type
[org.apache.ibatis.session.defaults.DefaultSqlSessionFactory] to required type [java.lang.String]
for property 'sqlSessionFactoryBeanName': no matching editors or conversion strategy found
原因是MapperScannerConfigurer中sqlSessionFactory的设置是用name value,不是name ref
Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean
named 'studentDao' is defined
原因是扫描dao包路径错了,写成model的包去了
②配置SqlSessionFactoryBean,传入dataSource对象,传入sql语句文件
③配置BasicDataSource,传入相应的连接数据库参数
其实这里没什么好讲的,只是自己写一下捋一遍思路,让流程更清晰一点
2)加入service接口,service实现类,再往sql语句文件中加入增删改的语句,同时更新到dao/service中
加update测试的时候,有个很气的错误,浪费很多时间
### Error updating database. Cause: java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正确结束
原语句是这样的
update it_students set name=#{name},QQ=#{QQ},study_type=#{study_type},
graduated=#{graduated},dailyReport_url=#{dailyReport_url},comments=#{comments}
update_at=sysdate where ID=#{ID}
检查半天最后居然发现是一个逗号漏了
加delete测试的时候,发现删除没有报错,再去数据库查询,却没删掉,不知道什么原因,在oracle提供的sqldeveloper中一下就删掉了。
没找到原因,不过当时想如果myBatis执行sql有返回值就好了,就去百度,有说给int值的有说给boolean的,直接看源码吧,去看sqlSession
的源码,跟jdbc的返回值差不多,自己去试,增删改都返回了1并且成功了,应该跟jdbc一样就是返回执行条数吧
3)配置springMVC,写rest风格的接口,测试了一下,404,貌似根本没有通过dispatcherServlet,改url-pattern好久还没搞定。。。有同门帮忙瞄一眼吗
controller配置
@Controller
@RequestMapping(value="/student")
public class restService {
@Resource
private StudentService studentService;
//localhost:8088/myBatis6/student/restgetstudent/1
@RequestMapping(value="/restgetstudent/{id}",method=RequestMethod.GET)
public @ResponseBody Student getStudent(@PathVariable("id") int id){
Student s=studentService.getStudent(id);
return s;
}
}
web.xml配置
<!-- 配置hiddenHttpMethodFilter,可以把post请求转换为put delete -->
<filter>
<filter-name>hiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>hiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>springmvc_rest</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springMVC.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc_rest</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
明天计划的事情:
如果能找到404原因,收尾任务2
遇到的问题:
还有个tomcat的报错,Cannot acquire J2EEFlexProjDeployable object for module myBatis [EXPLODED on Tomcat v7.0 Server
(migrated)],后来发现是因为部署在tomcat中的项目被删除了,导致无法启动,remove了就可以了
收获:
第一次通过看源码让自己的疑惑得到了解决
发现自己还是太粗心。。。好多字母打错造成异常
评论