MyBatis的?級映射及延遲加載過程詳解
一:MyBatis的?級映射及延遲加載
前期準備:
模塊名:mybatis-010-advanced-mapping
打包?式:jar
引?依賴:mysql驅(qū)動依賴、mybatis依賴、junit依賴、logback依賴
pojo:com.powernode.mybatis.pojo.Student和Calzz
mapper接?:com.powernode.mybatis.mapper.StudentMapper和ClazzMapper
引?配置?件:mybatis-config.xml、jdbc.properties、logback.xml
mapper配置?件:com/powernode/mybatis/mapper/StudentMapper.xml和ClazzMapper.xml
編寫測試類:com.powernode.mybatis.test.StudentMapperTest和ClazzMapperTest
拷??具類:com.powernode.mybatis.utils.SqlSessionUtil
準備數(shù)據(jù)庫表:?個班級對應多個學?:
班級表:t_clazz
學?表:t_student
clazz實例類
package com.bjpowernode.mybatis.pojo; /** * @Author:朗朗乾坤 * @Package:com.bjpowernode.mybatis.pojo * @Project:mybatis * @name:Clazz * @Date:2023/1/7 18:18 */ public class Clazz { private Integer cid; private String cname; public Clazz() { } public Clazz(Integer cid, String cname) { this.cid = cid; this.cname = cname; } @Override public String toString() { return "Clazz{" + "cid=" + cid + ", cname='" + cname + '\'' + '}'; } public Integer getCid() { return cid; } public void setCid(Integer cid) { this.cid = cid; } public String getCname() { return cname; } public void setCname(String cname) { this.cname = cname; } }
Student實體類:只定義兩個字段;對于cid屬性,是為了維護兩者關(guān)系的屬性
package com.bjpowernode.mybatis.pojo; /** * @Author:朗朗乾坤 * @Package:com.bjpowernode.mybatis.pojo * @Project:mybatis * @name:Student * @Date:2023/1/7 18:18 */ public class Student { private Integer sid; private String sname; public Student() { } public Student(Integer sid, String sname) { this.sid = sid; this.sname = sname; } @Override public String toString() { return "Student{" + "sid=" + sid + ", sname='" + sname + '\'' + '}'; } public Integer getSid() { return sid; } public void setSid(Integer sid) { this.sid = sid; } public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname; } }
1. 多對?
pojo類Student中添加?個屬性:Clazz clazz; 表示學?關(guān)聯(lián)的班級對象,增加setter and getter方法,重寫toString方法。
package com.bjpowernode.mybatis.pojo; /** * @Author:朗朗乾坤 * @Package:com.bjpowernode.mybatis.pojo * @Project:mybatis * @name:Student * @Date:2023/1/7 18:18 */ public class Student { // Student是多的一方 private Integer sid; private String sname; private Clazz clazz; // Clazz是一的一方 public Student() { } public Student(Integer sid, String sname) { this.sid = sid; this.sname = sname; } @Override public String toString() { return "Student{" + "sid=" + sid + ", sname='" + sname + '\'' + ", clazz=" + clazz + '}'; } public Clazz getClazz() { return clazz; } public void setClazz(Clazz clazz) { this.clazz = clazz; } public Integer getSid() { return sid; } public void setSid(Integer sid) { this.sid = sid; } public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname; } }
多對一:多個學生Student對應一個班級Clazz
多種?式,常?的包括三種:
① 第?種?式:?條SQL語句,級聯(lián)屬性映射。
② 第?種?式:?條SQL語句,association。
③第三種?式:兩條SQL語句,分步查詢。
第?種?式:級聯(lián)屬性映射
三兄弟之一:StudentMapper接口,編寫方法
根據(jù)id獲取學生Student信息,同時獲取學生關(guān)聯(lián)的班級Clazz信息
package com.bjpowernode.mybatis.mapper; import com.bjpowernode.mybatis.pojo.Student; public interface StudentMapper { /* * @param id 學生的id * @return 學生對象,但是學生對象當中含有班級對象 */ Student selectById(Integer id); }
三兄弟之二:StudentMapper.xml文件,編寫sql語句
(1)使用resultMap來指定映射關(guān)系,結(jié)果映射resultMap有兩個參數(shù):
一個參數(shù)是id,指定resultMap的唯一標識,這個id將來在select標簽中使用。
一個參數(shù)是type,用來指定POJO類的類名。
(2)在resultMap下還有一個子標簽result;首先對于有主鍵的需要配一個id,不是必須的,但可以增加效率;下面使用result子標簽的property屬性和column屬性分別指定POJO類的屬性名和數(shù)據(jù)庫表中的字段表之間的映射關(guān)系。
<?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.bjpowernode.mybatis.mapper.StudentMapper"> <!--多對一映射的第一種方式:一條SQL語句,級聯(lián)屬性映射--> <resultMap id="studentResultMap" type="Student"> <id property="id" column="id"/> <result property="sid" column="sid"/> <result property="clazz.cid" column="cid"/> <result property="clazz.cname" column="cname" /> </resultMap> <select id="selectById" resultMap="studentResultMap"> select s.sid,s.sname,c.cid,c.cname from t_student s left join t_clazz c on s.cid = c.cid where s.sid = #{sid} </select> </mapper> <?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.bjpowernode.mybatis.mapper.StudentMapper"> <!--多對一映射的第一種方式:一條SQL語句,級聯(lián)屬性映射--> <resultMap id="studentResultMap" type="Student"> <id property="id" column="id"/> <result property="sid" column="sid"/> <result property="clazz.cid" column="cid"/> <result property="clazz.cname" column="cname" /> </resultMap> <select id="selectById" resultMap="studentResultMap"> select s.sid,s.sname,c.cid,c.cname from t_student s left join t_clazz c on s.cid = c.cid where s.sid = #{sid} </select> </mapper>
三兄弟之三:StudentMappeTest類,用來編寫測試類
package com.bjpowernode.mybatis.test; import com.bjpowernode.mybatis.mapper.StudentMapper; import com.bjpowernode.mybatis.pojo.Student; import com.bjpowernode.mybatis.utils.SqlSessionUtil; import org.apache.ibatis.session.SqlSession; import org.junit.Test; public class StudentMapperTest { @Test public void testSelectById(){ SqlSession sqlSession = SqlSessionUtil.openSession(); StudentMapper mapper = sqlSession.getMapper(StudentMapper.class); Student student = mapper.selectById(1); // 直接輸出Student對象 System.out.println(student); // 輸出每個屬性 System.out.println(student.getSid()); System.out.println(student.getSname()); System.out.println(student.getClazz().getCid()); System.out.println(student.getClazz().getCname()); sqlSession.close(); } }
執(zhí)行結(jié)果:
第?種?式:association標簽
第二種方式,和第一種方式的代碼很類似,就是多引入一個association標簽,association翻譯為關(guān)聯(lián)的意思
三兄弟之一:StudentMapper接口,編寫方法
根據(jù)id獲取學生Student信息,同時獲取學生關(guān)聯(lián)的班級Clazz信息
package com.bjpowernode.mybatis.mapper; import com.bjpowernode.mybatis.pojo.Student; public interface StudentMapper { /** * 一條SQL語句,使用association標簽的方式 * @param id 學生的id * @return 學生對象,但是學生對象當中含有班級對象 */ Student selectByIdAssociation(Integer id); }
三兄弟之二:StudentMapper.xml文件,編寫sql語句
association:翻譯為關(guān)聯(lián),一個Student對象關(guān)聯(lián)一個Clazz對象
①property標簽:提供要映射的POJO類的屬性名,這里就是clazz
②javaType標簽:用來指定要映射的java類型,這里就是com.bjpowernode.mybatis.Clazz
<?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.bjpowernode.mybatis.mapper.StudentMapper"> <!--一條SQL語句,引入association標簽--> <resultMap id="studentResultMapAssociation" type="Student"> <id property="sid" column="sid"/> <result property="sname" column="sname"/> <!--使用assocaition標簽--> <association property="clazz" javaType="Clazz"> <!--雖然字段是相同的,但是不能省略不寫--> <id property="cid" column="cid"/> <result property="cname" column="cname" /> </association> </resultMap> <select id="selectByIdAssociation" resultMap="studentResultMapAssociation"> select s.sid,s.sname,c.cid,c.cname from t_student s left join t_clazz c on s.cid = c.cid where s.sid = #{sid} </select> </mapper>
三兄弟之三:StudentMappeTest類,用來編寫測試類
package com.bjpowernode.mybatis.test; import com.bjpowernode.mybatis.mapper.StudentMapper; import com.bjpowernode.mybatis.pojo.Student; import com.bjpowernode.mybatis.utils.SqlSessionUtil; import org.apache.ibatis.session.SqlSession; import org.junit.Test; public class StudentMapperTest { @Test public void testSelectByIdAssociation(){ SqlSession sqlSession = SqlSessionUtil.openSession(); StudentMapper mapper = sqlSession.getMapper(StudentMapper.class); Student student = mapper.selectByIdAssociation(2); // 直接輸出Student對象 System.out.println(student); sqlSession.close(); } }
執(zhí)行結(jié)果:
第三種?式:分步查詢
分布查詢,需要兩條SQL語句,這種?式常?:
①優(yōu)點?是可復?。
②優(yōu)點?是?持懶加載(延遲加載)
(1)分布查詢第一步:先根據(jù)學生的sid查詢學生信息
①在StudentMapper中編寫第一步的查詢方法
package com.bjpowernode.mybatis.mapper; import com.bjpowernode.mybatis.pojo.Student; public interface StudentMapper { // 分布查詢第一步:現(xiàn)根據(jù)學生的sid查詢學生信息 Student selectByIdStep1(Integer id); }
②在StudentMapper.xml中編寫SQL語句,并指明兩者之間的關(guān)聯(lián)關(guān)系
還是需要association標簽:
①property屬性:還是提供要映射的POJO類的屬性名,這里就是clazz
②select屬性:用來指定另外第二步SQL語句的id,這個id實際上就是namespace+id;通過第二步語句的查詢結(jié)果,把值賦值給clazz
③column屬性:是把第一條SQL語句查詢出來的cid傳給第第二條SQL語句
<?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.bjpowernode.mybatis.mapper.StudentMapper"> <!--這是第一步:根據(jù)學生的id查詢學生的所有信息,包含cid--> <resultMap id="studentResultMapByStep" type="Student"> <id property="sid" column="sid"/> <result property="sname" column="sname" /> <!--使用association標簽,指明關(guān)聯(lián)關(guān)系--> <association property="clazz" select="com.bjpowernode.mybatis.mapper.ClazzMapper.selectByIdStep2" column="cid"/> </resultMap> <select id="selectByIdStep1" resultMap="studentResultMapByStep"> select sid,sname,cid from t_student where sid = #{sid}; </select> </mapper>
(2)分布查詢第二步:根據(jù)學生的cid查詢班級信息
①在ClazzMapper中編寫第二步的查詢方法
package com.bjpowernode.mybatis.mapper; import com.bjpowernode.mybatis.pojo.Clazz; public interface ClazzMapper { // 分布查詢第二步:根據(jù)cid獲取查詢信息 Clazz selectByIdStep2(Integer cid); }
②在ClazzMapper.xml中編寫SQL語句
<?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.bjpowernode.mybatis.mapper.ClazzMapper"> <!--分布查詢第二步:根據(jù)cid獲取班級信息--> <select id="selectByIdStep2" resultType="Clazz"> select cid,cname from t_clazz where cid = #{id}; </select> </mapper>
(3)最終StudentMapperTest編寫測試,因為Student是主表
package com.bjpowernode.mybatis.test; import com.bjpowernode.mybatis.mapper.StudentMapper; import com.bjpowernode.mybatis.pojo.Student; import com.bjpowernode.mybatis.utils.SqlSessionUtil; import org.apache.ibatis.session.SqlSession; import org.junit.Test; public class StudentMapperTest { @Test public void testSelectByIdStep1(){ SqlSession sqlSession = SqlSessionUtil.openSession(); StudentMapper mapper = sqlSession.getMapper(StudentMapper.class); Student student = mapper.selectByIdStep1(3); System.out.println(student); sqlSession.close(); } }
執(zhí)行結(jié)果:
2. 多對?延遲加載
(1)延遲加載的核心是:用到的在查詢,暫時訪問不到的數(shù)據(jù)可以先不查詢。
(2)作用:提?程序的執(zhí)?效率;不用的時候也查性能肯定低,例如笛卡爾積現(xiàn)象
(3)在MyBatis中如何開啟延遲加載:asspciation標簽當中添加fetchType="lazy"
例1:不開啟延遲加載機制,假如只訪問學生表t_student的sname屬性,和t_clazz表實際上是沒有任何關(guān)系的
package com.bjpowernode.mybatis.test; import com.bjpowernode.mybatis.mapper.StudentMapper; import com.bjpowernode.mybatis.pojo.Student; import com.bjpowernode.mybatis.utils.SqlSessionUtil; import org.apache.ibatis.session.SqlSession; import org.junit.Test; public class StudentMapperTest { @Test public void testSelectByIdStep1(){ SqlSession sqlSession = SqlSessionUtil.openSession(); StudentMapper mapper = sqlSession.getMapper(StudentMapper.class); Student student = mapper.selectByIdStep1(3); // System.out.println(student); // 只訪問sname屬性 System.out.println(student.getSname()); sqlSession.close(); } }
執(zhí)行結(jié)果:實際上執(zhí)行了兩個查詢語句,效率變低
例2:在asspciation標簽中開啟延遲機制,就能做到只執(zhí)行第一條SQL語句,第二條不執(zhí)行;
<?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.bjpowernode.mybatis.mapper.StudentMapper"> <resultMap id="studentResultMapByStep" type="Student"> <id property="sid" column="sid"/> <result property="sname" column="sname" /> <!--使用association標簽,并開啟延遲加載機制--> <association property="clazz" select="com.bjpowernode.mybatis.mapper.ClazzMapper.selectByIdStep2" column="cid" fetchType="lazy"/> </resultMap> <select id="selectByIdStep1" resultMap="studentResultMapByStep"> select sid,sname,cid from t_student where sid = #{sid}; </select> </mapper>
執(zhí)行結(jié)果:同樣還是只訪問學生表t_student的sname屬性,此時就是只查詢一張表即可
(4)在association標簽中配置fetchType=“lazy”,實際上是局部的設置,只對當前的association關(guān)聯(lián)的SQL語句起作用!
(5)那么怎樣在mybatis中如何開啟全局的延遲加載呢?需要setting配置,如下:
(6)在核心配置文件mybatis-config.xml文件當中使用setting標簽進行配置
<!--啟?全局延遲加載機制--> <settings> <setting name="lazyLoadingEnabled" value="true"/> </settings>
(7)開啟全局延遲加載之后,所有的SQL都會?持延遲加載,但是如果某個SQL你不希望它?持延遲加載怎么辦呢? 將fetchType設置為eager
<?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.bjpowernode.mybatis.mapper.StudentMapper"> <resultMap id="studentResultMapByStep" type="Student"> <id property="sid" column="sid"/> <result property="sname" column="sname" /> <!--使用association標簽,不開啟延遲加載機制--> <association property="clazz" select="com.bjpowernode.mybatis.mapper.ClazzMapper.selectByIdStep2" column="cid" fetchType="eager"/> </resultMap> <select id="selectByIdStep1" resultMap="studentResultMapByStep"> select sid,sname,cid from t_student where sid = #{sid}; </select> </mapper>
3. ?對多
?對多的實現(xiàn),通常是在?的??中有List集合屬性!
pojo類Clazz中添加?個屬性:List<Student> stu; 表示班級關(guān)聯(lián)的學生對象,增加setter and getter方法,重寫toString方法。
package com.bjpowernode.mybatis.pojo; import java.util.*; public class Clazz { private Integer cid; private String cname; private List<Student> stus; public Clazz() { } public Clazz(Integer cid, String cname) { this.cid = cid; this.cname = cname; } @Override public String toString() { return "Clazz{" + "cid=" + cid + ", cname='" + cname + '\'' + ", stus=" + stus + '}'; } public List<Student> getStus() { return stus; } public void setStus(List<Student> stus) { this.stus = stus; } public Integer getCid() { return cid; } public void setCid(Integer cid) { this.cid = cid; } public String getCname() { return cname; } public void setCname(String cname) { this.cname = cname; } }
?對多的實現(xiàn)通常包括兩種實現(xiàn)?式:
①第?種?式:collection
②第?種?式:分步查詢
第?種?式:collection
注:這次t_calss是主表,所以是在ClazzMapper、ClazzMapper.xml、ClazzMapperTest當中完成一些列操作。
三兄弟之一:ClazzMapper接口,編寫方法
package com.bjpowernode.mybatis.mapper; import com.bjpowernode.mybatis.pojo.Clazz; public interface ClazzMapper { // 根據(jù)班級編號查詢班級信息 Clazz selectByIdCollection(Integer cid); }
三兄弟之二:ClazzMapper.xml文件,編寫sql語句
使用collection標簽,和上面使用association標簽的第二種方法是很相似的
①property屬性:提供要映射的POJO類的屬性名,這里就是stus
②ofType屬性:用來指定集合當中的元素類型com.bjpowernode.mybatis.Student
<?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.bjpowernode.mybatis.mapper.ClazzMapper"> <resultMap id="clazzResultMap" type="Clazz"> <id property="cid" column="cid"/> <result property="cname" column="cname"/> <!--ofType用來指定集合當中的元素類型--> <collection property="stus" ofType="Student"> <id property="sid" column="sid"/> <result property="sname" column="sname"/> </collection> </resultMap> <select id="selectByIdCollection" resultMap="clazzResultMap"> select c.cid,c.cname,s.sid,s.sname from t_clazz c left join t_student s on c.cid = s.cid where c.cid = #{cid} </select> </mapper>
三兄弟之三:ClazzMappeTest類,用來編寫測試類
package com.bjpowernode.mybatis.test; import com.bjpowernode.mybatis.mapper.ClazzMapper; import com.bjpowernode.mybatis.pojo.Clazz; import com.bjpowernode.mybatis.utils.SqlSessionUtil; import org.apache.ibatis.session.SqlSession; import org.junit.Test; public class ClazzMapperTest { @Test public void testSelectByIdCollection(){ SqlSession sqlSession = SqlSessionUtil.openSession(); ClazzMapper mapper = sqlSession.getMapper(ClazzMapper.class); Clazz clazz = mapper.selectByIdCollection(1001); System.out.println(clazz); sqlSession.close(); } }
執(zhí)行結(jié)果:
查詢的結(jié)果是stus變量是一個有三個數(shù)據(jù)的List集合,其中clazz是null屬于正?,F(xiàn)象,如果clazz還有值,就會與前面的Student形成遞歸循環(huán)
第?種?式:分步查詢和延遲加載
(1)分布查詢第一步:先根據(jù)班級編號獲取班級信息
①在ClazzMapper中編寫第一步的查詢方法
package com.bjpowernode.mybatis.mapper; import com.bjpowernode.mybatis.pojo.Clazz; public interface ClazzMapper { // 分布查詢第一步:根據(jù)班級編號,獲取班級信息 Clazz selectByStep1(Integer cid); }
②在ClazzMapper.xml中編寫SQL語句,并指明兩者之間的關(guān)聯(lián)關(guān)系
<?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.bjpowernode.mybatis.mapper.ClazzMapper"> <!--分布查詢第一步:根據(jù)班級的cid獲取班級信息--> <resultMap id="clazzResultMapStep" type="Clazz"> <id property="cid" column="cid"/> <result property="cname" column="cname"/> <collection property="stus" select="com.bjpowernode.mybatis.mapper.StudentMapper.selectByCidStep2" column="cid" /> </resultMap> <select id="selectByStep1" resultMap="clazzResultMapStep"> select cid,cname from t_clazz where cid = #{cid} </select> </mapper>
(2)分布查詢第二步:根據(jù)學生的cid查詢班級信息
①在StudentMapper中編寫第二步的查詢方法
package com.bjpowernode.mybatis.mapper; import com.bjpowernode.mybatis.pojo.Student; import java.util.List; public interface StudentMapper { // 分布查詢第二步:根據(jù)班級編號查詢學生信息 List<Student> selectByCidStep2(Integer cid); }
②在StudentMapper.xml中編寫SQL語句
<?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.bjpowernode.mybatis.mapper.StudentMapper"> <select id="selectByCidStep2" resultType="Student"> select * from t_student where cid = #{cid} </select> </mapper>
(3)最終ClazzMapperTest編寫測試,因為Clazz是主表
package com.bjpowernode.mybatis.test; import com.bjpowernode.mybatis.mapper.ClazzMapper; import com.bjpowernode.mybatis.pojo.Clazz; import com.bjpowernode.mybatis.utils.SqlSessionUtil; import org.apache.ibatis.session.SqlSession; import org.junit.Test; public class ClazzMapperTest { @Test public void testSelectByStep1(){ SqlSession sqlSession = SqlSessionUtil.openSession(); ClazzMapper mapper = sqlSession.getMapper(ClazzMapper.class); Clazz clazz = mapper.selectByStep1(1001); System.out.println(clazz); sqlSession.close(); } }
執(zhí)行結(jié)果:
?對多延遲加載機制和多對?是?樣的,同樣是通過兩種?式:
第?種:fetchType="lazy"
第?種:修改全局的配置setting,lazyLoadingEnabled=true,如果開啟全局延遲加載,想讓某個 sql不使?延遲加載:fetchType="eager"
到此這篇關(guān)于MyBatis的?級映射及延遲加載的文章就介紹到這了,更多相關(guān)MyBatis延遲加載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot整合Javamail實現(xiàn)郵件發(fā)送的詳細過程
日常開發(fā)過程中,我們經(jīng)常需要使用到郵件發(fā)送任務,比方說驗證碼的發(fā)送、日常信息的通知等,下面這篇文章主要給大家介紹了關(guān)于SpringBoot整合Javamail實現(xiàn)郵件發(fā)送的詳細過程,需要的朋友可以參考下2022-10-10SpringMVC使用@Valid注解進行數(shù)據(jù)驗證的方法
本篇文章主要介紹了SpringMVC使用@Valid注解進行數(shù)據(jù)驗證的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02SpringBoot快速集成jxls-poi(自定義模板,支持本地文件導出,在線文件導出)
這篇文章主要介紹了SpringBoot快速集成jxls-poi(自定義模板,支持本地文件導出,在線文件導出),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-09-09Intellij IDEA導入eclipse web項目的操作步驟詳解
Eclipse當中的web項目都會有這兩個文件,但是idea當中應該是沒有的,所以導入會出現(xiàn)兼容問題,但是本篇文章會教大家如何導入,并且導入過后還能使用tomcat運行,需要的朋友可以參考下2023-08-08springboot集成gzip和zip數(shù)據(jù)壓縮傳輸(適用大數(shù)據(jù)信息傳輸)
?在大數(shù)據(jù)量的傳輸中,壓縮數(shù)據(jù)后進行傳輸可以一定程度的解決速度問題,本文主要介紹了springboot集成gzip和zip數(shù)據(jù)壓縮傳輸,具有一定的參考價值,感興趣的可以了解一下2023-09-09SpringBoot集成ip2region實現(xiàn)ip白名單的代碼示例
ip2region v2.0 - 是一個離線IP地址定位庫和IP定位數(shù)據(jù)管理框架,10微秒級別的查詢效率,提供了眾多主流編程語言的 xdb 數(shù)據(jù)生成和查詢客戶端實現(xiàn),本文介紹了SpringBoot集成ip2region實現(xiàn)ip白名單的代碼工程,需要的朋友可以參考下2024-08-08