-
刪除多條數據的方法 在Sql配置文檔中添加 <delete id="deleteMore" parameterType="java.util.List" > delete from message where id in( <foreach collection="list" item="item" separator=","> #{item} </foreach> ) </delete> 其中<foreach>標簽中有separator屬性用來指明分割的符號.如果不指明的話就要手動添加逗號,拼接sql的時候就會出錯. 即#{item},#{item},#{item}, 最后會多出一個逗號,如果設置了separator="," 那么Mybatis就會自動為我們分割,不需要額外添加逗號,直接#{item},最終會變成#{item},#{item},#{item} public void deleteMore(List<Integer> list){ SqlSession sqlSession=Util.getSqlSession(); sqlSession.delete("deleteMore",list); sqlSession.commit(); sqlSession.close(); }查看全部
-
執行刪除功能 在Sql的配置文檔需要添加 <delete id="deletemessage" parameterType="int" > delect from message where id =#{_parameter} //#{}括號里符合OGNL寫法,因為是基本數據類型所以是_parameter </delete> 只有<select>標簽需要添加resultMap屬性來指定關聯映射. 根據id編號來刪除單條數據 public void deletemessage(int id){ SqlSession sqlSession=Util.getSqlSession(); sqlSession.delete("deletemessage",id); sqlSession.commit(); //提交事務 sqlSession.close(); } 在Mybatis的增刪改中都需要提交事務.MyBatis有事務控制的能力,默認會創建事務但不會自動提交,因此需要用SqlSession的commit()方法提交.且用完SqlSession需要關閉.在JDBC是會自動創建與提交事務. servlet負責接收頁面的值和向頁面傳值.如果有業務邏輯需要處理則調用相應的service層的方法.service層中的方法參數來接收servlet傳過來的值,并對其進行處理,如果有需要則調用相應的dao層.dao層完成與數據庫的交互,執行相應的SQL語句.查看全部
-
Mybatis使用方法查看全部
-
log4j.rootLogger配置的第二個值是輸出日志的信息要顯示的位置.通常輸出在控制臺或者文件中.并不是因為單詞為Console就會輸出到控制臺,輸出到哪是由 org.apache.log4j.ConsoleAppender這個類控制的,只要配置了這個類就能夠輸出到控制臺.如果要輸出到文件就要配其他的類. 且rootLogger配置的第二個值是自定義的,只是個名稱.即可以是Console也可以是一個字母a.只要這個值與appender后面的單詞一樣即可. log4j.appender.Console.layout配置的是輸出日志的布局形式.org.apache.log4j.PatternLayout是一種自定義的布局形式.需要與log4j.appender.Console.layout.ConversionPattern一起使用,ConversionPattern是配置自定義輸出內容的布局的形式. %開頭是有特殊意義的 %d表示產生日志的時間 %t表示產生這個日志所處于的那個線程的名稱 %p表示輸出日志的級別即會顯示debug、info的字樣 %c表示輸出日志時這條輸出語句所處于的類的全名 %m表示輸出日志的時候附加的信息.即log.debug(mes)中的mes信息. %n表示換行. log4j.logger配置的是自定義包下的輸出級別.在log4j.logger后面可以跟任何一個包名.來規定此包下的類的日志輸出級別. log4j.rootLogger配置的那個輸出級別是對應整個工程的,如果想要在某個包下用別的輸出級別則可以通過log4j.logger.自定義包名="輸出級別"設置.查看全部
-
properties文件(.properties)里面都是key=value的形式.當需要用到properties文件的時候,程序里會通過key值來取到對應的value值. Mybatis已經封裝好對log4j操作的接口,因此會自動操作log4j輸出日志信息. log4j.properties文件就是為log4j準備的. (log4j.properties文件的內容): log4j.rootLogger=debug,Console log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%5p [%t] - %m%n log4j.logger.org.apache=INFO 其中log4j.rootLogger配置的是當使用log4j輸出日志的時候輸出的級別以及輸出的位置,因此有兩個值,用逗號隔開. Logger log; log.debug(mes); //輸出日志信息的不同形式 log.info(mes); log.warn(mes); log.error(mes); 即輸出的級別有debug、info、warn、error等.級別由低到高. 當log4j.rootLogger配置輸出日志信息的級別是debug時,則可以輸出通過大于等于debug形式輸出的信息.當配置為info時,則可以輸出通過大于等于info形式輸出的信息,此時便不會輸出通過debug形式輸出的信息.rootLogger的輸出級別一定要配置為debug,因為Mybatis封裝好的log4j方法中都是以debug的形式輸出.查看全部
-
因為動態Sql語句是在SQL配置文檔里面,運行時我們并不知道是傳遞了哪些參數以及內部發生了什么變化. 可以用log4j調試動態SQL,Log4j是Apache的一個開源項目,通過使用Log4j可以控制日志信息輸送的目的地是控制臺、文件、GUI組件,甚至是套接口服務器、NT的事件記錄器、UNIX Syslog守護進程等.我們也可以控制每一條日志的輸出格式,通過定義每一條日志信息的級別,我們能夠更加細致地控制日志的生成過程.日志是日記中的一種,多指非個人的,一般是記載每天所做的工作. Mybatis支持log4j,我們只需把log4j的jar包導入到項目以及完成log4j的配置文件即可.Mybatis就可以通過log4j把Mybatis執行的sql語句打印出來. log4j的配置文檔在Mybatis的源碼包有,路徑-->E:\Mybatis\mybatis-3-mybatis-3.2.8\src\test\java\log4j.properties 把配置文件加載在src下.查看全部
-
OGNL表達式語言可以直接調用JAVA對象的方法. <if text="command!=null and ! "".equals(command.trim())"> 除了屬性值那個""雙引號之外,因為在XML中非屬性值的雙引號需要用轉譯字符,與HTML相同,即"" 在xml中不能直接使用&&(與)這個操作符,必須要轉譯字符,即&&或者直接用OGNL自己的and操作符,在XML中是支持的. 使用#{變量名}來為sql傳遞參數.變量名與OGNL的寫法一樣,但不是OGNL表達式.(自定義類型->屬性名,數組->array[index]) 即: <select parameterType="com.imooc.Message" id="find"> select * from Message where 1=1 <if text="command!=null and ! "".equals(command.trim())"> and command=#{command} </if> </select> MyBatis中可以使用OGNL的地方有兩處: ?動態SQL表達式中 ?${param}參數中 上面代碼中test的值會使用OGNL計算結果。查看全部
-
在OGNL中經常需要用到操作符來進行判斷. 即在<if text="">標簽的text屬性值中就經常要用到操作符來進行判斷. 在GONL中支持JAVA的常用操作符,以及會有自己特有的操作符.查看全部
-
從集合(包括數組、list、Map)類型中取出一條數據. 即假如parameterType="集合類型",那么怎樣通過<if text="">標簽取出集合中的一條數據來進行判斷. 如果parameterType="String或基本數據類型的數組",則在<if text="array[索引](String[])"> //根據索引獲取數組中的一個元素. 如果parameterType="自定義類型的數組",則在<if text="array[索引].屬性名(Message[])"> //根據索引獲取數組中的一個對象的一個屬性. 如果parameterType="List<String>"類型,則在<if text="list[索引](List<String>)"> 如果parameterType="List<Message>"集合泛型是自定義類型,則在<if text="list[索引].屬性名(List<Message>)"> 如果parameterType="Map<String,String>"類型,則在<if text="_parameter.key(Map<String,String>)"> //其中_parameter在Map中是可以省略不寫的. 如果parameterType="Map<String,Message>"類型,則在<if text="key.屬性名(Map<String,Message>)"> 像list與Array中需要提供一個索引來獲取值,一般我們不知道明確的索引位置.但通常會明確知道Map集中的key值.這種寫法用在Map較多. 在項目中經常用<foreach>標簽取出list與Array集合中的每一條數據.此標簽不需要用OGNL表達式.foreach標簽可以用在數組、List與Map中. <foreach collection="array" index="i" item="item"> 其中collection屬性是指向一個完整的集合.可以是array(數組)、list(List集)、_parameter(Map集) index屬性在數組與List集合中是索引(下標),在Map中是key值. item屬性就是遍歷當中的具體某個屬性.在Map中指的是value.如果item是自定義類型,那么就是item.屬性名查看全部
-
把方法的參數傳遞給Sql配置文件,SqlSession對象提供兩個參數的select()、update()等方法,第一個參數是對應的sql語句的id屬性值,第二個為傳給Mybatis的參數.但一次只能傳一個參數,所以當有多個參數的時候,可以把參數封裝在一個javabean的對象中,因為javabean會對應表的字段.要傳遞的參數值會跟javabean的屬性匹配. public List<Message> getMessage(String command,String description){ List<Message> list=new ArrayList<Message>(); SqlSession sqlSession=Util.getSqlSession(); Message m=new Message(); m.setCommand(command); m.setDescription(description); list=sqlSession.selectList("find",m); return list; } Sql配置文件接收參數的方法是在對應sql語句的標簽上加上parameterType屬性. 屬性值就是傳遞過來參數的數據類型. <select id="find" parameterType="com.imooc.Message" resultMap="result1"> select * from Message where 1=1 <if test="command!=null"> and command=#{command} </if> </select> 其中在<if test="">標簽下,屬性值是用OGNL表達式來寫的. 如果傳過來的參數的類型是String以及基本數據類型,那么標簽中的OGNL表達式寫法就必須是_parameter.如果傳過來的參數是自定義類型.即本筆記例子,則直接用屬性名(command)即可. 不同的parameterType=""參數類型在OGNL表達式中會有不同的寫法.查看全部
-
動態 SQL MyBatis 的強大特性之一便是它的動態 SQL。如果你有使用 JDBC 或其他類似框架的經驗,你就能體會到根據不同條件拼接 SQL 語句有多么痛苦。拼接的時候要確保不能忘了必要的空格,還要注意省掉列名列表最后的逗號。利用動態 SQL 這一特性可以徹底擺脫這種痛苦。 通常使用動態 SQL 不可能是獨立的一部分,MyBatis 當然使用一種強大的動態 SQL 語言來改進這種情形,這種語言可以被用在任意的 SQL 映射語句中。 動態 SQL 元素和使用 JSTL 或其他類似基于 XML 的文本處理器相似。在 MyBatis 之前的版本中,有很多的元素需要來了解。MyBatis 3 大大提升了它們,現在用不到原先一半的元素就可以了。MyBatis 采用功能強大的基于 OGNL 的表達式來消除其他元素。 動態 SQL 通常要做的事情是有條件地包含 where 子句的一部分,與<if test="">標簽配合使用。比如: <select id="find" parameterType="Blog" resultType="Blog"> SELECT * FROM BLOG WHERE state = ‘ACTIVE’ <if test="title != null"> AND title like #{title} </if> </select> 這條語句提供了一個可選的文本查找類型的功能。如果沒有傳入“title”,那么所有處于“ACTIVE”狀態的BLOG都會返回;反之若傳入了“title”,那么就會把模糊查找“title”內容的BLOG結果返回(就這個例子而言,細心的讀者會發現其中的參數值是可以包含一些掩碼或通配符的)。查看全部
-
一個完整的Sql配置文件: <mapper namespace="User"> <resultMap type="UserAlias" id="UserResult"> <id column="id" jdbcType="INTEGER" property="id"/> <result column="username" jdbcType="VARCHAR" property="username"/> <result column="password" jdbcType="VARCHAR" property="password.encrypted"/> <result column="administrator" jdbcType="BOOLEAN" property="administrator"/> </resultMap> <select id="find" parameterType="long" resultMap="UserResult"> SELECT * FROM user WHERE id = #{id:INTEGER} </select> <delete id="delete" parameterType="UserAlias"> DELETE FROM user WHERE id = #{id:INTEGER} </delete> <insert id="insert" parameterType="UserAlias" useGeneratedKeys="false"> .....//省略 </insert> <update id="update" parameterType="UserAlias"> UPDATE user SET username = #{username,jdbcType=VARCHAR}, password = #{password.encrypted,jdbcType=VARCHAR}, administrator = #{administrator,jdbcType=BOOLEAN} WHERE id = #{id,jdbcType=INTEGER} </update> </mapper>查看全部
-
當配置好Sql配置文件,最后要在主配置文件configuration.xml中的<mappers>標簽下的<mapper>子標簽的resource屬性來指明要關聯的Sql配置文件.一個<mappers>標簽下可以有多個<mapper>標簽,即一個configuration配置文件可以關聯多個Sql配置文件. <mappers> <mapper resource="com/imooc/config/User.xml"/> </mappers>查看全部
-
Sql配置文檔中會有<resultMap>標簽,用來配置數據庫表字段與javabean屬性的關聯. <resultMap type="UserAlias" id="UserResult"> <id column="id" jdbcType="INTEGER" property="id"></id> <result column="username" jdbcType="VARCHAR" property="username"></result> <result column="password" jdbcType="VARCHAR" property="password.encrypted"></result> <result column="administrator" jdbcType="BOOLEAN" property="administrator"></result> </resultMap> 其中<resultMap>標簽有type、id屬性.type屬性指定對應的javabean,id屬性就是標識符. 在<resultMap>標簽下有<id>與<result>子標簽,<id>標簽對應數據庫表的主鍵.普通的字段則用<result>標簽,它們都有column、jdbcType、property屬性.column屬性對應數據庫表的字段名,jdbcType屬性對應該字段名的數據庫中的數據類型.(即java.sql.Types下的屬性名int對應Integer),property屬性對應javabean的屬性名. <select>標簽有resultMap屬性,屬性值與<resultMap>中的id屬性的屬性值一樣.resultMap屬性用來指定此sql語句將在此resultMap中尋找映射關系. <select id="find" resultMap="UserResult"> select * from user where 1=1; </select>查看全部
-
創建Sql配置文件 可以在mybatis-3-mybatis-3.2.8\src\test\java\org\apache\ibatis\submitted\complex_property下的User.xml.把Sql配置文件直接放在src下即可. Sql配置文件的作用是配置Sql語句提供給SqlSession,讓它能讀到并且執行.可以讓一個javabean對應一個Sql配置文件.Sql配置文件里面有很多<select>、<update>、<insert>、<delete>標簽,都有一個id屬性.標簽之間會有對應的sql語句. 在多個Sql配置文件之間標簽的id屬性屬性值都不可以重復.但是在不同Sql配置文件中都有<mapper namespace="">標簽,如果多個Sql配置文件的namespace屬性值都不同,那么這多個Sql配置文件之間可以出現標簽的id屬性值重復. 在同一個Sql文件中的同一個域中不能出現兩個相同的id. Sql配置文件<mapper>標簽一定要存在namespace屬性,否則會加載錯誤. SqlSession對象的select()、selectList()、delete()、insert()、udpate()方法可以執行Sql配置文件中標簽下的sql語句,參數都是在Sql配置文件中標簽的id屬性的屬性值.如果不同sql配置文件的<mapper namespace="">標簽的namespace屬性值都不一樣,則可能會出現相同的id屬性值的標簽.因此在調用方法的參數中應該加上namespace前綴,即select("namespace.id"); 其中selectList()是查詢返回一個集合.select()是查詢一條記錄返回一個對象.查看全部
舉報
0/150
提交
取消