黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

第一部分 Java基礎
第二部分 Java進階

Java mybatis面試題及答案

1、Mybatis中#和$的區別?

● #相當于對數據加上雙引號,$相當于直接顯示數據

● #將傳入的數據都當成一個字符串,會對自動傳入的數據加一個雙引號。如:order by#user_id#,如果傳入的值是111,那么解析成sql時的值為order by"111",如果傳入的值是id,則解析成的sql為order by "id".

● $將傳入的數據直接顯示生成在sql中。如:order by$user_id$,如果傳入的值是111,那么解析成sql時的值為order by user_id,如果傳入的值是id,則解析成的sql為order by id.

● #方式能夠很大程度防止sql注入,$方式無法防止Sql注入。

● $方式一般用于傳入數據庫對象,例如傳入表名.

2、Mybatis的編程步驟是什么樣的?

● 創建SqlSessionFactory

● 通過SqlSessionFactory創建SqlSession

● 通過sqlsession執行數據庫操作

● 調用session.commit()提交事務

● 調用session.close()關閉會話

3、JDBC編程有哪些不足之處,MyBatis是如何解決這些問題的?

● 數據庫鏈接創建、釋放頻繁造成系統資源浪費從而影響系統性能,使用數據庫鏈接池可解決此問題。解決:在SqlMapConfig.xml中配置數據鏈接池,使用連接池管理數據庫鏈接。

● Sql語句寫在代碼中造成代碼不易維護,實際應用sql變化的可能較大,sql變動需要改變java代碼。解決:將Sql語句配置在XXXXmapper.xml文件中與java代碼分離。

● 向sql語句傳參數麻煩,因為sql語句的where條件不一定,可能多也可能少,占位符需要和參數一一對應。解決: Mybatis 自動將 java 對象映射至 sql 語句。

● 對結果集解析麻煩,sql 變化導致解析代碼變化,且解析前需要遍歷,如果能將數據庫記錄封裝成 pojo 對象解析比較方便。解決:Mybatis 自動將 sql 執行結果映射至 java 對象。

4、使用MyBatis的mapper接口調用時有哪些要求?

● Mapper接口方法名和mapper.xml中定義的每個sql的id相同

● Mapper接口方法的輸入參數類型和mapper.xml中定義的每個sql的parameterType的類型相同

● Mapper接口方法的輸出參數類型和mapper.xml中定義的每個sql的resultType的類型相同

● Mapper.xml文件中的namespace即是mapper接口的類路徑。

5、Mybatis中一級緩存與二級緩存?

● 一級緩存:基于PerpetualCache的HashMap本地緩存,其存儲作用域為Session,當flush或close之后,該Session中的所有Cache就將清空。

● 二級緩存與一級緩存其機制相同,默認也是采用PerpetualCache的HashMap存儲,不同在于其存儲作用域為Mapper(namespace),并且可自定義存儲源,如Ehcache。作用域namespace是指對namespace所對應的配置文件中所有的select操作結果都緩存,這樣不同線程之間就可以共用二級緩存。二級緩存可以設置返回的緩存對象策略:<cache readOnly="true">。當readOnly="true"時,表示二級緩存返回給所有調用者同一個緩存對象實例,調用者可以update獲取的緩存實例,但是這樣可能會造成其他調用者出現數據不一致的情況(因為所有調用者調用的是同一個實例)。當readOnly=“false”時,返回給調用者的是二級緩存總緩存對象的拷貝,即不同調用者獲取的是緩存對象不同的實例,這樣調用者對各自的緩存對象的修改不會影響到其他的調用者,即是安全的,所以默認是readOnly="false";

● 對于緩存數據更新機制,當某一個作用域(一級緩存Session/二級緩存Namespaces)進行了C/U/D操作后,默認該作用域下所有select中的緩存將被clear。

6、MyBatis在insert插入操作時如何返回主鍵ID?

數據庫為 MySql 時:

<insert id="insert" parameterType="com.test.User" keyProperty="userId" useGeneratedKeys="true">

“keyProperty”表示返回的id要保存到對象的屬性中,“useGeneratedKeys”表示主鍵id為自增長模式。

數據庫為Oracle時:

<insert id="insert" parameterType="com.test.User">
    <selectKey resultType="INTEGER" order="BEFORE" keyProperty="userId">
        SELECT SEQ_USER.NEXTVAL as userId from DUAL
    </selectKey>
    insert into user 
        (user_id, user_name, modified, state)
    values 
        (#{userId,jdbcType=INTEGER}, #{userName,jdbcType=VARCHAR}, #{modified,jdbcType=TIMESTAMP},#{state,jdbcType=INTEGER})
</insert>

由于Oracle沒有自增長這一說法,只有序列這種自增的形式,所以不能再使用“useGeneratedKeys”屬性。而是使用<selectKey>將ID獲取并賦值到對象的屬性中,insert插入操作時正常插入id。

全部教程
主站蜘蛛池模板: 免费色视频网站 | 欧美高清videosex极品 | 国产老师制服丝袜裤视频 | 亚洲国产精品二区久久 | 天天天天色 | 婷婷激情小说网 | japanhd日本xxxxx | 亚洲国产成人精品区 | 天天射视频 | 国产在线精品一区二区三区 | 亚洲激情综合 | 久久免费黄色 | 国产精品青草久久福利不卡 | 亚洲人成网站在线观看青青 | 人人鲁免费播放视频人人香蕉 | 国产香蕉98碰碰久久人人 | 亚洲 欧美 另类中文字幕 | 性美国xxxxx| 成年人在线观看视频免费 | 青草视频在线观看视频 | 成人福利免费视频 | 日比视频在线观看 | 国产一级高清视频在线 | 国产97在线 | 亚洲 | a级高清观看视频在线看 | 亚洲欧美日韩综合久久久久 | h网站免费看 | 日韩欧美亚 | 91免费网| 日本一区二区三区视频在线观看 | 久久99一区 | 国产区成人精品视频 | 亚洲欧美精品成人久久91 | 中文在线免费视频 | 天天躁 | 久操社区 | 国产免费黄| 男人下身进女人阳道视频 | 亚洲国产精品一区二区久久 | 欧美激情在线观看一区二区三区 | 男女午夜免费视频 |