最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mybatis?ResultMap和分頁(yè)操作示例詳解

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

1. ResultMap

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

  • 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

這樣能保證不會(huì)出錯(cuò)。若是將User的“pwd”改為“password”,則對(duì)應(yīng)的password結(jié)果就會(huì)為空。

解決該問(wèn)題,

方法一:"as"

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

User字段的為“password”,數(shù)據(jù)庫(kù)字段為“pwd”,那就使用Sql的原生語(yǔ)句as,就可以將查詢(xún)字段和User中字段相對(duì)應(yīng)。

方法二:resultMap(結(jié)果映射)

可以使用 <ResultMap>標(biāo)簽將數(shù)據(jù)庫(kù)中的字段和User中的字段相對(duì)應(yīng):

<?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ù)據(jù)庫(kù)表的列名 , property是對(duì)應(yīng)實(shí)體類(lèi)的屬性名 -->
        <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>

其中,單獨(dú)設(shè)置resultMap標(biāo)簽,來(lái)使數(shù)據(jù)庫(kù)中的字段和User對(duì)應(yīng)上。 resultMap中的id 對(duì)應(yīng)著 <select>標(biāo)簽中的resultMap (原來(lái)為resultType)

2. 日志

日志工廠

思考:我們?cè)跍y(cè)試SQL的時(shí)候,要是能夠在控制臺(tái)輸出 SQL 的話(huà),是不是就能夠有更快的排錯(cuò)效率?

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

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

使用方法:

在 mybatis-config.xml 中添加。

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

注意:日志功能的開(kāi)啟是 name = "logImpl", value的值就是各種類(lèi)型的日志。
注意:

  • value="STDOUT_LOGGING"中不能出現(xiàn)空格,例如 value="STDOUT_LOGGING "就是錯(cuò)誤的
  • STDOUT_LOGGING是標(biāo)準(zhǔn)輸出日志

Log4j

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

一個(gè)配置完整的 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. 分頁(yè)

在學(xué)習(xí)mybatis等持久層框架的時(shí)候,會(huì)經(jīng)常對(duì)數(shù)據(jù)進(jìn)行增刪改查操作,使用最多的是對(duì)數(shù)據(jù)庫(kù)進(jìn)行查詢(xún)操作,如果查詢(xún)大量數(shù)據(jù)的時(shí)候,我們往往使用分頁(yè)進(jìn)行查詢(xún),也就是每次處理小部分?jǐn)?shù)據(jù),這樣對(duì)數(shù)據(jù)庫(kù)壓力就在可控范圍內(nèi)。

Limit 分頁(yè)

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

步驟:

  • UserMapper接口中添加:
//選擇全部用戶(hù)實(shí)現(xiàn)分頁(yè)
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. 注解開(kāi)發(fā)

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

sql 類(lèi)型主要分成 :

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

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

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

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

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

為了實(shí)現(xiàn)事務(wù)的提交,在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();
    }
}

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

sqlSessionFactory.openSession(true);就可以實(shí)現(xiàn)自動(dòng)提交事務(wù)。

查詢(xún)

編寫(xiě)接口方法注解

//根據(jù)id查詢(xún)用戶(hù)
@Select("select * from user where id = #{id}")
User selectUserById(@Param("id") int id);
  • 測(cè)試
@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();
}

新增

//添加一個(gè)用戶(hù)
@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();
}

修改

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

刪除

//根據(jù)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();
}

注意:

  • 增刪改一定記得對(duì)事務(wù)的處理
  • 注釋的話(huà),一定要把類(lèi)通過(guò)<mappers class="">注冊(cè)到 mybatis-config.xml 中去;配置的話(huà),一定要把UserMapper.xml(xxMapper.xml)通過(guò)<mappers resouce="">注冊(cè)到 mybatis-config.xml 中去

@Param

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

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

以上就是Mybatis ResultMap和分頁(yè)操作示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Mybatis ResultMap分頁(yè)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • mybatis?like模糊查詢(xún)特殊字符報(bào)錯(cuò)轉(zhuǎn)義處理方式

    mybatis?like模糊查詢(xún)特殊字符報(bào)錯(cuò)轉(zhuǎn)義處理方式

    這篇文章主要介紹了mybatis?like模糊查詢(xún)特殊字符報(bào)錯(cuò)轉(zhuǎn)義處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java FileWriter輸出換行操作

    Java FileWriter輸出換行操作

    這篇文章主要介紹了Java FileWriter輸出換行操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • SpringBoot中Redis自動(dòng)配置的介紹、原理和使用詳解

    SpringBoot中Redis自動(dòng)配置的介紹、原理和使用詳解

    這篇文章主要介紹了SpringBoot中Redis自動(dòng)配置的介紹、原理和使用詳解,Redis是一種高性能的鍵值對(duì)存儲(chǔ)數(shù)據(jù)庫(kù),它支持多種數(shù)據(jù)結(jié)構(gòu)和豐富的功能,如緩存、消息隊(duì)列、計(jì)數(shù)器、分布式鎖等,需要的朋友可以參考下
    2023-08-08
  • Java實(shí)現(xiàn)常用加密算法——單向加密算法MD5和SHA

    Java實(shí)現(xiàn)常用加密算法——單向加密算法MD5和SHA

    本篇文章主要介紹了Java實(shí)現(xiàn)常用加密算法——單向加密算法MD5和SHA,信息加密后數(shù)據(jù)更安全,需要的朋友可以參考下。
    2016-10-10
  • Mybatis數(shù)據(jù)批量插入如何實(shí)現(xiàn)

    Mybatis數(shù)據(jù)批量插入如何實(shí)現(xiàn)

    這篇文章主要介紹了Mybatis數(shù)據(jù)批量插入如何實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • 詳解SpringBoot可執(zhí)行Jar包運(yùn)行原理

    詳解SpringBoot可執(zhí)行Jar包運(yùn)行原理

    SpringBoot有一個(gè)很方便的功能就是可以將應(yīng)用打成可執(zhí)行的Jar,那么大家有沒(méi)想過(guò)這個(gè)Jar是怎么運(yùn)行起來(lái)的呢,本篇博客就來(lái)介紹下 SpringBoot可執(zhí)行Jar包的運(yùn)行原理,需要的朋友可以參考下
    2023-05-05
  • Java報(bào)錯(cuò):org.springframework.beans.factory.BeanCreationException的五種解決方法

    Java報(bào)錯(cuò):org.springframework.beans.factory.BeanCreationExcepti

    本文解析Spring框架中BeanCreationException的常見(jiàn)原因,如屬性類(lèi)型不匹配、依賴(lài)缺失、類(lèi)加載錯(cuò)誤,并提供修正配置、調(diào)試日志、清理項(xiàng)目等解決方法,幫助開(kāi)發(fā)者快速定位和修復(fù)該異常問(wèn)題,感興趣的朋友跟隨小編一起看看吧
    2025-08-08
  • java中的動(dòng)態(tài)代理(jdk和Cglib)實(shí)現(xiàn)詳解

    java中的動(dòng)態(tài)代理(jdk和Cglib)實(shí)現(xiàn)詳解

    這篇文章主要介紹了java中的動(dòng)態(tài)代理(jdk和Cglib)的相關(guān)資料,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2025-04-04
  • Java SpringBoot詳解集成以及配置Swagger流程

    Java SpringBoot詳解集成以及配置Swagger流程

    Swagger 是一個(gè)規(guī)范和完整的框架,用于生成、描述、調(diào)用和可視化 RESTful 風(fēng)格的 Web 服務(wù)??傮w目標(biāo)是使客戶(hù)端和文件系統(tǒng)作為服務(wù)器以同樣的速度來(lái)更新。文件的方法,參數(shù)和模型緊密集成到服務(wù)器端的代碼,允許API來(lái)始終保持同步
    2021-10-10
  • Spring Mybatis 分頁(yè)插件使用教程

    Spring Mybatis 分頁(yè)插件使用教程

    這篇文章主要介紹了Spring Mybatis分頁(yè)插件使用教程,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02

最新評(píng)論

万源市| 郓城县| 淮南市| 宁乡县| 香河县| 香格里拉县| 千阳县| 龙岩市| 宜川县| 左贡县| 阳原县| 明溪县| 蕉岭县| 泰顺县| 远安县| 平定县| 巴林左旗| 尖扎县| 英吉沙县| 孟连| 固镇县| 深水埗区| 腾冲县| 庆城县| 敖汉旗| 荆州市| 荣昌县| 馆陶县| 库车县| 娄烦县| 大名县| 鄂尔多斯市| 滨州市| 闻喜县| 呼图壁县| 加查县| 大渡口区| 乌兰县| 龙海市| 阳城县| 郸城县|