日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

MyBatis点滴积累

發布時間:2023/11/27 生活经验 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MyBatis点滴积累 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MyBatis在使用中不知不覺積累了很多經驗

?

1.#和$

MyBatis/Ibatis中#和$的區別
1. #將傳入的數據都當成一個字符串,會對自動傳入的數據加一個雙引號。如:order by #user_id#,如果傳入的值是111,那么解析成sql時的值為order by "111", 如果傳入的值是id,則解析成的sql為order by "id".
?
2. $將傳入的數據直接顯示生成在sql中。如:order by $user_id$,如果傳入的值是111,那么解析成sql時的值為order by user_id,? 如果傳入的值是id,則解析成的sql為order by id.
?
3. #方式能夠很大程度防止sql注入。
?
4.$方式無法防止Sql注入。
?
5.$方式一般用于傳入數據庫對象,例如傳入表名.
?
6.一般能用#的就別用$.

ps:在使用mybatis中還遇到<![CDATA[]]>的用法,在該符號內的語句,將不會被當成字符串來處理,而是直接當成sql語句,比如要執行一個存儲過程。

?

2.if

引用where 1=1 再

<if test="user!=null"> and user =#{user} </if>

更好的方式是

<select id="findActiveBlogLike" resultType="Blog">SELECT * FROM BLOG<where><if test="state != null">and state = #{state}</if></where> 
</select>

參考:

mybatis 使用經驗小結

?

3.獲得數據庫返回值

說明,首先sqlmapper里這兩種寫法都可以

<insert id="addTest" parameterType="blog.csdn.unix21.Bean"><selectKey resultType="Integer" keyProperty="id" order="AFTER" >SELECT @@IDENTITY AS id</selectKey>insert into test_hm (name,city)values (#{name,jdbcType=VARCHAR},#{city,jdbcType=VARCHAR})
</insert>
<insert id="addTest1" parameterType="blog.csdn.unix21.Bean" useGeneratedKeys="true"  keyProperty="id">insert into test_hm (name,city)values (#{name,jdbcType=VARCHAR},#{city,jdbcType=VARCHAR})
</insert>

?

insert代碼

public int addTest(TestBean t) throws Exception {            String resource = "conf_test.xml";//加載mybatis 的配置文件(它也加載關聯的映射文件)Reader reader = Resources.getResourceAsReader(resource);//構建sqlSession 的工廠SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);//創建能執行映射文件中sql 的sqlSessionSqlSession session = sessionFactory.openSession();//映射sql 的標識字符串String statement = "sqlMapper.addTest1";//執行查詢返回一個唯一user 對象的sqlint r=0;try {r = session.insert(statement, t);session.commit();} finally {session.close();}System.out.println(r);return r;


注意:需要commit和close.

?


?

?數據庫自增的id返回在bean里了,不能直接從session.insert(statement, t)獲取,這個獲取的是數據庫改版的行數,如果只insert那么這個返回的是1。

參考:

MyBatis魔法堂:Insert操作詳解(返回主鍵、批量插入)

?

?4.使用Mybatis-Generator自動生成Dao、Model、Mapping相關文件

Mybatis屬于半自動ORM,在使用這個框架中,工作量最大的就是書寫Mapping的映射文件,由于手動書寫很容易出錯,我們可以利用Mybatis-Generator來幫我們自動生成文件。
關于Mybatis-Generator的下載可以到這個地址:https://github.com/mybatis/generator/releases

參考:http://www.cnblogs.com/lichenwei/p/4145696.html

?

?

總結

以上是生活随笔為你收集整理的MyBatis点滴积累的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。