Übergeben mehrerer Argumente in eine Auswahl, ohne ein komplexes Objekt zu verwenden
Frage
Ich versuche einzugeben startSequenceId
, stopSequenceId
, orderNumber
In die SQL -Karte möchte ich jedoch kein getipptes Objekt verwenden, dh parameterType="com.abc.Order"
, Kann ich das tun?
<select id="getSequenceIdByOrderNumber" parameterType="?" resultType="int">
select *
from log
where seq_id
between #{startSequenceId} and #{stopSequenceId}
and order_no = #{orderNumber}
and rownum = 1
</select>
Lösung
@Chin Ich werde das posten, was ich sowieso mit einem einfachen Beispiel getippt habe, obwohl Sie gefunden haben, wonach Sie suchen. Mein Beispiel mit ibatis 2.3.4
<select id="retrieveTestXXX" parameterClass="java.util.Map" resultClass="java.lang.Integer">
SELECT
example_table.id
FROM example_table
WHERE example_table.xx_id = #testId# AND example_table.xx_id = #test2Id#
</select>
Hoffe das hilft.
Andere Tipps
Sie können die integrierte ParameterType 'Map' zB verwenden
Map<String, Object> parms = new HashMap<String, Object>();
parms.put("name", "abc");
parms.put("phone", "123");
parms.put("email", "123@email.com");
List<Contact> list = myBatis.selectList("getContacts",parms);
<!-- in xml mapper -->
<select id="getContacts" parameterType="map" resultMap="Contact">
SELECT * FROM CONTACT
WHERE CONTACT_NAME = ${name}
AND CONTACT_PHONE = ${phone}
AND CONTACT_MAIl = ${email}
</select>
In MyBatis 3 können Sie verwenden @Param
Annotation in Ihrer Mapper -Klasse (Schnittstelle) Methode:
public getSequenceIdByOrderNumber(@Param("seqId") int sequenceId,@Param("orderId") int orderNo);
Dann können Sie verwenden #{seqId}
, #{orderId}
im SQL ohne Parametertyp -Attribut.
Ich kann nicht kommentieren,
Fand die Antwort, danke.
http://code.google.com/p/mybatis/wiki/howtoselectmultipleparams
Dieser Link ist gebrochen, derzeit korrekt ist https://github.com/mybatis/mybatis-3/wiki/faq#how-do-i-use-smultiple-parameters-in-a-mapper
Kopieren Sie + aus diesem Wiki einfügen
Java Reflection bietet keine Möglichkeit, den Namen eines Methodenparameters zu kennen. MyBatis nennt sie daher standardmäßig wie: Param1, Param2 ... Wenn Sie ihnen einen Namen geben möchten, verwenden Sie die @Param -Annotation auf diese Weise:
import org.apache.ibatis.annotations.Param;
public interface UserMapper {
User selectUser(@Param("username") String username, @Param("hashedPassword") String hashedPassword);
}
Jetzt können Sie sie in Ihrem XML verwenden, wie folgt:
<select id=”selectUser” resultType=”User”>
select id, username, hashedPassword
from some_table
where username = #{username}
and hashedPassword = #{hashedPassword}
</select>
tl; dr
Wenn Sie die Methode in Ihrer Schnittstelle anstelle einer Standard -Java -Struktur deklarieren
Type methodName (
ParamType1 paramName1,
ParamType2 paramName2,
… ); (this is interface so no method body)
Verwenden (fügen Sie @Param hinzu)
Type methodName (
@Param("name1 available in xml") ParamType1 paramName1,
@Param("name2 available in xml") ParamType2 paramName2,
…); (this is still interface so no method body)
Fand die Antwort, danke.
http://code.google.com/p/mybatis/wiki/howtoselectmultipleparams