学習のためのMyBatisの枠組み

MyBatisのフレームワーク
1.MyBatisフレームワークの紹介
オブジェクト(最大効果):分離SQL文とJavaコードは、別の層は、ダオMVCモード、永続化フレームワークです。
モードをビルドします。
1.設定は、グローバル・コンフィギュレーション・ファイルをMyBatisの:
。固定されたファイルのヘッダは、ルートタグは< 構成> </ 構成>。
B 。複数のタグのルートタグメモリ、< 設定> </ 設定>:印刷ログファイルの設定]タブ。
< TypeAliases> </ typeAliases>:エイリアスが使用してファイル<パッケージ>は</パッケージ>パッケージ全体で提供エイリアスを使用して、すべてのクラス、小文字の名前のクラス名は、< typeAlias> </ typeAlias>シングルを提供します別名クラス。
C 必要:< 環境> </ 環境>タグ環境、<複数存在してもよい環境> </ 環境>タグ、データベース接続が提供されます。
各タグの環境は、固定されたコンテンツが含まれています。
< トランザクションマネージャータイプ=「JDBC / MANAGFED」> </ のTransactionManager>トランザクション・マネージャ、前記型パラメータJDBC / MANAGFED二つの値管理対象は、任意の処理をせずにほぼ手段、容器のような、トランザクションのライフサイクルを管理:春とコンテキストJEEアプリケーションサーバ、接続はデフォルトではオフになります。
< データソースのタイプ=「POOLED / UNPOOLED / JNDI」> </ パラメータタイプは三つの値である請求データソース>データソース:POOLED:データベース接続プーリング、UNPOOLED:データベース接続プールを使用しない場合、JNDI:組み合わせて使用されるサーバー・コンテナ内のコンフィギュレーション・データの外部ソースは、JNDI参照を使用します。
各データソースタグの内容が実質的に固定されている:4 <ありプロパティ=「」=「」> </ プロパティ>値は名前たタグ:ドライバ、URL、ユーザ名、パスワード、有効に相当するが駆動データベース、データベースURL、データベースのユーザー名、パスワードデータベースを接続するJDBC使用し、4名は編集できません。前記値は、<の値の.propertiesプロファイルストアとすることができるプロパティ> </ プロパティ>プロファイルが導入され、その値は$ {}ドライバ方法を得るためです。
PS:<configuration></configuration>标签中的字标签都有固定的顺序,这是由xml文件开头的文件约束DTD文件决定的。而DTD文件可以通过idea设置为寻找本地DTD文件。
d.必备:<mappers></mappers>:用来连接mapper.xml文件从而在解析mybatis.xml文件时扫描mapper.xml文件并解析,其中可以通过两种方式扫描mapper.xml文件:1.<mapper resource=""></mapper>:扫描单个mapper.xml文件,resource值为mapper.xml文件的url。
PS:url是路径,路径的形式为:包路径/文件名.xml,使用“/”连接。
2.< package name=""></package>:扫描某个包下所有mapper.xml文件,name值为包的全限定名,如:com.javalq.mapper,使用“.”连接。
2.配置mapper.xml文件
a.固定的文件头,根标签为<mapper namespqce=""></mapper>,必须配置namespace值,当使用mapper动态代理时,namespace值必须为xml文件的全限定名,如:com.javalq.mapper.Mapper.xml,此时每个xml文件名必须与其对应的接口名一致。
PS:因为使用动态代理时,扫描xml文件时会根据xml文件名寻找对应的接口,并通过解析xml获得该接口的实现类对象。
 
b.在mapper标签下书写SQL语句,可以通过动态SQL语句标签动态拼接SQL语句。
SQL语句基本标签:<select id="" resultType="" parameterType></select>:选择语句标签,id值为动态代理中的方法名,resultType(SQL语句返回值类型)值若为基本数据类型可以不写,若为实体类对象则写实体类别名;若为实体类对象list集合同样则写集合元素类型,即实体类别名;若为实体类对象Map集合,则写Map的别名:map(mybatis中定义了一些java类的别名,除了基本数据类型为在前边加"_",基本为类名的全小写形式);parameterType(参数类型):传入的参数若为单个可以为基本数据类型和自定义类;若为复杂参数可以为map和java实体类。<insert></insert>:添加语句标签,参数类型同上;<update></update>:修改语句标签,参数类型同上;<delete></delete>:删除语句标签,参数类型同上。
PS:#{}和${}的区别:
#{}:占位符,配合PreparedStatement使用。mybatis会自动使用PreparedStatement的set方法进行值得替换。
${}:字符串替换符,配合Statement使用。
 
动态SQL语句标签:(PS:在动态SQL语句标签中,都是ODNL表达式,获取值得方式为:基本数据类型参数:0/1,param1/param2;对象作为参数:直接使用对象属性获取值:id,name等。在标签外SQL语句中的时候获取值仍需要使用#{0/1;param1/param2};#{id/name}获得;
①<if test="">SQL语句</if>:通过if标签进行判断,若满足test条件则拼接标签中的SQL语句;
②<where>and+其他动态SQL语句</where>:where标签会在生成SQL语句时自动添加where关键字,并且会自动去除第一个and。
③<foreach collection="" open="" separator="' close="" item="" index=""></foreach>:foreach只能遍历两种数据,一种为集合,一种为数组,当传入这两种值时候mybatis会将其封装到map集合中,其中键为"list"或者"array",所以collection值只能为list或者array,这取决于你传入的是集合还是数组,open值为SQL语句的开始字符串,close值为SQL语句的结束字符串,separator值为分割符,item就是集合中的每个值。
④<trim prefix="" prefixOverrides="" suffix="" suffixOverrides=""></trim>:增加SQL语句中的前缀和后缀,去除SQL语句中的前缀和后缀。更加灵活强大,动态调整SQL语句。
⑤<set></set>:可以理解为trim标签的特殊情况,只能增加set前缀,去除最后","后缀。
⑥<choose><when test=""></when><otherwise><otherwise></choose>:逻辑上相当于java中的
if(){}else if(){}else if(){}else{},当满足test条件时才拼接其中的SQL语句,没有满足条件则拼接otherwise中的SQL语句,一旦进入某个when就不会继续向下判断,直接结束choose。
⑦<bind name="" value=""></bind>:创建一个变量,并绑定上下文,name值自定义,value常为字符串的拼接,如:模糊查询时,可以拼接"'%'param1'%'",这样在传参数的时候不必将“%”拼入参数中。
⑧<sql id="">SQL语句</sql>/<include refid=""></include>:使用sql标签自定义一段sql语句,给定id值,在拼接字符串时使用include标签通过id引入使用。
2.使用SqlSession对象直接进行增删查改操作
a.service层调用xml文件方式:①解析mybatis.xml全局配置文件为字符流,获取字符输入流;②获得SqlSessionFactory对象,即SqlSession对象工厂;③获得SqlSession对象;④使用SqlSession对象的方法执行对应的SQL语句:selectList():查找多条数据,返回值是带有泛型的List集合;selectOne():查找单调数据,返回值是pojo实体类对象;selectMap():查找多条数据,返回值是带有泛型的map集合;update():返回值是int数值,代表操作的数据条数;delete():返回值是int数值,代表操作的数据条数;insert():返回值是int数值,代表操作的数据条数;
PS:selectList(String s,Object obj):其中的参数s为mapper.xml文件的namespace值(定位到xml文件)+xml文件中<select id="selectOne"></select>标签中的id值(定位到具体的SQL语句),如:"com.javalq.mapper.Mapper.selectOne"。
 
b.这些方法中参数只能存在一个,如果需要传入多个参数可以将参数封装到一个对象中或者集合中传入。
3.使用mapper动态代理实现动态拼接SQL语句
优点:
1、可以直接传入多个参数,不必封装为对象或者集合;
2、调用方法时直接以接口的实现类对象来调用方法,更加清晰方便。
注意要点:
1、接口名必须和xml文件名一致
2、接口方法名必须和xml标签id一致
3、namespace的值必须为接口的全路径名
4、使用package扫描mapper时,接口名必须与xml文件名一致

おすすめ

転載: www.cnblogs.com/paralleluniverse/p/11294305.html