1. 程式人生 > 其它 >[資料庫 06] Mybatis 配置優化 欄位名不對應 日誌 分頁

[資料庫 06] Mybatis 配置優化 欄位名不對應 日誌 分頁

Mybais 優化使用


1. 配置優化

mybatis-config.xml檔案配置標籤:

  • properties 屬性
  • settings 設定
  • typeAliases 類型別名
  • environments 環境配置
  • mappers 對映器

配置xml檔案中,configure的順序:

"configuration" must match "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)"的順序

1. environments 環境變數

預設事務管理器JDBC,預設資料來源是 pooled


結構:

<environments default="">//用於切換預設的環境,選擇id值
    <environment id="">//一般有兩套,一套開發,一套測試
        <transactionManager type="JDBC|MANAGED"></transactionManager></transactionManager>
    				//事務管理器有兩種型別, JDBC和managed
        <dataSource type="UNPOOLED|POOLED|JNDI"> //用於選擇資料來源,連線池(DBCP, C3P0, Druid, Hikari(Spring預設)
            // 預設時pooled,連線之後回收,可以多個連線
            <property></property>
            <property></property>
        </dataSource>
    </environment>
</environments>

2. 屬性(properties):

  1. 可以用過db.properties檔案來動態配置,降低配置檔案的耦合性,方便維護。
drive=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8&useSSL=false
username=root
password=123456
  1. xml配置中引入外部配置檔案:
<properties resource="db.properties"></properties>

properties中可以繼續定義name,value鍵值對,但優先走外部配置檔案

中的鍵值對。

3. typeAliases 類型別名

用來減少完全限定名(全路徑名)的冗餘設定,如返回值resultType引數後的型別不用寫全部包名.實體類名。

有兩種方式:

  1. 在typeAlias標籤中定義 別名:型別
<typeAliases>
    <typeAlias alias="user" type="com.roy.pojo.User"/> 
</typeAliases>
  1. 指定pachage標籤,在標籤中寫入實體類的包名,則可以直接使用
<typeAliases>
    <package name="com.roy.pojo"/> // 只指定到實體類的包名
</typeAliases>

在實體類比較少,使用第一種:屬性alias中直接指定別名

實體類比較多,使用第二種:使用註解,在實體類新增 @Alias("another_name"),則可以在UserMapper.xml中使用返回值物件為resultType = another_name

4. settings 設定

暫時不用

5. mappers 對映器 對映方法

  1. 使用完全限定名載入UserMapper.xml檔案

    <mappers>
        <mapper resource="com/roy/dao/UserMapper.xml"/>
    </mappers>
    
  2. 使用class檔案去載入(載入的是介面)

    兩個問題:介面和Mapper.xml必須同名, 以及兩個檔案必須在同一個包下

    <mappers>
        <mapper class="com.roy.dao.UserMapper"/>
    </mappers>
    
  3. 使用package將介面都註冊為對映器,條件同上2點。

    <mappers>
        <package name="com.roy.dao"/>
    </mappers>
    

6. 生命週期和作用域

  1. mybatis的流程:

SqlSessionFactoryBuilder: 一旦創建出SqlSessionFactory, 就不需要了,區域性變數

SqlSessionFactory: 相當於連線池,一旦被建立,就一直存在於執行期間,最好使用單例模式

SqlSession: 連線池的一個連線,不是執行緒安全的,用完之後需要儘快關閉

  1. SqlSessionFactory和SqlSession 的關係:

SqlSessionFactory 相當於web中的ServletContext, 每一個SqlSession相當於一個個Servlet, Mapper則執行每一個業務

2. 解決屬性名和欄位名不一致問題

1. 原始方法:

修改sql語句,修改為select 欄位名 as 屬性名

2. 結果集對映

在UserMapper.xml檔案中新增結果對映:

<resultMap id="UserMap" type="User">  // id為返回結果map標籤所定義的
    <result column="資料庫中的欄位" property="實體類中的屬性"/>
    <result column="" property=""/>
    <result column="" property=""/>
</resultMap>

<select id="getUserList" resultMap="UserMap"> // 修改返回標籤為resultMap,定義一個名稱
    select * from mybatis.user
</select>

3. 日誌

1. 日誌工廠

之前用sout和debug

Setting標籤中,使用logImpl標籤

2. STDOUT_LOGGING 標準日誌輸出

在setting中新增

<settings>
    <setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>

3. Log4j 日誌

不是標準的包,需要匯入。

  • 可以控制日誌資訊輸送的目的地,
  • 可以控制輸出格式,
  • 可以定義日誌資訊的級別,
  • 可以使用配置檔案靈活配置,不需要修改應用程式碼。

  1. 匯入maven依賴,選2012May版本 1. 2

  2. resources資料夾下新增log4j.properties檔案,配置日誌輸出設定

    #將等級為DEBUG的日誌資訊輸出到console和file這兩個目的地,console和file的定義在下面的程式碼
    log4j.rootLogger=DEBUG,console,file
    
    #控制檯輸出的相關設定
    log4j.appender.console = org.apache.log4j.ConsoleAppender
    log4j.appender.console.Target = System.olog4j.appender.console.Threshold=DEBUG
    log4j.appender.console.Threshold=DEBUG
    log4j.appender.console.layout = org.apache.log4j.PatternLayout
    log4j.appender.console.layout.ConversionPattern=[%c]-%m%n
    
    #檔案輸出的相關設定
    log4j.appender.file = org.apache.log4j.RollingFileAppender
    log4j.appender.file.File=./log/roy.log
    log4j.appender.file.MaxFileSize=10mb
    log4j.appender.file.Threshold=DEBUG
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n
    
    #日誌輸出級別
    log4j.logger.org.mybatis=DEBUG
    log4j.logger.java.sql=DEBUG
    log4j.logger.java.sql.Statement=DEBUG
    log4j.logger.java.sql.ResultSet=DEBUG
    log4j.logger.java.sql.PreparedStatement=DEBUG
    
  3. mybatis-config.xml 檔案中的setting標籤中設定日誌型別

    <settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>
    

4. 簡單使用

在要輸出日誌的類中定義屬性:(匯入的包一定是import org.apache.log4j.Logger;)

static Logger logger = Logger.getLogger(UserMapperTest.class);

在@Test的方法中輸出日誌:可以設定不同的等級。

logger.info("info進入");
logger.debug("debug入");
logger.error("error進入");

4. 分頁實現

1. Limit

sql中:

select *from User 
limit 0,2

UserMapper.java介面:

List<User> getUserByLimit(Map<String, Integer> map);

UserMapper.xml介面實現類:

<select id="getUserByLimit" parameterType="map" resultType="com.roy.pojo.User">
	select * from mybatis.user limit #{startIndex}, #{pageSize}
</select>

測試:

@Test
public void testGetUserByLimit(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    Map<String, Integer> map = new HashMap<String, Integer>();
    map.put("startIndex", 0);
    map.put("pageSize", 3);
    List<User> userList = userMapper.getUserByLimit(map);
    for(User user: userList){
        System.out.println(user);
    }
    sqlSession.close();
}

2. RowBounds(瞭解)

3. PageHelper外掛

自己下載匯入maven配置,匯入plugin配置