マッパーは、2つのマッピングスキームをマッパー:
SQL文のマッピングを定義するには、最初にどこそれらを見つけるためにMyBatisのを伝える必要があります。最良の方法は、どこマップファイルマッパーマッパーを見つけるためにMyBatisのを伝えることですので、Javaは、この点で優れた方法を提供していません。一つは直接マッパー.xmlファイルに対応する指定されたマッピング方式は、2つを提供するマッパーマッパーは、2つのインターフェースは、関連マッパー.xmlファイルで指定されています。例えば:
<mappers>
<!--指定mapper.xml的相对路径-->
<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
<!--指定mapper.xml的绝对路径-->
<mapper url="file:///var/mappers/AuthorMapper.xml"/>
</mappers>
<mappers>
<!--指定相关联的接口的全限定路径-->
<mapper class="org.mybatis.builder.AuthorMapper"/>
<!--指定包下所有相关联的接口-->
<package name="org.mybatis.builder"/>
</mappers>
すべての前述の第1の実施形態は、従来のパッケージのためのDAOの第一の実施形態を用いています。ここで第二の選択肢は、第二の選択肢は、それは多くの利点、最も顕著な利点を持っているので、MyBatisのソリューションをお勧めしているものです。
- SQLコマンドは、ダイレクトコールインタフェースのメソッドを呼び出され、内部プログラムに対応した自動関連mapper.xml SQLコマンド・ファイルは、とても長い名前空間を書き込みません。
- コールがインターフェース方法を宣言されている第2のシナリオながらためのみ第一の実施の形態で渡されるパラメータ、コールSQLコマンド、複数のパラメータは、オブジェクトまたはパッケージのどのセットで通過しなければならない場合、それはパラメータの数に渡すことができる方法であるからです。
しかし、2番目のシナリオは、次の2つの要件があります。
- インタフェースとマッピングファイルは、同じパッケージになければなりません。
- インタフェースとマッピングファイルは、ファイル名は同じでなければなりませんファイル拡張子を削除します。
動的プロキシDAO開発のための第2のオプションは、MyBatisの動的プロキシインターフェイスとのマッピングファイルのプロトコルは、いくつかの要件が推奨されます。
- メソッド名は、同一のSQL IDに対応するインターフェイスとのマッピングファイルで宣言されなければなりません。
- この方法は、インタフェースパラメータおよびSQLのParameterTypeと一致する対応するマッピングファイルで宣言されなければなりません。
- インターフェースメソッドの戻り値に宣言は、SQL resultTypeと、対応するマッピング・ファイルと一致しなければなりません。
例:
1、MYSQL、適切なWebプロジェクト、エンティティクラスと新しいパッケージの下のsrcディレクトリにあるテーブルの構成:
ここで、前のブログパッケージの下の花のテーブルの、パッケージ名「cn.jingpengchong.pojo」と花。 Javaの
2は、srcディレクトリに、ファイルパッケージとmapper.xmlを作成します。
パッケージ名「cn.jingpengchong.mapper」を、ファイル「FlowerMapper.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="cn.jingpengchong.mapper.FlowerMapper">
<!-- 根据价格和产地查找花 -->
<select id="selByPriPro" resultType="flower">
<!-- 用#{0}/#{param1}接收第一个参数,用#{1}/#{param2}接收第一个参数 -->
select * from flower where price = #{0} and production = #{1}
</select>
</mapper>
3、srcディレクトリに、XMLマッピング構成ファイルを作成します。
ファイル「mybatis.xml」ファイルを次のように:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--给Flower类设置别名,这样在声明该类类型时直接写“Flower”或“flower”即可-->
<typeAliases>
<package name="cn.jingpengchong.pojo"/>
</typeAliases>
<environments default="default">
<environment id="default">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/ssm"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--将该包下文件名相同的接口的方法和xml文件的sql命令一一关联起来-->
<package name="cn.jingpengchong.mapper"/>
</mappers>
</configuration>
4は、ファイルはパッケージmapper.xml新しいインタフェースの下に配置され、同じ対応mapper.xmlを持つファイル名にインタフェース名:
新しいインターフェイスの下に「FlowerMapper.java」「cn.jingpengchong.mapper」パッケージ:
package cn.jingpengchong.mapper;
import java.util.List;
import cn.jingpengchong.pojo.Flower;
public interface FlowerMapper {
/**
* 根据价格和产地查询花
* selByPriPro:方法名要与对应xml文件中对应方法的id相同
* pri:价格price
* pro:产地production
*/
List<Flower> selByPriPro(double pri, String pro);
}
5、新しいテストクラスは:
ここでは、「cn.jingpengchong.test」パッケージに「Test.java」ファイルを作成しました:
package cn.jingpengchong.test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import cn.jingpengchong.mapper.FlowerMapper;
import cn.jingpengchong.pojo.Flower;
public class Test {
public static void main(String[] args) throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = factory.openSession();
FlowerMapper mapper = session.getMapper(FlowerMapper.class);
List<Flower> list = mapper.selByPriPro(4, "南美阿根廷");
for (Flower flower : list) {
System.out.println(flower);
}
}
}
結果は以下の通りであります:
附属書:パラメータmapper.xmlのSQLコマンドファイルを受信
1、#{0}、{#1}、{2}#... ...パラメータ1,2,3取得する;
2、PARAM1 {#}#{PARAM2を}、...}#{Param3:と1,2,3 ...取得パラメータに;
3、なぜならマップ要素またはオブジェクトにおけるプロパティ値のセットを取得することに加えて、$ {$#{} {}}、置換されていない以上の内容は、SQLであろう単純な文字列の連結として、
4、あなたは以下のメソッドのパラメータを取得したい場合は、地図に設定「@Param()」カプセル化注釈パラメータを使用することができます。
<select id="selByPriPro" resultType="flower">
select * from flower where price = #{price} and production = #{production}
</select>
インタフェースで宣言されたメソッドは、ノートを、対応する追加する必要があります。
List<Flower> selByPriPro(@Param("price") double pri, @Param("production") String pro);
あなたはテストクラスがまだ正しい実行が完了している、結果は次の通りです:
このようにパラメータキーマップのコレクション渡さmapper.xmlファイルにパラメータ値としてパッケージ裏面として渡された注釈ですが、たとえそうであっても、 :$#{} {}にまだ間違って行く
代わりに{} $の理由のあなたは、ログ/二重引用符が欠落している中で、単一の文字列パラメータを受信したときに見ることができ、#で開発中です{}!