mybatissql配置
❶ mybatis-plus日誌輸出sql配置(控制台能輸出sql日誌沒有sql問題)
看下spring boot配置文件中的mybatis部分
一般配置debug級別日誌,基本日誌都能輸出了,之前配置,這個是標準的輸出,控制台正常輸出,但是不會寫到日誌文件中,所以一旦上傳測試或生產,自動過濾sql部分日誌
但是我們也希望在測試環境也能看
改成如下配置
另外日誌級別改為debug,可以直接
就整體都是debug了
如果需要局部控制,可以配置多個level
只要是com.xxxx,com.aaa下的日誌輸出均是debug
❷ mybatis中的sql語句完整配置文件怎麼寫
Mybatis 分多個配置文件方法,考慮一個項目會很多模塊,如果團體開發的話用不同模塊在不同的配置文件可以這樣實現: 標簽裡面只能放SQL映射文件 Mybatis配置文件 XML code Spring裡面的配置文件XML code。 當你程序需要執行的時候
❸ mybatis的sqlmappconfig.xml中的masql資料庫怎麼配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 參數設置 -->
<settings>
<!-- 這個配置使全局的映射器啟用或禁用緩存 -->
<setting name="cacheEnabled" value="true" />
<!-- 全局啟用或禁用延遲載入。當禁用時,所有關聯對象都會即時載入 -->
<setting name="lazyLoadingEnabled" value="true" />
<!-- 當啟用時,有延遲載入屬性的對象在被調用時將會完全載入任意屬性。否則,每種屬性將會按需要載入 -->
<setting name="aggressiveLazyLoading" value="true" />
<!-- 允許或不允許多種結果集從一個單獨的語句中返回(需要適合的驅動) -->
<setting name="multipleResultSetsEnabled" value="true" />
<!-- 使用列標簽代替列名。不同的驅動在這方便表現不同。參考驅動文檔或充分測試兩種方法來決定所使用的驅動 -->
<setting name="useColumnLabel" value="true" />
<!-- 允許JDBC支持生成的鍵。需要適合的驅動。如果設置為true則這個設置強制生成的鍵被使用,盡管一些驅動拒絕兼容但仍然有效(比如Derby) -->
<setting name="useGeneratedKeys" value="true" />
<!-- 指定MyBatis如何自動映射列到欄位/屬性。PARTIAL只會自動映射簡單,沒有嵌套的結果。FULL會自動映射任意復雜的結果(嵌套的或其他情況) -->
<setting name="autoMappingBehavior" value="PARTIAL" />
<!--當檢測出未知列(或未知屬性)時,如何處理,默認情況下沒有任何提示,這在測試的時候很不方便,不容易找到錯誤。
NONE : 不做任何處理 (默認值)
WARNING : 警告日誌形式的詳細信息
FAILING : 映射失敗,拋出異常和詳細信息
-->
<setting name="" value="WARNING"/>
<!-- 配置默認的執行器。SIMPLE執行器沒有什麼特別之處。REUSE執行器重用預處理語句。BATCH執行器重用語句和批量更新 -->
<setting name="defaultExecutorType" value="SIMPLE" />
<!-- 設置超時時間,它決定驅動等待一個資料庫響應的時間 -->
<setting name="defaultStatementTimeout" value="25000" />
<!--設置查詢返回值數量,可以被查詢數值覆蓋 -->
<setting name="defaultFetchSize" value="100"/>
<!-- 允許在嵌套語句中使用分頁-->
<setting name="safeRowBoundsEnabled" value="false"/>
<!--是否開啟自動駝峰命名規則(camel case)映射,即從經典資料庫列名 A_COLUMN 到經典 java 屬性名 aColumn 的類似映射。-->
<setting name="mapUnderscoreToCamelCase" value="false"/>
<!--MyBatis 利用本地緩存機制(Local Cache)防止循環引用(circular references)和加速重復嵌套查詢。 默認值為 SESSION,這種情況下會緩存一個會話中執行的所有查詢。 若設置值為 STATEMENT,本地會話僅用在語句執行上,對相同 SqlSession 的不同調用將不會共享數據。-->
<setting name="localCacheScope" value="SESSION"/>
<!-- 當沒有為參數提供特定的 JDBC 類型時,為空值指定 JDBC 類型。 某些驅動需要指定列的 JDBC 類型,多數情況直接用一般類型即可,比如 NULL、VARCHAR
OTHER。-->
<setting name="jdbcTypeForNull" value="OTHER"/>
<!-- 指定哪個對象的方法觸發一次延遲載入。-->
<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>
<!-- 別名定義 -->
<typeAliases>
<typeAlias alias="pageAccessURL" type="com.lgm.mybatis.model.PageAccessURL" />
</typeAliases>
<!--自定義類型處理器 -->
<typeHandlers>
<!-- <typeHandler handler="com.xhm.util.BooleanTypeHandlder" /> -->
<!--掃描整個包下的自定義類型處理器-->
<package name="com.xhm.util"/>
</typeHandlers>
<!--plugins插件之 分頁攔截器 -->
<plugins>
<plugin interceptor="com.xhm.util.PageInterceptor"></plugin>
</plugins>
<!--配置environment環境-->
<environments default="development">
<!-- 環境配置1,每個SqlSessionFactory對應一個環境 -->
<environment id="development1">
<!-- 事務配置 type= JDBC、MANAGED 1.JDBC:這個配置直接簡單使用了JDBC的提交和回滾設置。它依賴於從數據源得到的連接來管理事務范圍。
2.MANAGED:這個配置幾乎沒做什麼。它從來不提交或回滾一個連接。而它會讓容器來管理事務的整個生命周期(比如Spring或JEE應用伺服器的上下文)。 默認情況下它會關閉連接。然而一些容器並不希望這樣,因此如果你需要從連接中停止它,將closeConnection屬性設置為false -->
<transactionManager type="JDBC" />
<!-- <transactionManager type="MANAGED">
<property name="closeConnection" value="false"/>
</transactionManager> -->
<!-- 數據源類型:type = UNPOOLED、POOLED、JNDI 1.UNPOOLED:這個數據源的實現是每次被請求時簡單打開和關閉連接。它有一點慢,這是對簡單應用程序的一個很好的選擇,因為它不需要及時的可用連接。
不同的資料庫對這個的表現也是不一樣的,所以對某些資料庫來說配置數據源並不重要,這個配置也是閑置的 2.POOLED:這是JDBC連接對象的數據源連接池的實現,用來避免創建新的連接實例時必要的初始連接和認證時間。
這是一種當前Web應用程序用來快速響應請求很流行的方法。 3.JNDI:這個數據源的實現是為了使用如Spring或應用伺服器這類的容器,容器可以集中或在外部配置數據源,然後放置一個JNDI上下文的引用 -->
<dataSource type="UNPOOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/xhm" />
<property name="username" value="root" />
<property name="password" value="root" />
<!-- 默認連接事務隔離級別 <property name="" value=""
/> -->
</dataSource>
</environment>
<!-- 環境配置2 -->
<environment id="development2">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/xhm" />
<property name="username" value="root" />
<property name="password" value="root" />
<!-- 在任意時間存在的活動(也就是正在使用)連接的數量 -->
<property name="poolMaximumActiveConnections" value="10" />
<!-- 任意時間存在的空閑連接數 -->
<property name="poolMaximumIdleConnections" value="5" />
<!-- 在被強制返回之前,池中連接被檢查的時間 -->
<property name="poolMaximumCheckoutTime" value="20000" />
<!-- 這是給連接池一個列印日誌狀態機會的低層次設置,還有重新嘗試獲得連接,這些情況下往往需要很長時間(為了避免連接池沒有配置時靜默失敗) -->
<property name="poolTimeToWait" value="20000" />
<!-- 發送到數據的偵測查詢,用來驗證連接是否正常工作,並且准備接受請求。 -->
<property name="poolPingQuery" value="NO PING QUERY SET" />
<!-- 這是開啟或禁用偵測查詢。如果開啟,你必須用一個合法的SQL語句(最好是很快速的)設置poolPingQuery屬性 -->
<property name="poolPingEnabled" value="false" />
<!-- 這是用來配置poolPingQuery多次時間被用一次。這可以被設置匹配標準的資料庫連接超時時間,來避免不必要的偵測 -->
<property name="poolPingConnectionsNotUsedFor" value="0" />
</dataSource>
</environment>
<!-- 環境配置3 -->
<environment id="development3">
<transactionManager type="JDBC" />
<dataSource type="JNDI">
<property name="data_source" value="java:comp/env/jndi/mybatis" />
<property name="env.encoding" value="UTF8" />
<!-- <property name="initial_context" value=""/> <property name="env.encoding"
value="UTF8"/> -->
</dataSource>
</environment>
</environments>
<!-- 映射文件,mapper的配置文件 -->
<mappers>
<!--直接映射到相應的mapper文件-->
<mapper resource="com/xhm/mapper/UserMapper.xml"/>
<!--掃描包路徑下所有xxMapper.xml文件-->
<package name="com.xhm.mapper"/>
</mappers>
</configuration>
❹ mybatis執行sql
SqlSessionFactoryBuilder 的實例化分兩步。第一步 解析配置文件 得到configuration對象,第二步實例化DefaultSqlSessionFactory記錄configuration。
sqlSessionFactory.openSession()這一步就厲害了,完成了事務管理對象實例化、執行器實例化、執行器代理(攔截器鏈)。到這一步為止完成了defaultSqlSessionFactory會話創建。
sqlSession.getMapper()是通過從configuration的mapperRegistry中獲取mapper.class的MapperProxyFactory對象,再用MapperProxyFactory對象生產出一個MapperProxy的代理對象。到這里完成了對mapper類代理對象的創建,後續調用mapper類的方法時將會由mapperProxy處理。
userMapper.queryUser()真正做事的時候到了。由上文可知mapper類的方法被調用時將會由mapperProxy代替處理,所以第一站就是mapperProxy的invoke()
由下圖可知,緩存的位置位於CachingExecutor中的localCache,
而Executor是在openSession時創建,由此可知一級緩存是sqlSesssion級別的。
cacheKey的組成:ms, parameter, rowBounds, boundSql
由下圖可知,二級緩存與MappedStatement有關,在MappedStatement中共享一個Cache對象,而MappedStatement位於configuration,所以二級緩存可以跨sqlSession。
❺ mybatis基本配置詳解
中間步驟自行設置
MySQL驅動版本根據自己安裝的MySQL選擇
我把AppTest改成了MybatisTest,不該也無妨;
其中Student類暫時只設置四個欄位:
mapper介面暫時為空
在resources目錄下新建File命名為db.peoperties,配置如下內容:
提示:以上配置適用於MySQL8.X版本,5.X版本按照如下配置:
1、transactionManager:事務管理器;
type 事務管理類型:
JDBC(JdbcTransactionFactory);
MANAGED(ManagedTransactionFactory)
自定義事務管理器:實現TransactionFactory介面.type指定為全類名
2、dataSource:數據源;
type :數據源類型;
UNPOOLED(UnpooledDataSourceFactory); POOLED(PooledDataSourceFactory);
JNDI(JndiDataSourceFactory)
自定義數據源:實現DataSourceFactory介面,type是全類名
<mapper>:注冊一個sql映射文件
1、注冊映射文件
resource:引用類路徑下的sql映射文件
mybatis/StudentMapperpper.xml
url:引用網路路徑或者磁碟路徑下的sql映射文件
file:///var/mappers/AuthorMapper.xml
2、注冊介面
class:引用(注冊)介面,
① 有sql映射文件,映射文件名必須和介面同名,並且放在與介面同一目錄下;
② 沒有sql映射文件,所有的sql都是利用註解寫在介面上;
推薦:
比較重要的,復雜的Dao介面我們來寫sql映射文件
不重要,簡單的Dao介面為了開發快速可以使用註解;
批量注冊
需要在資源路徑下(resources)建立和一樣的文件目錄來存放想xml映射文件,如:com.example.StudentMapperpper.xml
StudentMapper
在resources的mybatis目錄下新建文件夾mapper,新建xml文件StudentMapper.xml
namespace :名稱空間;指定為介面的全類名
id :唯一標識
resultType :返回值類型
#{id} :從傳遞過來的參數中取出id值
resources目錄(MajorMapper.xml暫時不用創建)如下:
❻ mybatis中特殊SQL的幾種配置方法
1.in條件for循環
<select id="getBooList" resultMap="java.util.Map" parameterType="java.util.List" >
select booking_no, max(booking_general_seq) max_seq from interface_booking_t where booking_no in
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
#{item}
</foreach>
group by booking_no
</select>
2.insert並且返回主鍵
<insert id="insertAndGetId" parameterType="com.phy.mlisp.management.domain.Document">
<selectKey resultType="long" order="BEFORE" keyProperty="id">
SELECT MLISP_DOCUMENT_SEQ.NEXTVAL as ID from DUAL
</selectKey>
insert into MLISP_DOCUMENT_T (ID, NAME, ALIAS,
FILE_SIZE,CONTENT,STATUS,CREATE_BY,CREATE_DATE,LAST_UPDATE_BY,
LAST_UPDATE_DATE)
values (#{id},#{name,jdbcType=VARCHAR}, #{alias,jdbcType=VARCHAR},#{fileSize,jdbcType=INTEGER},
#{content,jdbcType=BLOB},
#{status,jdbcType=INTEGER},#{createBy,jdbcType=VARCHAR},SYSDATE,
#{lastUpdateBy,jdbcType=VARCHAR},SYSDATE)
</insert>
3.批量insert
<insert id="batchInsert" parameterType="java.util.List">
insert into INTERFACE_BOOKING_CONTA_T (ID, BOOKING_ID, BOOKING_CONTAINER_SEQ,
CONTA_TYPE, CONTA_SIZE, CONTA_QUANTITY,
CONTA_SIZE_TYPE_ISO)
select interface_booking_conta_seq.NEXTVAL,A.* from(
<foreach collection="list" item="item" index="index" separator="UNION ALL" >
(select #{item.bookingId,jdbcType=DECIMAL}, #{item.bookingContainerSeq,jdbcType=DECIMAL},
#{item.contaType,jdbcType=VARCHAR}, #{item.contaSize,jdbcType=VARCHAR}, #{item.contaQuantity,jdbcType=DECIMAL},
#{item.contaSizeTypeIso,jdbcType=VARCHAR} from al)
</foreach>) A
</insert>
4.批量更新
<update id="batchUpdate" parameterType="java.util.List">
<foreach collection="list" item="item" index="index" open="begin" close=";end;" separator=";">
UPDATE WCP_DISPATCH_CONTA_T
<set>
<if test="item.dispatchId != null">
DISPATCH_ID = #{item.dispatchId,jdbcType=DECIMAL},
</if>
</set>
WHERE DISPATCH_ID = #{item.dispatchId,jdbcType=DECIMAL}
</foreach>
</update>
❼ mybatis怎麼配置log4j列印出sql語句
在程序調試時mybatis並沒有hibernate所提供的showsql功能,只能通過配置log4j日誌輸出級別的方式來列印sql。但網上搜到的答案幾乎都是下面的配置方式:
log4j.rootLogger=info,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
###顯示SQL語句部分
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=
rootLogger的級別是info,防止其他地方輸出debug的調試代碼(rootLogger若設為debug了,mybatis也沒必要再設置了)。但這段代碼根本沒有作用!不知是不是我使用的jar包版本比較新的緣故(3.4.1)。經過一系列的嘗試,終於找到了解決方案,直接修改層的輸出級別即可:
<loggers>
<Logger name="com.github.vita.code." level="trace" />
<root level="info">
<appender-ref ref="Console"/>
</root>
</loggers>123456123456
上面的是log4j 2的XML配置,1中對應的為log4j.logger.com.github.vita.code.=trace。這兒把輸出調成了更低的trace,可以看到更詳細的信息。
❽ mybatis 配置sql 當返回值為int的時候,resulttype怎麼寫
resultType="java.lang.Integer"
Integer如果一條都沒有是會返回null的,所以不會報錯,而用int的話沒有會返回0
MyBatis中在查詢進行select映射的時候,返回類型可以用resultType,也可以用resultMap,resultType是直接表示返回類型的,而resultMap則是對外部ResultMap的引用,但是resultType跟resultMap不能同時存在。
(8)mybatissql配置擴展閱讀:
注意事項
一、若<sql /> 查詢語句中配置的是resultType=「實體類/DTO」 ,則從mybatis返回的鍵值對結果集(Map)會直接賦值給該DTO(根據set()/get()方法,因此該DTO屬性名要與表欄位名一致,若不一致,可再sql查詢語句中用as 更換查出來表欄位名)中相映射的屬性值,而與該mappper.xml文件配置<mapper/>里的<resultMap/>無關。
二、若<sql /> 查詢語句中配置的是resultMap=「<mapper/>中配置的<resultMap/>」,則從mybatis返回的鍵值對結果集(Map)會根據該<resultMap/>配置中(column-property)的相應屬性賦值。
❾ mybatis配置文件里怎麼格式化sql
第一步:新建一個java項目。