MyBatis基礎知識

1.mybatis的概念:

   ORM: 對象關係映射
    對象模型與數據庫的關係模型是不匹配的,通常手動完成表中列與對象的屬性之間的對應關係。
    
    表        《-----》    類
    表與表的關係    《--------》類與類(字段)的關係

    Hibernate(冬眠)/JPA(java持久化API)
    MyBatis/ibatis


2.mybatis的定義以及實現MyBatis的兩種方法

    mybatis的定義:SQL映射(方法)技術,封裝了JDBC的操作,簡化了對關係數據庫的操作的框架。

    1.基於XML(java 5之前沒有註解)

           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">

		//namespace指定接口名稱
		//id指定了方法名:selectBlog
		//調用了上述接口中的指定方法執行SQL語句
		//查詢結果集封裝成resultType指定的類型
		<mapper namespace="org.mybatis.example.BlogMapper">
 	 		<select id="selectBlog" resultType="Blog">
  	 			 select * from Blog where id = #{id}
  			</select>
		</mapper>

      java:

package org.mybatis.example;
		public interface BlogMapper {
 			
  			Blog selectBlog(int id);
			}

2.基於註解映射

package org.mybatis.example;
		public interface BlogMapper {
			//java5.0支持註解,不需要寫BlogMapper.xml文件
 			 @Select("SELECT * FROM blog WHERE id = #{id}")
 			 Blog selectBlog(int id);
		}

3.官方介紹:

https://mybatis.org/mybatis-3/zh/index.html

SQL Mapping Framework for Java:基於java的SQL映射框架。


4.核心API

     SqlSessionFactory:SQL 會話工廠(數據庫連接池)
    SqlSession:SQL會話(一個數據庫連接)
    Mapper:SQL 映射(執行SQL語句)


5.基於SQL映射

    @One
	@Many
	@ResultMap:對@Result的命名,是可複用
	@Results:映射表和類
	@Result:具體的列和屬性
	@MapKey:返回Map時指定key對應的屬性
	@Options:其他選項,如獲得自動生成的key

6.動態SQL

   定義:SQL語句執行時,會根據傳入的參數的個數及參數的內容而發生變化。
               動態 SQL 基於條件查詢。

xml方式:


	//select * from post where id in(1,2,3,);
	<select id="selectPostIn" resultType="domain.blog.Post">
 	 SELECT *
	  FROM POST P
 	 WHERE ID in
  		<foreach item="item" index="index" collection="list"
    	 	 open="(" separator="," close=")">
       	 	#{item}
  		</foreach>
	</select>
//條件(可選的)查詢
	<select id="findActiveBlogWithTitleLike"
   	  resultType="Blog">
 	 SELECT * FROM BLOG
  	WHERE state = ‘ACTIVE’
		//可選條件
  		<if test="title != null">
   			 AND title like #{title}
  		</if>
	</select>

Java & 註解 實現動態 SQL

 return new SQL() {{
   	 SELECT("P.ID, P.USERNAME, P.PASSWORD, P.FIRST_NAME, P.LAST_NAME");
    	FROM("PERSON P");
   	 if (id != null) {
      	WHERE("P.ID like #{id}");
    	}
    	if (firstName != null) {
      	WHERE("P.FIRST_NAME like #{firstName}");
   	 }
   	 if (lastName != null) {
     	 WHERE("P.LAST_NAME like #{lastName}");
    	}
   	 ORDER_BY("P.LAST_NAME");
  	}}.toString();
	

實現動態MySQL的方法

@SelectProvider
@DeleteProvider
@UpdateProvider
@InsertProvider

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章