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

Mybatis ResultMap映射、多表查詢與緩存機(jī)制詳解

 更新時間:2025年12月02日 15:14:52   作者:程序員三明治  
本文詳細(xì)介紹了MyBatis中ResultMap的使用、多表查詢(包括一對一和一對多關(guān)系)以及分步查詢和分頁查詢,此外,還探討了MyBatis的緩存機(jī)制,包括一級緩存和二級緩存,通過這些內(nèi)容,讀者可以全面掌握如何在MyBatis中進(jìn)行復(fù)雜的數(shù)據(jù)查詢和緩存管理,感興趣的朋友一起看看吧

0. 案例環(huán)境

0.1 案例數(shù)據(jù)初始化sql

CREATE DATABASE /*!32312 IF NOT EXISTS*/`mybatis_db` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `mybatis_db`;
DROP TABLE IF EXISTS `orders`;
CREATE TABLE `orders` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `createtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間',
  `price` int(11) DEFAULT NULL COMMENT '價格',
  `remark` varchar(100) DEFAULT NULL COMMENT '備注',
  `user_id` int(11) DEFAULT NULL COMMENT '用戶id',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
insert  into `orders`(`id`,`createtime`,`price`,`remark`,`user_id`) values (1,'2014-06-26 16:55:43',2000,'無',2),(2,'2021-02-23 16:55:57',3000,'無',3),(3,'2021-02-23 16:56:21',4000,'無',2);
DROP TABLE IF EXISTS `role`;
CREATE TABLE `role` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) DEFAULT NULL COMMENT '角色名',
  `desc` varchar(100) DEFAULT NULL COMMENT '角色描述',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
/*Data for the table `role` */
insert  into `role`(`id`,`name`,`desc`) values (1,'總經(jīng)理','一人之下'),(2,'CFO',NULL);
/*Table structure for table `user` */
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `address` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=33 DEFAULT CHARSET=utf8;
/*Data for the table `user` */
insert  into `user`(`id`,`username`,`age`,`address`) values (2,'pdd',26,NULL),(3,'UZI',19,'上海11'),(4,'RF',19,NULL);
/*Table structure for table `user_role` */
DROP TABLE IF EXISTS `user_role`;
CREATE TABLE `user_role` (
  `user_id` int(11) DEFAULT NULL,
  `role_id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*Data for the table `user_role` */
insert  into `user_role`(`user_id`,`role_id`) values (2,2),(2,1),(3,1);

0.2 實(shí)體類

0.2.1 User.java

public class User {
    private Integer id;
    private String username;
    private Integer age;
    private String address;
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", age=" + age +
                ", address='" + address + '\'' +
                '}';
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    public User() {
    }
    public User(Integer id, String username, Integer age, String address) {
        this.id = id;
        this.username = username;
        this.age = age;
        this.address = address;
    }
}

0.2.2 Order.java

public class Order {
    private Integer id;
    private Date createtime;
    private Integer price;
    private String remark;
    private Integer userId;
    @Override
    public String toString() {
        return "Order{" +
                "id=" + id +
                ", createtime=" + createtime +
                ", price=" + price +
                ", remark='" + remark + '\'' +
                ", userId=" + userId +
                '}';
    }
  	public Order() {
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Date getCreatetime() {
        return createtime;
    }
    public void setCreatetime(Date createtime) {
        this.createtime = createtime;
    }
    public Integer getPrice() {
        return price;
    }
    public void setPrice(Integer price) {
        this.price = price;
    }
    public String getRemark() {
        return remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
    public Integer getUserId() {
        return userId;
    }
    public void setUserId(Integer userId) {
        this.userId = userId;
    }
    public Order(Integer id, Date createtime, Integer price, String remark, Integer userId) {
        this.id = id;
        this.createtime = createtime;
        this.price = price;
        this.remark = remark;
        this.userId = userId;
    }
}

0.2.3 Role.java

public class Role {
    private Integer id;
    private String name;
    private String desc;
    @Override
    public String toString() {
        return "Role{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", desc='" + desc + '\'' +
                '}';
    }
	public Role() {
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getDesc() {
        return desc;
    }
    public void setDesc(String desc) {
        this.desc = desc;
    }
    public Role(Integer id, String name, String desc) {
        this.id = id;
        this.name = name;
        this.desc = desc;
    }
}

1. ResultMap

1.1 基本使用

? 我們可以使用resultMap標(biāo)簽自定義結(jié)果集和實(shí)體類屬性的映射規(guī)則。

    <!--
        resultMap 用來自定義結(jié)果集和實(shí)體類的映射
            屬性:
                id 相當(dāng)于這個resultMap的唯一標(biāo)識
                type 用來指定映射到哪個實(shí)體類
        id標(biāo)簽  用來指定主鍵列的映射規(guī)則
            屬性:
                property 要映射的屬性名
                column  對應(yīng)的列名
        result標(biāo)簽 用來指定普通列的映射規(guī)則
            屬性:
                property 要映射的屬性名
                column 對應(yīng)的列名
    -->
    <resultMap id="orderMap" type="com.sangeng.pojo.Order" >
        <id column="id" property="id"></id>
        <result column="createtime" property="createtime"></result>
        <result column="price" property="price"></result>
        <result column="remark" property="remark"></result>
        <result column="user_id" property="userId"></result>
    </resultMap>
	<!--使用我們自定義的映射規(guī)則-->
    <select id="findAll" resultMap="orderMap">
        SELECT id,createtime,price,remark,user_id  FROM ORDERS
    </select>

1.2 自動映射

? 我們定義resultMap時默認(rèn)情況下自動映射是開啟狀態(tài)的。也就是如果結(jié)果集的列名和我們的屬性名相同是會自動映射的我們只需要寫特殊情況的映射關(guān)系即可。

例如:

下面這種寫法和上面的寫法會有相同的效果,因?yàn)槠渌麑傩缘膶傩悦徒Y(jié)果集的列名都是相同的會自動映射。

    <resultMap id="orderMap" type="com.sangeng.pojo.Order" >
        <result column="user_id" property="userId"></result>
    </resultMap>
	<!--使用我們自定義的映射規(guī)則-->
    <select id="findAll" resultMap="orderMap">
        SELECT id,createtime,price,remark,user_id  FROM ORDERS
    </select>

? 如有需要可以選擇關(guān)閉自動映射可以把resultMap的autoMapping屬性設(shè)置為false。

例如:

    <resultMap id="orderMap" type="com.sangeng.pojo.Order" autoMapping="false">
        <id column="id" property="id"></id>
        <result column="createtime" property="createtime"></result>
        <result column="price" property="price"></result>
        <result column="remark" property="remark"></result>
        <result column="user_id" property="userId"></result>
    </resultMap>

1.3 繼承映射關(guān)系

? 我們可以使用resultMap 的extends屬性來指定一個resultMap,從而復(fù)用重復(fù)的映射關(guān)系配置。

例如:

  	<!--定義個父映射,供其他resultMap繼承-->
	<resultMap id="baseOrderMap" type="com.sangeng.pojo.Order" >
        <id column="id" property="id"></id>
        <result column="createtime" property="createtime"></result>
        <result column="price" property="price"></result>
        <result column="remark" property="remark"></result>
    </resultMap>
	<!--繼承baseOrderMap,然后只需要寫自己特有的映射關(guān)系即可-->
    <resultMap id="orderMap" type="com.sangeng.pojo.Order" autoMapping="false" extends="baseOrderMap">
        <result column="user_id" property="userId"></result>
    </resultMap>

2. 多表查詢

? 有的時候我們需要查詢多張表的數(shù)據(jù)才可以得到我們要的結(jié)果。

? 我們可以直接寫一個多表關(guān)聯(lián)的SQL進(jìn)行查詢。也可以分步進(jìn)行多次的查詢來拿到我們需要的結(jié)果。

? Mybatis就提供了對應(yīng)的配置,可以讓我們?nèi)ジ奖愕倪M(jìn)行相應(yīng)的查詢和對應(yīng)的結(jié)果集處理。

2.1 多表關(guān)聯(lián)查詢

2.1.1 一對一關(guān)系

? 兩個實(shí)體之間是一對一的關(guān)系。(例如我們需要查詢訂單,要求還需要下單用戶的數(shù)據(jù)。這里的訂單相對于用戶是一對一。)

例如:

方法定義如下

    //根據(jù)訂單id查詢訂單,要求把下單用戶的信息也查詢出來
    Order findById(Integer id);

因?yàn)槠谕鸒rder中還能包含下單用戶的數(shù)據(jù),所以可以再Order中增加一個屬性

private User user;

SQL語句如下

SELECT 
	o.id,o.`createtime`,o.`price`,o.`remark`,o.`user_id`,u.`id` uid,u.`username`,u.`age`,u.`address`
FROM 
	orders o,USER u
WHERE
	o.`user_id` = u.`id`
	AND o.id = 2

結(jié)果集

我們可以使用如下兩種方式封裝結(jié)果集。

2.1.1.1 使用ResultMap對所有字段進(jìn)行映射

? 可以使用ResultMap設(shè)置user對象的屬性的映射規(guī)則。

①resultMap定義,主要是對user對象的屬性設(shè)置映射規(guī)則

 	<resultMap id="baseOrderMap" type="com.sangeng.pojo.Order" >
        <id column="id" property="id"></id>
        <result column="createtime" property="createtime"></result>
        <result column="price" property="price"></result>
        <result column="remark" property="remark"></result>
    </resultMap>
    <resultMap id="orderMap" type="com.sangeng.pojo.Order" autoMapping="false" extends="baseOrderMap">
        <result column="user_id" property="userId"></result>
    </resultMap>
    <!--Order和User關(guān)聯(lián)的映射-->
    <resultMap id="orderUserMap" type="com.sangeng.pojo.Order" autoMapping="false" extends="orderMap">
        <result property="user.id" column="uid"></result>
        <result property="user.username" column="username"></result>
        <result property="user.age" column="age"></result>
        <result property="user.address" column="address"></result>
    </resultMap>

②使用定義好的resultMap

<!--根據(jù)訂單id查詢訂單,要求把下單用戶的信息也查詢出來-->
    <select id="findById" resultMap="orderUserMap">
        SELECT
            o.`id`,o.`createtime`,o.`price`,o.`remark`,o.`user_id`,u.`id` uid,u.`username`,u.`age`,u.`address`
        FROM
            orders o,`user` u
        WHERE
            o.id = #{id} AND
            o.`user_id`=u.`id`
    </select>

2.1.1.2 使用ResultMap中的association

? 可以使用ResultMap中的子標(biāo)簽association 來設(shè)置關(guān)聯(lián)實(shí)體類的映射規(guī)則.

①定義resultMap

 	<resultMap id="baseOrderMap" type="com.sangeng.pojo.Order" >
        <id column="id" property="id"></id>
        <result column="createtime" property="createtime"></result>
        <result column="price" property="price"></result>
        <result column="remark" property="remark"></result>
    </resultMap>
    <resultMap id="orderMap" type="com.sangeng.pojo.Order" autoMapping="false" extends="baseOrderMap">
        <result column="user_id" property="userId"></result>
    </resultMap>
    <!--Order和User關(guān)聯(lián)的映射(使用association)-->
    <resultMap id="orderUserMapUseAssociation" type="com.sangeng.pojo.Order" autoMapping="false" extends="orderMap">
        <association property="user" javaType="com.sangeng.pojo.User">
            <id property="id" column="uid"></id>
            <result property="username" column="username"></result>
            <result property="age" column="age"></result>
            <result property="address" column="address"></result>
        </association>
    </resultMap>

②使用resultMap

<!--根據(jù)訂單id查詢訂單,要求把下單用戶的信息也查詢出來-->
    <select id="findById" resultMap="orderUserMapUseAssociation">
        SELECT
            o.`id`,o.`createtime`,o.`price`,o.`remark`,o.`user_id`,u.`id` uid,u.`username`,u.`age`,u.`address`
        FROM
            orders o,`user` u
        WHERE
            o.id = #{id} AND
            o.`user_id`=u.`id`
    </select>

2.1.2 一對多關(guān)系

? 兩個實(shí)體之間是一對多的關(guān)系。(例如我們需要查詢用戶,要求還需要該用戶所具有的角色信息。這里的用戶相對于角色是一對多的。)

例如:

方法定義如下

    //根據(jù)id查詢用戶,并且要求把該用戶所具有的角色信息也查詢出來
    User findById(Integer id);

因?yàn)槠谕鸘ser中還能包含該用戶所具有的角色信息,所以可以在User中增加一個屬性

//    該用戶所具有的角色
    private List<Role> roles;

SQL語句如下

SELECT 
	u.`id`,u.`username`,u.`age`,u.`address`,r.id rid,r.name,r.desc
FROM 
	USER u,user_role ur,role r
WHERE 
	u.id=ur.user_id AND ur.role_id = r.id
	AND u.id = 2

結(jié)果集

我們可以使用如下的方式封裝結(jié)果集。

2.1.2.1 使用ResultMap中的collection

? 可以使用ResultMap中的子標(biāo)簽association 來設(shè)置關(guān)聯(lián)實(shí)體類的映射規(guī)則.

①定義ResultMap

<!--定義User基本屬性映射規(guī)則-->
	<resultMap id="userMap" type="com.sangeng.pojo.User">
        <id property="id" column="id"></id>
        <result property="username" column="username"></result>
        <result property="age" column="age"></result>
        <result property="address" column="address"></result>
    </resultMap>
    <resultMap id="userRoleMap" type="com.sangeng.pojo.User"  extends="userMap">
        <collection property="roles" ofType="com.sangeng.pojo.Role" >
            <id property="id" column="rid"></id>
            <result property="name" column="name"></result>
            <result property="desc" column="desc"></result>
        </collection>
    </resultMap>

②使用ResultMap

<select id="findById" resultMap="userRoleMap" >
        SELECT 
            u.`id`,u.`username`,u.`age`,u.`address`,r.id rid,r.name,r.desc
        FROM 
            USER u,user_role ur,role r
        WHERE 
            u.id=ur.user_id AND ur.role_id = r.id
            AND u.id = #{id}
    </select>

最終封裝完的結(jié)果如下:

2.2 分步查詢

? 如果有需要多表查詢的需求我們也可以選擇用多次查詢的方式來查詢出我們想要的數(shù)據(jù)。Mybatis也提供了對應(yīng)的配置。

? 例如我們需要查詢用戶,要求還需要查詢出該用戶所具有的角色信息。我們可以選擇先查詢User表查詢用戶信息。然后在去查詢關(guān)聯(lián)的角色信息。

2.2.1實(shí)現(xiàn)步驟

? 具體步驟如下:

①定義查詢方法

? 因?yàn)槲覀円謨刹讲樵? 1.查詢User 2.根據(jù)用戶的id查詢Role 所以我們需要定義下面兩個方法,并且把對應(yīng)的標(biāo)簽也先寫好

1.查詢User

    //根據(jù)用戶名查詢用戶,并且要求把該用戶所具有的角色信息也查詢出來
    User findByUsername(String username);
    <!--根據(jù)用戶名查詢用戶-->
    <select id="findByUsername" resultType="com.sangeng.pojo.User">
        select id,username,age,address from user where username = #{username}
    </select>

2.根據(jù)user_id查詢Role

public interface RoleDao {
	//根據(jù)userId查詢所具有的角色
    List<Role> findRoleByUserId(Integer userId);
}

    <!--根據(jù)userId查詢所具有的角色-->
    <select id="findRoleByUserId" resultType="com.sangeng.pojo.Role">
        select 
            r.id,r.name,r.desc
        from 
            role r,user_role ur
        where 
            ur.role_id = r.id
            and ur.user_id = #{userId}
    </select>

②配置分步查詢

? 我們期望的效果是調(diào)用findByUsername方法查詢出來的結(jié)果中就包含角色的信息。所以我們可以設(shè)置findByUsername方法的RestltMap,指定分步查詢

    <resultMap id="userMap" type="com.sangeng.pojo.User">
        <id property="id" column="id"></id>
        <result property="username" column="username"></result>
        <result property="age" column="age"></result>
        <result property="address" column="address"></result>
    </resultMap>
    <!--
           select屬性:指定用哪個查詢來查詢當(dāng)前屬性的數(shù)據(jù) 寫法:包名.接口名.方法名
           column屬性:設(shè)置當(dāng)前結(jié)果集中哪列的數(shù)據(jù)作為select屬性指定的查詢方法需要參數(shù)
       -->
	<resultMap id="userRoleMapBySelect" type="com.sangeng.pojo.User" extends="userMap">
        <collection property="roles"
                    ofType="com.sangeng.pojo.Role"
                    select="com.sangeng.dao.RoleDao.findRoleByUserId"
                    column="id">
        </collection>
    </resultMap>

? 指定findByUsername使用我們剛剛創(chuàng)建的resultMap

    <!--根據(jù)用戶名查詢用戶-->
    <select id="findByUsername" resultMap="userRoleMapBySelect">
        select id,username,age,address from user where username = #{username}
    </select>

2.2.2 設(shè)置按需加載

? 我們可以設(shè)置按需加載,這樣在我們代碼中需要用到關(guān)聯(lián)數(shù)據(jù)的時候才會去查詢關(guān)聯(lián)數(shù)據(jù)。

? 有兩種方式可以配置分別是全局配置和局部配置

局部配置

設(shè)置fetchType屬性為lazy

	<resultMap id="userRoleMapBySelect" type="com.sangeng.pojo.User" extends="userMap">
        <collection property="roles"
                    ofType="com.sangeng.pojo.Role"
                    select="com.sangeng.dao.RoleDao.findRoleByUserId"
                    column="id" fetchType="lazy">
        </collection>
    </resultMap>

全局配置

設(shè)置lazyLoadingEnabled為true

    <settings>
       <setting name="lazyLoadingEnabled" value="true"/>
    </settings>

3.分頁查詢-PageHelper

? 我們可以使用PageHelper非常方便的幫我們實(shí)現(xiàn)分頁查詢的需求。不需要自己在SQL中拼接SQL相關(guān)參數(shù),并且能非常方便的獲取的總頁數(shù)總條數(shù)等分頁相關(guān)數(shù)據(jù)。

3.1 實(shí)現(xiàn)步驟

①定義方法查詢方法以及生成對應(yīng)標(biāo)簽

	List<User> findAll();
    <select id="findAll" resultType="com.sangeng.pojo.User">
        select id,username,age,address from user
    </select>

② 引入依賴

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>4.0.0</version>
</dependency>

③ 配置Mybatis核心配置文件使用分頁插件

 <plugins>
        <!-- 注意:分頁助手的插件  配置在通用館mapper之前 -->
        <plugin interceptor="com.github.pagehelper.PageHelper">
            <!-- 指定方言 -->
            <property name="dialect" value="mysql"/>
        </plugin>
    </plugins>

④ 開始分頁查詢

我們只需要在使用查詢方法前設(shè)置分頁參數(shù)即可

    //設(shè)置分頁參數(shù)
	UserDao userDao = session.getMapper(UserDao.class);
    //設(shè)置分頁查詢參數(shù)
    PageHelper.startPage(1,1);
    List<User> users = userDao.findAll();
    System.out.println(users.get(0));

如果需要獲取總頁數(shù)總條數(shù)等分頁相關(guān)數(shù)據(jù),只需要創(chuàng)建一個PageInfo對象,把剛剛查詢出的返回值做為構(gòu)造方法參數(shù)傳入。然后使用pageInfo對象獲取即可。

	PageInfo<User> pageInfo = new PageInfo<User>(users);
    System.out.println("總條數(shù):"+pageInfo.getTotal());
	System.out.println("總頁數(shù):"+pageInfo.getPages());
	System.out.println("當(dāng)前頁:"+pageInfo.getPageNum());
	System.out.println("每頁顯示長度:"+pageInfo.getPageSize());

3.2 一對多多表查詢分頁問題

? 我們在進(jìn)行一對多的多表查詢時,如果使用了PageHelper進(jìn)行分頁。會出現(xiàn)關(guān)聯(lián)數(shù)據(jù)不全的情況。我們可以使用分步查詢的方式解決該問題。

4.Mybatis緩存

? Mybatis的緩存其實(shí)就是把之前查到的數(shù)據(jù)存入內(nèi)存(map),下次如果還是查相同的東西,就可以直接從緩存中取,從而提高效率。

? Mybatis有一級緩存和二級緩存之分,一級緩存(默認(rèn)開啟)是sqlsession級別的緩存。二級緩存相當(dāng)于mapper級別的緩存。

4.1 一級緩存

幾種不會使用一級緩存的情況
1.調(diào)用相同方法但是傳入的參數(shù)不同
2.調(diào)用相同方法參數(shù)也相同,但是使用的是另外一個SqlSession
3.如果查詢完后,對同一個表進(jìn)行了增,刪改的操作,都會清空這sqlSession上的緩存
4.如果手動調(diào)用SqlSession的clearCache方法清除緩存了,后面也使用不了緩存

4.2 二級緩存

? 注意:只在sqlsession調(diào)用了close或者commit后的數(shù)據(jù)才會進(jìn)入二級緩存。

4.2.1 開啟二級緩存

①全局開啟

在Mybatis核心配置文件中配置

    <settings>
        <setting name="cacheEnabled" value="true"/>
    </settings>

②局部開啟

在要開啟二級緩存的mapper映射文件中設(shè)置 cache標(biāo)簽

<?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.sangeng.dao.RoleDao">
    <cache></cache>
</mapper>

4.2.2 使用建議

? 二級緩存在實(shí)際開發(fā)中基本不會使用。

到此這篇關(guān)于Mybatis ResultMap映射、多表查詢與緩存機(jī)制全解析的文章就介紹到這了,更多相關(guān)Mybatis ResultMap映射、多表查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • idea創(chuàng)建項(xiàng)目報錯之java 17 is not supported問題的解決

    idea創(chuàng)建項(xiàng)目報錯之java 17 is not supported問題的解決

    文章討論了在使用IntelliJ IDEA創(chuàng)建Spring Boot項(xiàng)目時遇到的JDK版本不兼容問題,提供了修改ServerURL替換初始化源地址和選擇JDK8的解決辦法
    2026-03-03
  • 微信小程序之搜索分頁功能的實(shí)現(xiàn)代碼

    微信小程序之搜索分頁功能的實(shí)現(xiàn)代碼

    這篇文章主要介紹了微信小程序之搜索分頁功能的實(shí)現(xiàn)代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • 詳解SpringCloud的負(fù)載均衡

    詳解SpringCloud的負(fù)載均衡

    這篇文章主要介紹了SpringCloud的負(fù)載均衡的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用SpringCloud,感興趣的朋友可以了解下
    2021-03-03
  • 一文詳解java閉包的用途是什么

    一文詳解java閉包的用途是什么

    閉包的價值在于可以作為函數(shù)對象或者匿名函數(shù),持有上下文數(shù)據(jù),作為第一級對象進(jìn)行傳遞和保存,下面這篇文章主要給大家介紹了關(guān)于java閉包的用途是什么,需要的朋友可以參考下
    2024-03-03
  • SpringBoot如何實(shí)現(xiàn)文件下載

    SpringBoot如何實(shí)現(xiàn)文件下載

    這篇文章主要介紹了SpringBoot如何實(shí)現(xiàn)文件下載問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • MyBatisPlus @TableName表名注解的基本操作

    MyBatisPlus @TableName表名注解的基本操作

    @TableName注解是MyBatis-Plus中用于指定實(shí)體類與數(shù)據(jù)庫表映射關(guān)系的重要工具,通過使用@TableName注解,可以明確地指定表名,支持多級表名和動態(tài)表名,本文給大家介紹MyBatisPlus @TableName表名注解的相關(guān)操作,感興趣的朋友跟隨小編一起看看吧
    2025-09-09
  • 淺析Java中XPath和JsonPath以及SpEL的用法與對比

    淺析Java中XPath和JsonPath以及SpEL的用法與對比

    XPath,即XML路徑語言,是一種用于在XML文檔中查找信息的語言,JsonPath是從XPath中發(fā)展而來的,專門用于JSON數(shù)據(jù)格式,本文主要來講講他們的用法與區(qū)別,需要的可以參考下
    2023-11-11
  • 全面解釋java中StringBuilder、StringBuffer、String類之間的關(guān)系

    全面解釋java中StringBuilder、StringBuffer、String類之間的關(guān)系

    String的值是不可變的,這就導(dǎo)致每次對String的操作都會生成新的String對象,不僅效率低下,而且大量浪費(fèi)有限的內(nèi)存空間,StringBuffer是可變類,和線程安全的字符串操作類,任何對它指向的字符串的操作都不會產(chǎn)生新的對象,StringBuffer和StringBuilder類功能基本相似
    2013-01-01
  • Java面試題沖刺第二十天--算法(1)

    Java面試題沖刺第二十天--算法(1)

    這篇文章主要為大家分享了最有價值的三道關(guān)于算法的面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Hibernate中獲取Session的兩種方式代碼示例

    Hibernate中獲取Session的兩種方式代碼示例

    這篇文章主要介紹了Hibernate中獲取Session的兩種方式代碼示例,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12

最新評論

克山县| 普兰县| 城步| 龙海市| 孝义市| 盐城市| 邵阳县| 象州县| 湖南省| 陈巴尔虎旗| 双鸭山市| 洞口县| 班戈县| 纳雍县| 万全县| 乐东| 炉霍县| 孙吴县| 清新县| 阿合奇县| 常宁市| 行唐县| 哈密市| 安图县| 青川县| 和硕县| 分宜县| 高密市| 茌平县| 磴口县| 五寨县| 菏泽市| 雷波县| 隆回县| 南丰县| 钦州市| 昭苏县| 炉霍县| 灌云县| 河东区| 宜川县|