2017-05-11 1 views
0

J'essaie de m'habituer au projet Mybatis in Spring.Erreurs lors de l'utilisation de Mybatis dans le projet Spring

Je définis tout le fichier XML pour créer le bean de datasource, sqlsession, sqlsessiontemplate et il ne génère jamais d'erreurs.

Cette fois-ci, j'ai essayé d'insérer des informations de base dans la table utilisateur qui ne contient que des colonnes identifiant et mot de passe.

Voici donc mon code ci-dessous.

AbstactDao.class avec l'objet Sqlsessiontemplate et certaines méthodes associées.

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); 
    } 
} 

Classe d'utilisateur. Les informations contenues dans cette classe serait inséré dans la base de données

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> 

Ce code est pour l'exécution de la commande d'insertion dans la méthode principale.

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

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

Message d'erreur.

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

avez-vous référé à ce [exemple] (http://www.codingpedia.org/ama/spring-mybatis-integration-example/). Supposons qu'il y ait un problème de configuration. –

Répondre

0

instanciation AbstractDAO dao = new AbstractDAO(); de sorte que le SqlSessionTemplate sqlSession est jamais affecté. À la place, il doit être marqué @Repository et vous devriez l'obtenir par @Autowired plutôt que de créer des instances manuellement.

BTW: classes abstraites à ne pas instancier. Au lieu de cela, définissez le type T générique et créez différentes instances dao pour chaque entité, par ex. UserDao étend AbstractDao et utilise le UserDao pour travailler avec l'utilisateur.