黄舟2017-04-18 10:39:04
一般的な方法は 2 つあります:
パラメータを渡すためだけに Bean を定義し、Setter/Getter メソッドを提供します。この方法は明らかに面倒です。
ただし、複数のパラメータを map
に入れて map
に渡すこともできます。 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.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
应该和<mapper namespace="cn.xxx.dao.UserMapper">
中的namespace
属性相对应。
同时,namespace
的值(cn.xxx.dao.UserMapper)和select
的id
属性值(login)连起来其实就是你使用的sqlSession.selectOne(queryId)
中用来标记查询的queryId
了。
如果是maven
工程,你应该将xxxMapper.xml
置于资源路径(src/main/resources
)下而不是源代码路径(src/main/java
),否则在运行时源代码路径下的xml文件
是找不到的。
另外有点建议就是:目测你用Spring
来管理Bean
的,鉴于此,还有另一种管理SqlSessionFactory
的方式,可以不用直接在DAO
里显示地注入SqlSessionFactory
。此处是我以前从别人那里fock
过来的一个SSM
マッパーインターフェイス
で定義されたメソッドにパラメータを入力し、アノテーションorg.apache.ibatis.annotations.Param
を使用してパラメータ名をマークできます。例:🎜
リーリー
🎜その後は、XML で対応する名前マッピングを使用するだけです: 🎜
リーリー
🎜注意🎜
🎜方法 2 を使用する場合、現在の方法は機能しません。 🎜sqlSession.selectOne(queryId)
または sqlSession.selectOne(queryId,paramObj)
を使用して呼び出しているためです。 🎜方法 2 を使用するには、まず sqlSession.getMapper(UserMapper.class)
を使用して、定義されたインターフェイス (DAO
) を取得した後、それに応じてパラメーターを渡す必要があります。インターフェイス内のメソッド定義は通常の Java メソッド定義であるため、無料です。 @Param
アノテーションを使用して、定義されたインターフェイス メソッド内のパラメータをマークできます。大まかな例は次のとおりです: 🎜
リーリー
リーリー
🎜ここで注意してください: 🎜
DAO インターフェイス
cn.xxx.dao.UserMapper
の完全なクラス名は、<mapper namespace="cn. xxx.dao。UserMapper">
の namespace
属性に対応します。 🎜同時に、namespace
(cn.xxx.dao.UserMapper) の値と select
id 属性 (login) の値> 実際はあなたです。クエリをマークするために使用される sqlSession.selectOne(queryId)
は queryId
です。 🎜maven
プロジェクトの場合は、代わりに xxxMapper.xml
をリソース パス (src/main/resources
) の下に配置する必要があります。ソース コード パス (src/main/java
)。それ以外の場合、ランタイム ソース コード パス内の xml ファイル
が見つかりません。 🎜Spring
を使用して Bean
を管理していることを視覚的に確認することです。これを考慮すると、SqlSessionFactory
を管理する別の方法があります。 SqlSessionFactory
を DAO
に直接明示的に挿入する必要はありません。これは、以前に fock
から得た SSM
統合の例です: https://github.com/hylexus/be...🎜