日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【MyBatis】MyBatis对Log4J的支持、MyBatis实现新增、删除、修改、查询

發布時間:2024/2/28 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【MyBatis】MyBatis对Log4J的支持、MyBatis实现新增、删除、修改、查询 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

準備:數據庫數據

  • people表
  • people表數據
  • eclipse項目結構

  • 一.注解

  • 注解存在的意義:簡化xml 文件的開發.
  • 注解在servlet 3.0 規范之后大力推廣的.
  • 注解前面的@XXX,表示引用一個@interface
    @interface 表示注解聲明
  • 注解可以有屬性,因為注解其實就是一個接口(類)
    每次使用注解都需要導包
  • 注解語法: @XXXX(屬性名= 值)
  • 值的分類
    如果值是基本數據類型或字符串: 屬性名=值
    如果值是數組類型: 屬性名={值,值}
    如果只有一個值可以省略大括號
    如果值是類類型,屬性名=@名稱
  • 如果注解只需要給一個屬性賦值,且這個屬性是默認屬性,可以省略
    屬性名

  • 二. 路徑

  • 編寫路徑為了告訴編譯器如何找到其他資源.
  • 路徑分類
    相對路徑: 從當前資源出發找到其他資源的過程
    絕對路徑: 從根目錄(服務器根目錄或項目根目錄)出發找到其他資源的過程
    標志: 只要以/開頭的都是絕對路徑
  • 絕對路徑
    如果是請求轉發,/ 表示項目根目錄(WebContent)
    其他重定向,<img/> <script/>,<style/>,location.href 等/都表示服務器根目錄(tomcat/webapps 文件夾)
  • 如果客戶端請求的控制器,控制器轉發到JSP 后,jsp 中如果使用相對路徑,需要按照控制器的路徑去找其他資源.
    保險辦法:使用絕對路徑,可以防止上面的問題.

  • 三. Log4J

  • 由apache 推出的開源免費日志處理的類庫.
  • 為什么需要日志:
    在項目中編寫System.out.println();輸出到控制臺,當項目發布到tomcat 后,沒有控制臺(在命令行界面能看見.),不容易觀察一些輸出結果.
    log4j 作用,不僅能把內容輸出到控制臺,還能把內容輸出到文件中.便于觀察結果.
  • 使用步驟:
    3.1 導入log4j-xxx.jar
    3.2 在src 下新建log4j.properties(路徑和名稱都不允許改變)
    3.2.1 ConversionPattern :寫表達式
    3.2.2 log4j.appender.LOGFILE.File 文件位置及名稱(日志文件擴展名.log)
  • log4j.rootCategory=ERROR, CONSOLE ,LOGFILElog4j.logger.cn.hanquan.mapper=DEBUGlog4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=%C %p %m %nlog4j.appender.LOGFILE=org.apache.log4j.FileAppender log4j.appender.LOGFILE.File=C:/picture/my.log log4j.appender.LOGFILE.Append=true log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout log4j.appender.LOGFILE.layout.ConversionPattern=%C %m %L %n
  • log4j 輸出級別
    4.1 fatal(致命錯誤) > error (錯誤) > warn (警告) > info(普通信息) > debug(調試信息)
    4.2 在log4j.properties 的第一行中控制輸出級別:log4j.rootCategory=ERROR, CONSOLE ,LOGFILE

  • log4j 輸出目的地
    5.1 在一行控制輸出目的地

  • Pattern 中常用幾個表達式
    %C 包名+類名
    %d{YYYY-MM-dd HH:mm:ss} 時間
    %L 行號
    %m 信息
    %n 換行


  • 四. <settings>標簽

  • mybatis 全局配置文件中通過<settings>標簽控制mybatis全局開關
  • 在mybatis.xml 中開啟log4j
    2.1 必須保證有log4j.jar
    2.2 在src下有log4j.properties
  • log4j 中可以輸出指定級別的日志(控制某個局部內容的日志級別)
    3.1命名級別(包級別): <mapper>namespace 屬性中除了最后一個類名
    例如,namespace=”com.bjsxt.mapper.PeopleMapper” 其中包級別為com.bjsxt.mapper ,需要在log4j.propeties中:
    先在總體級別調成Error,不輸出無用信息
    在設置某個指定位置級別為DEBUG

    3.2 類級別
    3.2.1 namespace 屬性值,namespace 類名
    3.3 方法級別
    3.3.2 使用namespace 屬性值+標簽id 屬性值

  • 五、parameterType 屬性

  • 在XXXMapper.xml 中<select><delete>等標簽的parameterType 可以控制參數類型
  • SqlSession 的selectList()和selectOne()的第二個參數和selectMap()的第三個參數都表示方法的參數.
    2.1 java示例

    2.2 在Mapper.xml 中可以通過#{}獲取參數

    parameterType 控制參數類型
    #{}獲取參數內容
    使用索引,從0 開始#{0}表示第一個參數
    也可以使用#{param1}第一個參數
    如果只有一個參數(基本數據類型或String),mybatis對#{}里面內容沒有要求,只要寫內容即可.
    如果參數是對象#{屬性名}
    如果參數是map寫成#{key}
  • #{} 和${} 的區別
    3.1 #{} 獲取參數的內容支持索引獲取,param1 獲取指定位置參數,并且SQL 使用?占位符
    3.2 ${} 字符串拼接不使用?,默認找${內容}內容的get/set 方法,如果寫數字,就是一個數字
  • 如果在xml 文件中出現< , > ,"等特殊字符時,可以使用XML文件轉義標簽(XML 自身的)
    4.1 <![CDATA[ 內容]]>
  • mybatis 中實現mysql 分頁寫法
    5.1 ?不允許在關鍵字前后進行數學運算,需要在java中計算完成后,傳遞到mapper.xml 中
    5.2 在java 代碼中計算

    5.3 在mapper.xml 中代碼

  • 六. typeAliases 別名

  • 系統內置別名: 把類型全小寫
  • 給某個類起別名
    2.1 alias=”自定義別名”

    2.2 在mapper.xml 中,使用別名pp 引用People 類
  • 直接給某個包下所有類起別名,別名為類名,不區分大小寫
    3.1 mybatis.xml 中配置

    3.2 mapper.xml 中通過類名引用

  • 七.MyBatis 實現新增

  • 概念復習
    1.1 功能:從應用程序角度出發,軟件具有哪些功能.
    1.2 業務:完成功能時的邏輯.對應Service 中一個方法
    1.3 事務:從數據庫角度出發,完成業務時需要執行的SQL 集合,統稱一個事務.
    1.3.1 事務回滾.如果在一個事務中某個SQL 執行事務,希望回歸到事務的原點,保證數據庫數據的完整性.
  • 在mybatis 中默認是關閉了JDBC 的自動提交功能
    2.1 每一個SqlSession 默認都是不自動提交事務.
    2.2 session.commit()提交事務.
    2.3 openSession(true);自動提交.setAutoCommit(true);
  • mybatis 底層是對JDBC 的封裝.
    3.1 JDBC 中executeUpdate()執行新增,刪除,修改的SQL.返回值int,表示受影響的行數.
    3.2 mybatis 中<insert> <delete> <update>標簽沒有resultType 屬性,
    認為返回值都是int
  • 在openSession() 時Mybatis 會創建SqlSession 時同時創建一個
    Transaction(事務對象),同時autoCommit 都為false
    4.1 如果出現異常,應該session.rollback()回滾事務.
  • 實現新增的步驟
    5.1 在mapper.xml 中提供<insert>標簽,標簽沒有返回值類型

    5.2 通過session.insert()調用新增方法

  • 八.MyBatis 實現修改

  • 在mapper.xml 中提供<update>標簽
  • <update id="upd" parameterType="People">update people set name = #{name} where id = #{id}</update>
  • 編寫Java代碼
  • People peo = new People();peo.setId(3);peo.setName("王五");int index = session.update("a.b.upd", peo);if(index>0){System.out.println("成功");}else{System.out.println("失敗");}session.commit();

    九.mybatis 實現刪除

  • 在mapper.xml 提供<delete>標簽
  • <delete id="del" parameterType="int">delete from people where id = #{0}</delete>
  • 編寫Java代碼
  • int del = session.delete("a.b.del",3);if(del>0){System.out.println("成功");}else{System.out.println("失敗");}session.commit();

    以上(增加、查詢)示例代碼

    Test.java

    package cn.hanquan.test;import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.List; import java.util.Map;import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder;import cn.hanquan.pojo.People;public class Test {public static void main(String[] args) throws IOException {InputStream is = Resources.getResourceAsStream("mybatis.xml");// 工廠模式+構建者模式SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);SqlSession session = factory.openSession();// 查詢語句// 1、查詢語句無參數List<People> list1 = session.selectList("cn.hanquan.mapper.PeopleMapper.selAll");System.out.println(list1 + "\n");// 2、查詢語句含一個參數People p2 = session.selectOne("cn.hanquan.mapper.PeopleMapper.selOne", 2);System.out.println(p2 + "\n");// 3、查詢語句含多個參數:使用MapMap<String, Object> m3 = new HashMap<String, Object>();m3.put("name", "張三");m3.put("age", 25);People p3 = (People) session.selectOne("cn.hanquan.mapper.PeopleMapper.selList", m3);System.out.println(p3 + "\n");// 4、查詢語句在xml文件中出現< , > ,雙引號等特殊字符List<People> list4 = session.selectList("cn.hanquan.mapper.PeopleMapper.selSpecial", 3);System.out.println(list4 + "\n");// 5、實現分頁int pgSize = 2;int pgNum = 3;Map<String, Object> m5 = new HashMap<String, Object>();m5.put("pgSize", pgSize);m5.put("pgStart", pgSize * (pgNum - 1));List<People> list5 = session.selectList("cn.hanquan.mapper.PeopleMapper.selPage", m5);System.out.println(list5 + "\n");// 6、在mybatis.xml中給類起別名List<People> list6 = session.selectList("cn.hanquan.mapper.PeopleMapper.selAlias");System.out.println(list6 + "\n");// 7、在mybatis.xml中通過類名引用List<People> list7 = session.selectList("cn.hanquan.mapper.PeopleMapper.selAliasPkg");System.out.println(list7 + "\n");// 插入語句People p8 = new People();p8.setName("小李");p8.setAge(30);int line8 = session.insert("cn.hanquan.mapper.PeopleMapper.ins", p8);System.out.println(line8);session.commit();// mybatis默認關閉了JDBC的自動提交功能。增刪改的時候,需要手動提交事務// session.rollback();//在try..catch中使用rollback回滾事務session.close();} }

    mybatis.xml

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration><settings><setting name="logImpl" value="LOG4J"/></settings><!-- 給類起別名 --><typeAliases><typeAlias type="cn.hanquan.pojo.People" alias="pp"/><package name="cn.hanquan.pojo"/></typeAliases><environments default="default"><environment id="default"><transactionManager type="JDBC"></transactionManager><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/people?serverTimezone=UTC"/><property name="username" value="root"/><property name="password" value="g67108864"/></dataSource></environment></environments><mappers><mapper resource="cn/hanquan/mapper/PeopleMapper.xml"/></mappers> </configuration>

    PeopleMapper.xml

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- 填寫實例化的包名+類名,在java代碼中調用語句的時候使用 --> <mapper namespace="cn.hanquan.mapper.PeopleMapper"><!-- 查詢語句 --><!-- 不含參數 --><select id="selAll" resultType="cn.hanquan.pojo.People">select * from people</select><!-- 一個參數 --><select id="selOne" resultType="cn.hanquan.pojo.People" parameterType="int">select * from people where id=#{0}</select><!-- 多個參數 --><select id="selList" resultType="cn.hanquan.pojo.People" parameterType="map">select * from people where name=#{name} and age=#{age}</select><!-- 語句中含有<>等特殊符號 --><select id="selSpecial" resultType="cn.hanquan.pojo.People" parameterType="int"><![CDATA[select * from people where id>#{0}]]></select><!-- limit分頁查詢 --><select id="selPage" resultType="cn.hanquan.pojo.People" parameterType="map">select * from people limit #{pgStart}, #{pgSize}</select><!-- 在mybatis.xml中給類起別名 --><select id="selAlias" resultType="pp">select * from people</select><!-- 在mybatis.xml中通過類名引用 --><select id="selAliasPkg" resultType="People">select * from people</select><!-- 插入語句 --><insert id="ins" parameterType="People">insert into people values(default, #{name}, #{age})</insert></mapper>

    輸出

    org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG ==> Preparing: select * from people org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG ==> Parameters: org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG <== Total: 9 [People [id=1, name=小明, age=25], People [id=2, name=張三, age=23], People [id=3, name=張三, age=24], People [id=4, name=張三, age=25], People [id=5, name=張三, age=26], People [id=6, name=張六, age=26], People [id=7, name=張七, age=0], People [id=8, name=張八, age=28], People [id=9, name=張九, age=29]]org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG ==> Preparing: select * from people where id=? org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG ==> Parameters: 2(Integer) org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG <== Total: 1 People [id=2, name=張三, age=23]org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG ==> Preparing: select * from people where name=? and age=? org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG ==> Parameters: 張三(String), 25(Integer) org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG <== Total: 1 People [id=4, name=張三, age=25]org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG ==> Preparing: select * from people where id>? org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG ==> Parameters: 3(Integer) org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG <== Total: 6 [People [id=4, name=張三, age=25], People [id=5, name=張三, age=26], People [id=6, name=張六, age=26], People [id=7, name=張七, age=0], People [id=8, name=張八, age=28], People [id=9, name=張九, age=29]]org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG ==> Preparing: select * from people limit ?, ? org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG ==> Parameters: 4(Integer), 2(Integer) org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG <== Total: 2 [People [id=5, name=張三, age=26], People [id=6, name=張六, age=26]]org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG ==> Preparing: select * from people org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG ==> Parameters: org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG <== Total: 9 [People [id=1, name=小明, age=25], People [id=2, name=張三, age=23], People [id=3, name=張三, age=24], People [id=4, name=張三, age=25], People [id=5, name=張三, age=26], People [id=6, name=張六, age=26], People [id=7, name=張七, age=0], People [id=8, name=張八, age=28], People [id=9, name=張九, age=29]]org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG ==> Preparing: select * from people org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG ==> Parameters: org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG <== Total: 9 [People [id=1, name=小明, age=25], People [id=2, name=張三, age=23], People [id=3, name=張三, age=24], People [id=4, name=張三, age=25], People [id=5, name=張三, age=26], People [id=6, name=張六, age=26], People [id=7, name=張七, age=0], People [id=8, name=張八, age=28], People [id=9, name=張九, age=29]]org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG ==> Preparing: insert into people values(default, ?, ?) org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG ==> Parameters: 小李(String), 30(Integer) org.apache.ibatis.logging.jdbc.BaseJdbcLogger DEBUG <== Updates: 1 1

    總結

    以上是生活随笔為你收集整理的【MyBatis】MyBatis对Log4J的支持、MyBatis实现新增、删除、修改、查询的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。