欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mybatis?ResultMap和分頁操作示例詳解

 更新時間:2023年10月11日 10:41:40   作者:phang  
這篇文章主要為大家介紹了Mybatis?ResultMap和分頁操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

1. ResultMap

現(xiàn)有數(shù)據庫的字段為:

  • id
  • name
  • pwd

為了其字段的名字,在pojo中的User的字段名和其一樣:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    int id;
    String name;
    String pwd;
}

UserMapper.xml :

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dao.UserMapper">
    <select id="getAllUser" resultType="com.pojo.User">
        select * from user
    </select>
</mapp

這樣能保證不會出錯。若是將User的“pwd”改為“password”,則對應的password結果就會為空。

解決該問題,

方法一:"as"

<select id="getAllUser" resultType="com.pojo.User">
        select id, name, pwd as password from user
    </select>

User字段的為“password”,數(shù)據庫字段為“pwd”,那就使用Sql的原生語句as,就可以將查詢字段和User中字段相對應。

方法二:resultMap(結果映射)

可以使用 <ResultMap>標簽將數(shù)據庫中的字段和User中的字段相對應:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dao.UserMapper">
    <resultMap id="UserMapper" type="com.pojo.User">
       <!-- column是數(shù)據庫表的列名 , property是對應實體類的屬性名 -->
        <result column="id" property="id"/>
        <result column="name" property="name"/>
        <result column="pwd" property="password"/>
    </resultMap>
    <select id="getAllUser" resultMap="UserMapper">
        select * from user
    </select>
</mapper>

其中,單獨設置resultMap標簽,來使數(shù)據庫中的字段和User對應上。 resultMap中的id 對應著 <select>標簽中的resultMap (原來為resultType)

2. 日志

日志工廠

思考:我們在測試SQL的時候,要是能夠在控制臺輸出 SQL 的話,是不是就能夠有更快的排錯效率?

如果一個 數(shù)據庫相關的操作出現(xiàn)了問題,我們可以根據輸出的SQL語句快速排查問題。

對于以往的開發(fā)過程,我們會經常使用到debug模式來調節(jié),跟蹤我們的代碼執(zhí)行過程。但是現(xiàn)在使用Mybatis是基于接口,配置文件的源代碼執(zhí)行過程。因此,我們必須選擇日志工具來作為我們開發(fā),調節(jié)程序的工具。

使用方法:

在 mybatis-config.xml 中添加。

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

注意:日志功能的開啟是 name = "logImpl", value的值就是各種類型的日志。
注意:

  • value="STDOUT_LOGGING"中不能出現(xiàn)空格,例如 value="STDOUT_LOGGING "就是錯誤的。
  • STDOUT_LOGGING是標準輸出日志

Log4j

  • Log4j是Apache的一個開源項目
  • 通過使用Log4j,我們可以控制日志信息輸送的目的地:控制臺,文本,GUI組件....
  • 我們也可以控制每一條日志的輸出格式;
  • 通過定義每一條日志信息的級別,我們能夠更加細致地控制日志的生成過程。最令人感興趣的就是,這些可以通過一個配置文件來靈活地進行配置,而不需要修改應用的代碼。
  • 要使用 Log4j首先導入相關的包:
<dependency>
   <groupId>log4j</groupId>
   <artifactId>log4j</artifactId>
   <version>1.2.17</version>
</dependency>
  • 創(chuàng)建 log4j.properties 配置文件:
#將等級為DEBUG的日志信息輸出到console和file這兩個目的地,console和file的定義在下面的代碼
log4j.rootLogger=DEBUG,console,file
#控制臺輸出的相關設置
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
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/kuang.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
  • 配置 log4j的實現(xiàn):
<settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>
  • log4j簡單使用:
  • 導入的包是org.apache.log4j.Logger

一個配置完整的 settings 元素的示例如下:

<settings>
  <setting name="cacheEnabled" value="true"/>
  <setting name="lazyLoadingEnabled" value="true"/>
  <setting name="multipleResultSetsEnabled" value="true"/>
  <setting name="useColumnLabel" value="true"/>
  <setting name="useGeneratedKeys" value="false"/>
  <setting name="autoMappingBehavior" value="PARTIAL"/>
  <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
  <setting name="defaultExecutorType" value="SIMPLE"/>
  <setting name="defaultStatementTimeout" value="25"/>
  <setting name="defaultFetchSize" value="100"/>
  <setting name="safeRowBoundsEnabled" value="false"/>
  <setting name="mapUnderscoreToCamelCase" value="false"/>
  <setting name="localCacheScope" value="SESSION"/>
  <setting name="jdbcTypeForNull" value="OTHER"/>
  <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>

3. 分頁

在學習mybatis等持久層框架的時候,會經常對數(shù)據進行增刪改查操作,使用最多的是對數(shù)據庫進行查詢操作,如果查詢大量數(shù)據的時候,我們往往使用分頁進行查詢,也就是每次處理小部分數(shù)據,這樣對數(shù)據庫壓力就在可控范圍內。

Limit 分頁

#語法
SELECT * FROM table LIMIT stratIndex,pageSize
SELECT * FROM table LIMIT 5,10; // 檢索記錄行 6-15  
#為了檢索從某一個偏移量到記錄集的結束所有的記錄行,可以指定第二個參數(shù)為 -1:   
SELECT * FROM table LIMIT 95,-1; // 檢索記錄行 96-last.  
#如果只給定一個參數(shù),它表示返回最大的記錄行數(shù)目:   
SELECT * FROM table LIMIT 5; //檢索前 5 個記錄行  
#換句話說,LIMIT n 等價于 LIMIT 0,n。

步驟:

  • UserMapper接口中添加:
//選擇全部用戶實現(xiàn)分頁
List<User> selectUser(Map<String,Integer> map);
  • UserMapp.xml中添加:
<select id="selectUser" parameterType="map" resultType="com.pojo.user">
  select * from user limit #{startIndex},#{pageSize}
</select>
  • Test:
@Test
    public void testLimitUser(){
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        Map<String,Integer> map = new HashMap<String,Integer>();
        map.put("indexPage",0);
        map.put("endPage",2);
        List<User> userList = userMapper.getLimitByUser(map);
        for (User user : userList) {
            System.out.println(user);
        }
        sqlSession.close();
    }

4. 注解開發(fā)

mybatis最初配置信息是基于 XML ,映射語句(SQL)也是定義在 XML 中的。而到MyBatis 3提供了新的基于注解的配置。不幸的是,Java 注解的的表達力和靈活性十分有限。最強大的 MyBatis 映射并不能用注解來構建。

sql 類型主要分成 :

  • @Select ()
  • @Update ()
  • @Insert ()
  • @Delete ()

注意:利用注解開發(fā)就不需要mapper.xml映射文件了 .
在mybatis-config.xml這樣導入:

<mappers>
        <mapper class="com.dao.UserMapper" />
    </mappers>

區(qū)別于之前的mapper.xml的導入:

<mappers>
        <mapper resource="com/dao/UserMapper.xml"/>
    </mappers>

為了實現(xiàn)事務的提交,在MyBatis中:

public class MyBatisUtils {
    static SqlSessionFactory sqlSessionFactory;
    static {
        String resource = "mybatis-config.xml";
        InputStream inputStream = null;
        try {
            inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }
}

中對sqlSessionFactory.openSession()的參數(shù)設置:

sqlSessionFactory.openSession(true);就可以實現(xiàn)自動提交事務。

查詢

編寫接口方法注解

//根據id查詢用戶
@Select("select * from user where id = #{id}")
User selectUserById(@Param("id") int id);
  • 測試
@Test
public void testSelectUserById() {
   SqlSession session = MybatisUtils.getSession();
   UserMapper mapper = session.getMapper(UserMapper.class);
   User user = mapper.selectUserById(1);
   System.out.println(user);
   session.close();
}

新增

//添加一個用戶
@Insert("insert into user (id,name,pwd) values (#{id},#{name},#{pwd})")
int addUser(User user);

Test:

@Test
public void testAddUser() {
   SqlSession session = MybatisUtils.getSession();
   UserMapper mapper = session.getMapper(UserMapper.class);
   User user = new User(6, "秦疆", "123456");
   mapper.addUser(user);
   session.close();
}

修改

//修改一個用戶
@Update("update user set name=#{name},pwd=#{pwd} where id = #{id}")
int updateUser(User user);

刪除

//根據id刪除用
@Delete("delete from user where id = #{id}")
int deleteUser(@Param("id")int id);

Test:

@Test
public void testDeleteUser() {
   SqlSession session = MybatisUtils.getSession();
   UserMapper mapper = session.getMapper(UserMapper.class);
   mapper.deleteUser(6);
   session.close();
}

注意:

  • 增刪改一定記得對事務的處理
  • 注釋的話,一定要把類通過<mappers class="">注冊到 mybatis-config.xml 中去;配置的話,一定要把UserMapper.xml(xxMapper.xml)通過<mappers resouce="">注冊到 mybatis-config.xml 中去

@Param

@Param注解用于給方法參數(shù)起一個名字。以下是總結的使用原則:

  • 在方法只接受一個參數(shù)的情況下,可以不使用@Param。
  • 在方法接受多個參數(shù)的情況下,建議一定要使用@Param注解給參數(shù)命名。
  • 如果參數(shù)是 JavaBean , 則不能使用@Param。
  • 不使用@Param注解時,參數(shù)只能有一個,并且是Javabean。

以上就是Mybatis ResultMap和分頁操作示例詳解的詳細內容,更多關于Mybatis ResultMap分頁的資料請關注腳本之家其它相關文章!

相關文章

  • Java數(shù)據結構和算法之冒泡,選擇和插入排序算法

    Java數(shù)據結構和算法之冒泡,選擇和插入排序算法

    這篇文章主要為大家介紹了Java冒泡,選擇和插入排序算法 ,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • java實現(xiàn)幸運抽獎功能

    java實現(xiàn)幸運抽獎功能

    這篇文章主要為大家詳細介紹了java實現(xiàn)幸運抽獎功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • java基于swing實現(xiàn)的連連看代碼

    java基于swing實現(xiàn)的連連看代碼

    這篇文章主要介紹了java基于swing實現(xiàn)的連連看代碼,包含了游戲中涉及的事件處理與邏輯功能,需要的朋友可以參考下
    2014-11-11
  • Java編程一維數(shù)組轉換成二維數(shù)組實例代碼

    Java編程一維數(shù)組轉換成二維數(shù)組實例代碼

    這篇文章主要介紹了Java編程一維數(shù)組轉換成二維數(shù)組,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • Java 中的 Unsafe 魔法類的作用大全

    Java 中的 Unsafe 魔法類的作用大全

    Unsafe是位于sun.misc包下的一個類,主要提供一些用于執(zhí)行低級別、不安全操作的方法,關于Java 中的 Unsafe 魔法類,到底有啥用處,你都了解嗎,下面通過本文給大家普及一下
    2021-06-06
  • Java構造代碼塊,靜態(tài)代碼塊原理與用法實例分析

    Java構造代碼塊,靜態(tài)代碼塊原理與用法實例分析

    這篇文章主要介紹了Java構造代碼塊,靜態(tài)代碼塊,結合實例形式分析了Java構造代碼塊,靜態(tài)代碼塊的功能、原理、用法及操作注意事項,需要的朋友可以參考下
    2020-04-04
  • SpringBoot @Import與@Conditional注解使用詳解

    SpringBoot @Import與@Conditional注解使用詳解

    在了解spring boot自動配置原理前,再來了解下兩個注解@Import注解和@Conditional注解,@Conditional是Spring4新提供的注解,它的作用是按照一定的條件進行判斷,滿足條件給容器注冊bean
    2022-10-10
  • Java之api網關斷言及過濾器案例講解

    Java之api網關斷言及過濾器案例講解

    這篇文章主要介紹了Java之api網關斷言及過濾器案例講解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • Spring集成Web環(huán)境與SpringMVC組件的擴展使用詳解

    Spring集成Web環(huán)境與SpringMVC組件的擴展使用詳解

    這篇文章主要介紹了Spring集成Web環(huán)境與SpringMVC組件,它是一個MVC架構,用來簡化基于MVC架構的Web應用開發(fā)。SpringMVC最重要的就是五大組件
    2022-08-08
  • Java驗證碼圖片生成代碼

    Java驗證碼圖片生成代碼

    這篇文章主要為大家詳細介紹了Java驗證碼圖片生成代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03

最新評論