-
使用prepareStatement,對?占位的參數模糊查詢 1. %通配符直接寫在預準備的sql中,%和?需要使用mysql的字符串拼接(字符串之間用空格分割),例如, String sql = "select name from user where name like %?%";// 錯誤 String sql = "select name from user where name like '%' ? '%'";// 正確 2. %不寫在預準備的sql中,寫在要傳入參數時 Sting sql = "select name from user where name like ?"; 傳參數時:pStmt.setString(1,"%"+pareOfName+"%");查看全部
-
sql查詢條件不定,使用PreparedStatement 在prepareStatement之前將sql語句拼接,將可能加上的參數放到容器中緩存查看全部
-
.....查看全部
-
.....查看全部
-
ognl2查看全部
-
ognl查看全部
-
Tag查看全部
-
一、獲取自增主鍵值: <insert id="insert" useGeneratedKeys="true" keyProperty="id" parameterType="com.imooc.bean.Command"> insert into command(name,description) values(#{name},#{description}) </insert> //解析:添加數據(在主外鍵的關系中)可以使用 useGeneratedKeys="true",可獲取自增長的id,并配合keyProperty="id"(java中實體類的屬性名)指定該對象的主鍵值。 二、找不到namespace.id的異常效果: 1、在Configuration.xml沒有配置<mappers><mapper resource="*.xml"></mapper></mappers>; 2、在1的配置中或selectList("Message.queryMessageList",message);中,名字寫錯。 三、排查SQL語法錯誤:如果控制臺出現SQL語句問題,復制到SQL軟件上執行,若有參數,手動寫上并執行。 四、不要過度使用${}。 五、亂碼問題: 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" /> 6. 瀏覽器編碼問題等。查看全部
-
一、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的方式查看全部
-
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n //%d產生日志的時間, %t是產生日志所處的線程名稱, %-5p輸出日志的級別,將占5位字符,不足5位用空格填補,-指的是在右邊補齊, %c你輸出日志的包以及類的全名, %m是你附加的信息 %n是換行查看全部
-
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="and|or" suffixOverrides=","> //sql語句 </trim> 提示:prefix="where" prefixOverrides="and|or"等價于<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>中。查看全部
-
在子表類的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>查看全部
-
重要的地方查看全部
-
xml中如何反應一對多的關系? 主表里面包含子表的集合。 <conlection property="contentList" resultMap="CommandContent.Content"/> <result column="Description" jdbcType="VARCHAR" property="descrition"/> colunmn屬性的值:表示數據庫這邊的列名 【但不是指的數據庫中的列名,而是查詢出來的結果集的列名】 【只要column屬性有別名,那么相對應的xml配置文件中的column列的值也要帶上別名。但?。?!不包括前綴,例:a.ID test ,相對應的column屬性值是test】 ------------------------------------------------------------------ 當兩個表中有相同列名時,這時候不光要取前綴名, 更重要的是給兩個列都取別名?。?!程序才能區分哪個列 ----------------------------------------------------------------- property屬性的值:表示對應的實體類中的字段 ------------------------------------------------ left join 無論子表有沒有內容,主表都應該顯示出來 <resultMap type='' id=''> <id column='select語句查詢出的列名,如果列名取了別名,這里應該是別名' property=''/> <result column='' property='對應的實體的屬性名'/> <!-- 一對多關系 --> <collection property='' resultMap='實體類所對應的結果集,跨文件,所以需要指定命名空間,語法是:namespace.resultMapId'/> </resultMap>查看全部
-
一個指定對應多條不同回復內容<br> 一對多的關系,一般拆分成兩張表,這樣就減少了冗余數據<br> ①表指令表:主鍵、name、description<br> ②表指令表對應的內容:主鍵、內容、指令表的主鍵(command_id)<br> 這樣,一個指定就可以在②表找到所對應的多條內容 兩種結構: ——————————①一條指令回復一組內容 ——————————②一條指令回復一組中的一個內容,在java代碼中隨機回復一條即可 dao層內容: ——————————————————————列表查詢 ——————————————————————頁面初始化 ——————————————————————微信對話查看全部
舉報
0/150
提交
取消