发表于: 2016-11-03 11:35:55

2 2100


今天完成的事情:

接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了就可以了

收获:

第一次通过看源码让自己的疑惑得到了解决

发现自己还是太粗心。。。好多字母打错造成异常


返回列表 返回列表
评论

    分享到