大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

第一部分 Java基礎(chǔ)
第二部分 Java進(jìn)階

Java mybatis面試題及答案

1、Mybatis中#和$的區(qū)別?

● #相當(dāng)于對(duì)數(shù)據(jù)加上雙引號(hào),$相當(dāng)于直接顯示數(shù)據(jù)

● #將傳入的數(shù)據(jù)都當(dāng)成一個(gè)字符串,會(huì)對(duì)自動(dòng)傳入的數(shù)據(jù)加一個(gè)雙引號(hào)。如:order by#user_id#,如果傳入的值是111,那么解析成sql時(shí)的值為order by"111",如果傳入的值是id,則解析成的sql為order by "id".

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

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

● $方式一般用于傳入數(shù)據(jù)庫對(duì)象,例如傳入表名.

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

● 創(chuàng)建SqlSessionFactory

● 通過SqlSessionFactory創(chuàng)建SqlSession

● 通過sqlsession執(zhí)行數(shù)據(jù)庫操作

● 調(diào)用session.commit()提交事務(wù)

● 調(diào)用session.close()關(guān)閉會(huì)話

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

● 數(shù)據(jù)庫鏈接創(chuàng)建、釋放頻繁造成系統(tǒng)資源浪費(fèi)從而影響系統(tǒng)性能,使用數(shù)據(jù)庫鏈接池可解決此問題。解決:在SqlMapConfig.xml中配置數(shù)據(jù)鏈接池,使用連接池管理數(shù)據(jù)庫鏈接。

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

● 向sql語句傳參數(shù)麻煩,因?yàn)閟ql語句的where條件不一定,可能多也可能少,占位符需要和參數(shù)一一對(duì)應(yīng)。解決: Mybatis 自動(dòng)將 java 對(duì)象映射至 sql 語句。

● 對(duì)結(jié)果集解析麻煩,sql 變化導(dǎo)致解析代碼變化,且解析前需要遍歷,如果能將數(shù)據(jù)庫記錄封裝成 pojo 對(duì)象解析比較方便。解決:Mybatis 自動(dòng)將 sql 執(zhí)行結(jié)果映射至 java 對(duì)象。

4、使用MyBatis的mapper接口調(diào)用時(shí)有哪些要求?

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

● Mapper接口方法的輸入?yún)?shù)類型和mapper.xml中定義的每個(gè)sql的parameterType的類型相同

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

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

5、Mybatis中一級(jí)緩存與二級(jí)緩存?

● 一級(jí)緩存:基于PerpetualCache的HashMap本地緩存,其存儲(chǔ)作用域?yàn)镾ession,當(dāng)flush或close之后,該Session中的所有Cache就將清空。

● 二級(jí)緩存與一級(jí)緩存其機(jī)制相同,默認(rèn)也是采用PerpetualCache的HashMap存儲(chǔ),不同在于其存儲(chǔ)作用域?yàn)镸apper(namespace),并且可自定義存儲(chǔ)源,如Ehcache。作用域namespace是指對(duì)namespace所對(duì)應(yīng)的配置文件中所有的select操作結(jié)果都緩存,這樣不同線程之間就可以共用二級(jí)緩存。二級(jí)緩存可以設(shè)置返回的緩存對(duì)象策略:<cache readOnly="true">。當(dāng)readOnly="true"時(shí),表示二級(jí)緩存返回給所有調(diào)用者同一個(gè)緩存對(duì)象實(shí)例,調(diào)用者可以u(píng)pdate獲取的緩存實(shí)例,但是這樣可能會(huì)造成其他調(diào)用者出現(xiàn)數(shù)據(jù)不一致的情況(因?yàn)樗姓{(diào)用者調(diào)用的是同一個(gè)實(shí)例)。當(dāng)readOnly=“false”時(shí),返回給調(diào)用者的是二級(jí)緩存總緩存對(duì)象的拷貝,即不同調(diào)用者獲取的是緩存對(duì)象不同的實(shí)例,這樣調(diào)用者對(duì)各自的緩存對(duì)象的修改不會(huì)影響到其他的調(diào)用者,即是安全的,所以默認(rèn)是readOnly="false";

● 對(duì)于緩存數(shù)據(jù)更新機(jī)制,當(dāng)某一個(gè)作用域(一級(jí)緩存Session/二級(jí)緩存Namespaces)進(jìn)行了C/U/D操作后,默認(rèn)該作用域下所有select中的緩存將被clear。

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

數(shù)據(jù)庫為 MySql 時(shí):

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

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

數(shù)據(jù)庫為Oracle時(shí):

<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獲取并賦值到對(duì)象的屬性中,insert插入操作時(shí)正常插入id。

全部教程
主站蜘蛛池模板: 国产精品久久久久久久久免费 | 日韩一区二区三区不卡视频 | 欧美一区二区三区在线 | 天海翼精品久久中文字幕 | 综合视频网 | 欧美亚洲一区二区三区四 | se色综合视频 | 欧美成人在线免费 | 色综合视频在线观看 | 色婷婷久久综合中文久久一本 | 老色99久久九九精品尤物 | 精品视频一区在线观看 | 日韩精品一区二区三区在线观看l | 欧美成人视 | 欧美精品综合 | 亚洲视频中文 | 欧美爱爱小视频 | 国产色婷婷免费视频 | 色吧在线视频 | 99久久99久久免费精品蜜桃 | 色91在线| 国产成a人片在线观看视频99 | 99精品国产成人一区二区在线 | 国产日本欧美在线观看 | 欧美成人午夜精品一区二区 | 蜜桃精品免费久久久久影院 | 日本中文字幕在线观看 | 91九色蝌蚪 | 欧美日韩免费做爰视频 | 麻豆精品一区二区三区免费 | 日韩欧美理论片 | 色综合五月激情综合色一区 | 国产真实伦视频在线观看 | 99久久综合给久久精品 | 成人午夜精品网站在线观看 | 综合在线亚洲 | 亚洲综合精品香蕉久久网 | 日本高清免费不卡在线播放 | 91精品一区二区三区久久久久 | 国产成人一区二区三区免费观看 | 国产深夜视频 |