搜尋

首頁  >  問答  >  主體

java - mybatis用户登录,Dao层如何传入多个参数?

黄舟黄舟2767 天前516

全部回覆(1)我來回復

  • 黄舟

    黄舟2017-04-18 10:39:04

    有兩種常見的方法:

    方法一

    定義一個專門傳遞參數的Bean,並提供Setter/Getter方法,這種方法顯然太繁瑣。
    不過可以簡化一下,將多個參數放入map,将map傳入即可。

    方法二

    可以在mapper接口定义的方法入参里,使用注解org.apache.ibatis.annotations.Param標記參數名。如:

    public interface UserMapper{
        User login(@Param("name")String name,@Param("password")String password);
    }

    之後,在xml中使用對應的名字映射即可:

    <select id="login"    resultMap="UserResultMap">
        select col1,col2,col3
        from tal_name
        where user_name=#{name} and pwd=#{password}
    </select>

    要使用方法二的話,你目前的方式是不行的。
    因為你是使用sqlSession.selectOne(queryId)sqlSession.selectOne(queryId,paramObj)的方來呼叫的。 sqlSession.selectOne(queryId)sqlSession.selectOne(queryId,paramObj)的方来调用的。
    要使用方法二,你得先用sqlSession.getMapper(UserMapper.class)拿到定义的接口(DAO),拿到接口后,传递参数就相对自由了,因为接口里的方法定义就是常规的java方法定义。在定义的接口方法里就可以使用@Param要使用方法二,你得先用sqlSession.getMapper(UserMapper.class)拿到定義的介面(DAO),拿到介面後,傳遞參數就相對自由了,因為介面裡的方法定義就是常規的java方法定義。在定義的介面方法裡就可以使用@Param註解來標記參數了。大致範例如下:

    package cn.xxx.dao;
    public interface UserMapper{
        User login(@Param("name")String name,@Param("password")String password);
    }
    <?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="cn.xxx.dao.UserMapper">
        <select id="login"    resultMap="UserResultMap">
            select col1,col2,col3
            from tal_name
            where user_name=#{name} and pwd=#{password}
        </select>
    </mapper>

    此處應注意:

    • 自訂DAO介面的全類別名稱cn.xxx.dao.UserMapper應該和 中的namespace屬性相對應。 DAO接口的全类名cn.xxx.dao.UserMapper应该和<mapper namespace="cn.xxx.dao.UserMapper">中的namespace属性相对应。
      同时,namespace的值(cn.xxx.dao.UserMapper)和selectid属性值(login)连起来其实就是你使用的sqlSession.selectOne(queryId)中用来标记查询的queryId同時,namespace的值(cn.xxx.dao.UserMapper)和selectid屬性值(login)連起來其實就是你使用的sqlSession.selectOne(queryId)中用來標記查詢的queryId了。

    • 如果是maven工程,你应该将xxxMapper.xml置于资源路径(src/main/resources)下而不是源代码路径(src/main/java),否则在运行时源代码路径下的xml文件是找不到的。

    另外有點建議就是:目測你用Spring来管理Bean的,鉴于此,还有另一种管理SqlSessionFactory的方式,可以不用直接在DAO里显示地注入SqlSessionFactory。此处是我以前从别人那里fock过来的一个SSM整合的範例:https://github.com/hylexus/be...

    回覆
    0
  • 取消回覆