-
亂碼排查: 1. servlet傳參時的編碼:request.setCharacterEncoding("utf-8");或直接使用過濾器; 2. Java文件本身的編碼; 3. 鏈接數據庫的參數中,設定編碼方式:jdbc:mysql://192.168.1.1:3306/cms?characterEncoding=utf-8 4. 數據庫、表的編碼; 5. 展示頁面的編碼:<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> useGeneratedKeys屬性設為true,可獲取自增長的id查看全部
-
判斷是否是好代碼:查看全部
-
resultMap與resultType屬性都是表示結果集與java對象之間的關系.但要注意兩者區別. 如果用了resultType屬性就不用在Sql配置文檔中配置<resultMap>標簽. resultType映射的原理是:如果映射到自定義類,那么javabean中的屬性名與查詢出來的列名相同的時候就表示他們有映射關系(大小寫不敏感,也不用考慮同名列名的問題),結果集就會放進這些javabean的屬性中. resultType也可以映射到Map中,那么查詢的列名就是key值,數據就是value值. resultMap屬性="要映射的<resultMap>標簽的id值" resultType屬性="要映射的java類" <select id="find" resultMap="resultMessage"> select * from message </select> <select id="find" resultType="com.imooc.Message"> select * from message </select> //此時就不需要配置<resultMap>標簽.查看全部
-
resultMap:在XML配置的map,若不配置,只能按列名與對象的屬性名來對應填充,不區分大小寫 resultType:Java對象 parameterMap:不推薦使用 #{}:有預編譯,可防sql注入, ${}:無預編譯,直接拼接參數,字符串無引號;查看全部
-
resultMap:在XML配置的map,若不配置,只能按列名與對象的屬性名來對應填充,不區分大小寫 resultType:Java對象 parameterMap:不推薦使用 #{}:有預編譯,可防sql注入, ${}:無預編譯,直接拼接參數,字符串無引號;查看全部
-
容易混淆的概念查看全部
-
Mybatis前世今生查看全部
-
一、resultMap和resultType:當配置resultType時,就不需要配置resultMap,看似resultType方便,但是會被受限制,沒有resultMap開放多。 相同點:都是表示查詢結果集的類型。 不同點:resultMap需要手動配置映射關系,而resultType是直接指定java類型或者自定義的實體類型,查詢結果集的列名必須和實體屬性名稱一致(實體類:名稱大小寫可以忽略;java類型,如Map集合的key大小寫要一致,盡量都大小寫規范,如果不放心可以select ID id,...)。 優缺點: 1、resultType結果集列名要與java屬性名一樣,但是resultMap不受限制,因為resultMap有column來規定。 2、由于SQL類型與Java中類型部分不匹配,resultMap可以通過typeHandler=""來匹配(如:SQL中的0和1來表示java中的false和true;Date類型的轉換),但是resultType無能為力。 二、parameterMap和patameterType: 表示傳入參數的對應關系,前者不推薦使用,只是mybatis為了適應以前的版本。 提示:看到Map字眼的想到映射關系,看到Type字眼的想到類型。 三、#{}和${}: 相同點:都是用來作為占位符。 不同點:#{}在預編譯的時候會唄替換為?,而${}在預編譯的時候直接將變量的值替換進去,而且沒有引號(所以還要加上“'${...}'”),故一般都是用前者,個別情況會使用后者:如需進行排序,且排序字段為參數時可以使用${}(order by后面不喜歡被預編譯,所以使用${}更為恰當)。 四、#{}和ognl:在#{}中如果是基本類型,其中的名稱可以隨便寫(不推薦),但一般都用_parameter,因為值唯一,而ognl中必須寫成_parameter的方式查看全部
-
mybatis常用的標簽,其中select查詢時不應該使用*號而是使用各列名,sql用來定義常量,多用于定義經常使用到的列名,然后通過include標簽引用查看全部
-
Ps1: <where><if test=""></if>...</where>標簽相當于“where 1=1 and...”,<where>標簽和where 1=1不可共存,兩者取其一即可。 Ps2: <select> select <include refid="columns"></include> from command </select> <sql id="columns">a.id C_ID,b.id,b.commandId</sql> //作用:增強了維護性,減少代碼復用。 Ps3: //解析:<trim>標簽在<select>/<update>等內使用。prefix在sql語句最前面加上,suffix在sql語句最后面加上,去掉sql語句最前面prefixOverrides,去掉sql語句最后面suffixOverrides。 <trim prefix="where" suffix="test" prefixOverrides="andor" suffixOverrides=","> //sql語句 </trim> 提示:prefix="where" prefixOverrides="andor"等價于<where>;prefix="set" suffixOverrides=","等價于<set>。 Ps4: <choose> <when test=""></when> <when test=""></when> <otherwise></otherwise> </choose> 理解1:if—else if—else 理解2:switch—case—case—default Ps5: <collection property="主實體類中的List<子實體類>的對象名" resultMap="子xml中mapper中屬性namespace名.resultMap的id名"/>//這條語句寫在主xml<resultMap>中。 <association property="子實體類中的主實體類的對象名" resultMap="主xml中mapper中屬性namespace名.resultMap的id名"/>//這條語句寫在子xml<resultMap>中。查看全部
-
Mybatis常用標簽 用到sql標簽時 需要配合使用include標簽查看全部
-
在子表類的Sql配置文檔的<resultMap>標簽下需要添加一個<association>標簽來指明當前子表這個類里包含著一個主表類類型的成員變量. 其中<assoication>標簽有property、column(可無)、javaType屬性、resultMap屬性. property屬性指明在子表類中的主表類類型的成員變量名. column屬性指明數據庫中的字段. javaType屬性指明主表類的類名. resutlMap屬性指明主表類的<resultMap>標簽的id屬性的屬性值. 在<association>標簽下有<id>與<result>子標簽,他們都有property與column屬性.來表明主表類的所有成員變量.或者直接用resultMap屬性直接替代,就可以不用寫子標簽. (在子表的Sql配置文件) <resultMap type="com.imooc.Content" id="Content"> <id column="ID" jdbcType="Integer" property="id"/> <result column="Content" jdbcType="VARCHAR" property="content"/> <result column="CommandId" jdbcType="Integer" property="commandId"/> <association property="command" javaType="com.imooc.Command"> <id column="CID" property="id"/> <result column="name" property="name"/> <result column="description" property="description" /> </association> </resultMap> 等于: <resultMap type="" id=""> <id column="" jdbcType="" property=""/> <result column="" jdbcType="" property=""/> <association property="" resultMap="" /> </resultMap>查看全部
-
且當select u.name from User as u,column屬性不能寫成u.name,不能帶表名.因為在jdbc的ResultSet接口根據列名獲取數據的方法中,根據的列名是沒有表名前綴的.因此表名前綴會失效. 所以在Mybatis一對多關聯的Sql配置文檔下的<select>標簽的sql語句不能出現兩個字段名相同的查詢.否則在相關聯的不同Sql配置文件的<resultMap>標簽下的其他標簽的column屬性就會重復,Mybatis并不知道這個重復的字段是屬于哪個表的.所以要不起別名,要不設計數據庫不同表之間不能出現同名的列名. 要不設置別名: <select id="getMessageCom" resultMap="resultMapCom"> select a.id as cid,a.name,a.description,b.id,b.content from command as a left join content as b on a.id=b.commandid </select> 要不就設計表時列名不重復: <select id="getMessageCom" resultMap="resultMapCom"> select a.cid,a.name,a.description,b.id,b.content from command as a left join content as b on a.id=b.commandid </select>查看全部
-
1.<select>標簽中查詢出來的類名要和<resultMap>中的column屬性值一致。但規定<resultMap>的column屬性值不能寫成“表名.列名”,而是直接寫數據庫中的列名或別名。 2.如果兩個表中都有ID屬性,但因為規定<resultMap>的column屬性值不能寫成“表名.列名”,這時候要怎么辦呢?可以用別名來代替。 在主表類的Sql配置文檔的<resultMap>標簽下需要添加一個<collection>標簽來指明我當前主表這個類里包含著子表類的集合.其中<collection>標簽下存在property屬性與resultMap屬性.沒有column屬性,因為在數據庫表中不會額外創建一個此集合的字段.property屬性表示主表類中哪個屬性名,resultMap屬性要指明包含的子表類的Sql配置文件的<resultMap>標簽的id值. <resultMap type="com.imooc.Command" id="Command"> <id column="CID" jdbcType="Integer" property="id"/> <result column="Name" jdbcType="VARCHAR" property="name"/> <result column="Description" jdbcType="VARCHAR" property="description"/> <collection property="contentlist" resultMap="Content.content"/> //因為是跨文件所以要namespace.id </resultMap> 特別要注意的是column屬性對應數據庫表的字段名意思是與select子句選擇的字段名匹配起來.如果select u.name as username from User as u; 雖然在數據庫表中的字段名是name,但是select子句為name字段設置了別名,即username,因此在<resultMap>標簽下的<result>標簽的column屬性要等于username而并非name,是與select子句中的名稱匹配,要注意當設置了別名那么column屬性也為別名查看全部
-
如何在xml的配置文件中反應表結構之間的對應關系呢? 在java中,通過主表的實體類中包含子表的集合來反應一對多的關系,在配置文件中同樣是通過集合來配置這種關系的。在主表的映射文件中使用<collection>標簽來指定子表的對應關系以及子表的引用,使用resultMap屬性來指定子表映射關系的文件,格式是namespace.子表對應關系的id。那么新的問題來了,主表中的id與子表中的id,同時映射到結果集resultMap就會產生問題,所以就需要給任意一個id起一個別名。注意:給表起別名,以及字段的引用,打印出的結果是不包含表名的,比如說 a.id,打印出的結果是沒有a的,所以a.id與b.id映射的都是一個屬性,所以給字段起一個別名,那么字段名就會改變,配置映射文件的時候,注意數據庫字段與java實體類的屬性的對應關系。查看全部
舉報
0/150
提交
取消