id:在命名空間中惟一的標識符,能夠被用來引用這條語句。java
parameterType:設置傳入這條語句的參數的數據類型,如int,String......mysql
resultType:設置從這條語句中返回數據的類型。 注意若是返回的是集合,那應該設置爲集合包含的類型,而不是集合自己。可使用sql
resultType 或 resultMap,但不能同時使用。數據庫
select數組
1)查詢某個表的全部記錄spa
<select id="queryall" resultType="com.test.Person"> select * from person </select>
2)根據某個字段的值查詢blog
① 直接查詢索引
傳入的參數值經過 #{id} 傳遞給sql語句(id可自定義爲其餘的名字)it
<!-- 根據id查用戶 --> <select id="querypersonbyid" parameterType="int" resultType="com.test.Person"> select * from person where id = #{id} </select>
② 模糊查詢io
原生方法:like "%${value}%" 注意使用的是 $ 而且參數名只能用 value,不然會報錯
<!-- 模糊查詢 --> <select id="querypersonbyname" parameterType="String" resultType="com.test.Person"> select * from person where name like "%${value}%" </select>
mysql數據庫:like CONCAT('%',#{name},'%') 這裏是使用CONCAT進行拼接,name能夠爲其餘名字
<select id="querypersonbyname" parameterType="String" resultType="com.test.Person"> select * from person where name like CONCAT('%',#{name},'%') </select>
Insert
1)往表中插入一條記錄
<insert id="insertAuthor"> insert into Author (id,username,password,email,bio) values (#{id},#{username},#{password},#{email},#{bio}) </insert>
2)插入時主鍵自動生成
首先,若是你的數據庫支持自動生成主鍵的字段(好比 MySQL 和 SQL Server),那麼你能夠設置 useGeneratedKeys=」true」,而後再把 keyProperty 設置到目標屬性上就 OK 了。
<insert id="insertAuthor" useGeneratedKeys="true" keyProperty="id"> insert into Author (username,password,email,bio) values (#{username},#{password},#{email},#{bio}) </insert>
若是你的數據庫還支持多行插入, 你也能夠傳入一個 Author 數組或集合,並返回自動生成的主鍵。
<insert id="insertAuthor" useGeneratedKeys="true" keyProperty="id"> insert into Author (username, password, email, bio) values <foreach item="item" collection="list" separator=","> (#{item.username}, #{item.password}, #{item.email}, #{item.bio}) </foreach> </insert>
對於不支持自動生成類型的數據庫或可能不支持自動生成主鍵的 JDBC 驅動,MyBatis 有另一種方法來生成主鍵。
selectKey 元素中的語句將會首先運行,person 的 id 會被設置,而後插入語句會被調用。這能夠提供給你一個與數據庫中自動生成主鍵相似的行爲,同時保持了 Java 代碼的簡潔。
<insert id="insertperson" parameterType="com.test.Person"> <selectKey keyProperty="id" resultType="int" order="BEFORE"> select LAST_INSERT_ID() </selectKey> insert into person(name,age,address,birthday) value(#{name},#{age},#{address},#{birthday}) </insert>
selectKey 元素描述以下:
<selectKey keyProperty="id" resultType="int" order="BEFORE" statementType="PREPARED">
keyProperty:selectKey 語句結果應該被設置的目標屬性。若是但願獲得多個生成的列,也能夠是逗號分隔的屬性名稱列表。
resultType:結果的類型。
order:這能夠被設置爲 BEFORE 或 AFTER。若是設置爲 BEFORE,那麼它會首先生成主鍵,設置 keyProperty 而後執行插入語句。若是設置爲AFTER,那麼先執行插入語句,而後是 selectKey 中的語句 - 這和 Oracle 數據庫的行爲類似,在插入語句內部可能有嵌入索引調用。
statementType:MyBatis 支持 STATEMENT,PREPARED 和 CALLABLE 語句的映射類型,分別表明 PreparedStatement 和 CallableStatement 類型。