2017-05-11 15 views
0

SpringプロジェクトでMybatisに慣れようとしています。SpringプロジェクトでMybatisを使用するとエラーが発生する

すべてのxmlファイルをdatasource,sqlsessionsqlsessiontemplateというbeanを作成するように設定しました。エラーは発生しません。

今回は、idカラムとpasswordカラムだけを持つユーザテーブルにいくつかの基本情報を挿入しようとしました。

私のコードは以下のとおりです。

AbstactDao.classには、Sqlsessiontemplateオブジェクトといくつかの関連するメソッドがあります。

public class AbstractDAO { 
    protected Log log = LogFactory.getLog(AbstractDAO.class); 

    @Autowired 
    private SqlSessionTemplate sqlSession; 

    protected void printQueryId(String queryId) { 
     if(log.isDebugEnabled()){ 
      log.debug("\t QueryId \t: " + queryId); 
     } 
    } 

    public Object insert(String queryId, Object params){ 
     printQueryId(queryId); 
     return sqlSession.insert(queryId, params); 
    } 

    public Object update(String queryId, Object params){ 
     printQueryId(queryId); 
     return sqlSession.update(queryId, params); 
    } 

    public Object delete(String queryId, Object params){ 
     printQueryId(queryId); 
     return sqlSession.delete(queryId, params); 
    } 

    public Object selectOne(String queryId){ 
     printQueryId(queryId); 
     return sqlSession.selectOne(queryId); 
    } 

    public Object selectOne(String queryId, Object params){ 
     printQueryId(queryId); 
     return sqlSession.selectOne(queryId, params); 
    } 

    @SuppressWarnings("rawtypes") 
    public List selectList(String queryId){ 
     printQueryId(queryId); 
     return sqlSession.selectList(queryId); 
    } 

    @SuppressWarnings("rawtypes") 
    public List selectList(String queryId, Object params){ 
     printQueryId(queryId); 
     return sqlSession.selectList(queryId,params); 
    } 
} 

ユーザクラス。このクラスの情報がデータベース

public class User { 

private String id; 
private String pw; 

public String getId() { 
    return id; 
} 
public void setId(String id) { 
    this.id = id; 
} 
public String getPw() { 
    return pw; 
} 
public void setPw(String pw) { 
    this.pw = pw; 
} 

} 

に挿入されるmapper.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE mapper 
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 


    <mapper namespace='bbs'> 


    <insert id="insertuser" parameterType="com.min.test.User"> 
    insert into user (id,pw) values(#{id}, #{pw}) 
    </insert> 

    </mapper> 

このコードは、mainメソッドに挿入コマンドを実行するためのものです。

User user = new User(); 
    user.setId("zz"); 
    user.setPw("dkdkdk"); 

    AbstractDAO dao = new AbstractDAO(); 
    dao.insert("bbs.insertuser", user); 

エラーメッセージ。

Servlet.service() for servlet [appServlet] in context with path [/practice] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause 
java.lang.NullPointerException 
    at com.min.test.AbstractDAO.insert(AbstractDAO.java:31) 
    at com.min.test.HomeController.home(HomeController.java:42) 
    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.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213) 
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126) 
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578) 
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) 
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:624) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1115) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Unknown Source) 
+0

あなたは[example](http://www.codingpedia.org/ama/spring-mybatis-integration-example/)を参考にしていますか?構成に問題があるとします。 –

答えて

0

あなたはそうSqlSessionTemplate sqlSessionが割り当てられることはありませんAbstractDAO dao = new AbstractDAO();をインスタンス化します。

代わりに@Repositoryとマークし、インスタンスを手動で作成するのではなく@Autowiredで取得する必要があります。

BTW:インスタンス化されない抽象クラス。代わりにジェネリックT型を定義し、各エンティティに対して異なるdaoインスタンスを作成します。 UserDaoはAbstractDaoを拡張し、UserDaoを使用してUserと連携します。

関連する問題