MyBatis學(xué)習(xí)筆記(二)之關(guān)聯(lián)關(guān)系
今天主要學(xué)習(xí)的關(guān)聯(lián)關(guān)系是一對(duì)一關(guān)系與一對(duì)多關(guān)系。
一、一對(duì)一關(guān)系
還是通過(guò)例子來(lái)解釋說(shuō)明。(一個(gè)妻子對(duì)應(yīng)一個(gè)丈夫)。
1)數(shù)據(jù)庫(kù)信息
create table t_wife( id int primary key auto_increment, wife_name varchar(), fk_husband_id int ); create table t_husband( id int primary key auto_increment, husband_name varchar() ); insert into t_husband values (null,'hello'); insert into t_wife values(null,'kitty',)
2)對(duì)應(yīng)的JavaBean代碼
雖然在數(shù)據(jù)庫(kù)里只有一方配置的外鍵,但是這個(gè)一對(duì)一是雙向的關(guān)系。
HusbandBean.java
package com.cy.mybatis.beans; import java.io.Serializable; /** * one to one * @author acer * */ public class HusbandBean implements Serializable{ private static final long serialVersionUID = L; private Integer id; private String name; private WifeBean wife; public HusbandBean() { super(); } public HusbandBean(Integer id, String name, WifeBean wife) { super(); this.id = id; this.name = name; this.wife = wife; } 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 WifeBean getWife() { return wife; } public void setWife(WifeBean wife) { this.wife = wife; } @Override public String toString() { return "Husband [id=" + id + ", name=" + name + ", wife=" + wife + "]"; } }
WifeBean.java
package com.cy.mybatis.beans; import java.io.Serializable; /** * one to one * @author acer * */ public class WifeBean implements Serializable{ private static final long serialVersionUID = L; private Integer id; private String name; private HusbandBean husband; public WifeBean() { super(); } public WifeBean(Integer id, String name, HusbandBean husband) { super(); this.id = id; this.name = name; this.husband = husband; } 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 HusbandBean getHusband() { return husband; } public void setHusband(HusbandBean husband) { this.husband = husband; } @Override public String toString() { return "Wife [id=" + id + ", name=" + name + ", husband=" + husband + "]"; } }
3)接下來(lái)建立兩個(gè)接口,HusbandMapper,WifeMapper.
HusbandMapper
package com.cy.mybatis.mapper; import com.cy.mybatis.beans.HusbandBean; public interface HusbandMapper { /** * 根據(jù)id查詢丈夫信息 * @param id * @return * @throws Exception */ public HusbandBean selectHusbandById (int id) throws Exception; /** * 根據(jù)id查詢丈夫與妻子信息 * @param id * @return * @throws Exception */ public HusbandBean selectHusbandAndWife(int id) throws Exception; }
4)定義HusbandMapper.xml文件
<?xml version="." encoding="UTF-"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper ." "http://mybatis.org/dtd/mybatis--mapper.dtd"> <mapper namespace="com.cy.mybatis.mapper.HusbandMapper"> <resultMap type="HusbandBean" id="husbandAndWife"> <id property="id" column="id" javaType="java.lang.Integer"/> <result property="name" column="name" javaType="java.lang.String"/> <!-- association – 一個(gè)復(fù)雜的類(lèi)型關(guān)聯(lián);許多結(jié)果將包成這種類(lèi)型 嵌入結(jié)果映射 – 結(jié)果映射自身的關(guān)聯(lián),或者參考一個(gè) column="id" 這里的id指的是在t_wife表來(lái)的主鍵id 這個(gè)查詢妻子,所以在妻子mapper里有個(gè)方法 --> <association property="wife" column="id" javaType="WifeBean" select="com.cy.mybatis.mapper.WifeMapper.selectWifeByHusbandId" ></association> </resultMap> <!-- resultType 返回類(lèi)型 從這條語(yǔ)句中返回的期望類(lèi)型的類(lèi)的完全限定名或別名 。--> <select id="selectHusbandById" resultType="HusbandBean"> select * from t_husband where id=#{id} </select> <!-- resultMap 命名引用外部的 resultMap。返回的是一個(gè)集合。--> <select id="selectHusbandAndWife" resultMap="husbandAndWife"> select * from t_husband where id=#{id} </select> </mapper>
在WifeMapper.xml里有個(gè)方法
<?xml version="." encoding="UTF-"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper ." "http://mybatis.org/dtd/mybatis--mapper.dtd"> <mapper namespace="com.cy.mybatis.mapper.WifeMapper"> <select id="selectWifeByHusbandId" resultType="WifeBean"> select * from t_wife where fk_husband_id = #{id} </select> </mapper>
5)寫(xiě)個(gè)實(shí)現(xiàn)
package com.cy.mybatis.service; import org.apache.ibatis.session.SqlSession; import com.cy.mybatis.beans.HusbandBean; import com.cy.mybatis.mapper.HusbandMapper; import com.cy.mybatis.tools.DBTools; public class OneToOneService { public static void main(String[] args) { selectHusbandAndWife(); } private static void selectHusbandAndWife() { SqlSession session = DBTools.getSession(); HusbandMapper hm = session.getMapper(HusbandMapper.class); try { HusbandBean husband = hm.selectHusbandAndWife(); System.out.println(husband); session.commit(); } catch (Exception e) { e.printStackTrace(); } } }
注意:那個(gè)工具類(lèi)還是前一章那樣寫(xiě)的,就相當(dāng)與在昨天的基礎(chǔ)上建立的。
注意:
mybatis實(shí)際是對(duì)XML進(jìn)行操作,我們所有的方法都直接定義在XML中,寫(xiě)個(gè)接口只是為了更好的符合我們3層的思想,如果不寫(xiě)接口,直接通過(guò)session也可以直接操作xml中的方法 ,
XML中只要有方法,就可以使用,而調(diào)用的方式就是:namespace+方法名;
例外使用resultType時(shí),一定要保證,你屬性名與字段名相同;
如果不相同,就使用resultMap 。
二、一對(duì)多關(guān)系
還是通過(guò)例子來(lái)解釋說(shuō)明。(一把鎖對(duì)應(yīng)多把鑰匙)。
2.1)數(shù)據(jù)庫(kù)信息 這里沒(méi)有添加數(shù)據(jù)了,我們用批量添加數(shù)據(jù)
create table t_key( id int primary key auto_increment, key_name varchar(), fk_lock_id int ); create table t_lock( id int primary key auto_increment, lock_name varchar() );
2.2) 實(shí)體類(lèi)
KeyBean.java
package com.cy.mybatis.beans; import java.io.Serializable; /** * manyTOone * * */ public class KeyBean implements Serializable { private static final long serialVersionUID = L; private Integer id; private String key; private LockBean lock; public KeyBean() { super(); } public KeyBean(Integer id, String key, LockBean lock) { super(); this.id = id; this.key = key; this.lock = lock; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getKey() { return key; } public void setKey(String key) { this.key = key; } public LockBean getLock() { return lock; } public void setLock(LockBean lock) { this.lock = lock; } @Override public String toString() { return "KeyBean [id=" + id + ", key=" + key + ", lock=" + lock + "]"; } } LockBean.java package com.cy.mybatis.beans; import java.io.Serializable; import java.util.List; /** * oneTOmany * * */ public class LockBean implements Serializable{ private static final long serialVersionUID = L; private Integer id; private String lock; private List<KeyBean> keys; public LockBean() { super(); } public LockBean(Integer id, String lock, List<KeyBean> keys) { super(); this.id = id; this.lock = lock; this.keys = keys; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getLock() { return lock; } public void setLock(String lock) { this.lock = lock; } public List<KeyBean> getKeys() { return keys; } public void setKeys(List<KeyBean> keys) { this.keys = keys; } @Override public String toString() { return "LockBean [id=" + id + ", keys=" + keys + ", lock=" + lock + "]"; } }
2.3) 建立接口
KeyMapper.java package com.cy.mybatis.mapper; import java.util.List; import org.apache.ibatis.annotations.Param; import com.cy.mybatis.beans.KeyBean; public interface KeyMapper { /** * 批量添加鑰匙 * @return * 提倡 這樣使用 @Param("keys") */ public int batchSaveKeys(@Param("keys")List<KeyBean> keys); } LockMapper.java package com.cy.mybatis.mapper; import org.apache.ibatis.annotations.Param; import com.cy.mybatis.beans.LockBean; public interface LockMapper { /** * 添加鎖 * @param lock * @return */ public int saveLock(@Param("lock")LockBean lock); /** * 根據(jù)ID查詢鎖的資料 * @param id * @return */ public LockBean findLockById(int id); /** * 根據(jù)ID查詢鎖與鑰匙的資料 * onemany * @param id * @return */ public LockBean findLockAndKeys(int id); }
2.4) 建立xml文件
KeyMapper.xml
<?xml version="." encoding="UTF-"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper ." "http://mybatis.org/dtd/mybatis--mapper.dtd"> <mapper namespace="com.cy.mybatis.mapper.KeyMapper"> <resultMap id="keyMap" type="KeyBean"> <id property="id" column="id" javaType="java.lang.Integer"/> <result property="key" column="key_name" javaType="java.lang.String"/> </resultMap> <!--collection 為用于遍歷的元素(必選),支持?jǐn)?shù)組、List、Set --> <!-- item 表示集合中每一個(gè)元素進(jìn)行迭代時(shí)的別名. --> <!--separator表示在每次進(jìn)行迭代之間以什么符號(hào)作為分隔 符. --> <insert id="batchSaveKeys"> insert into t_key values <foreach collection="keys" item="key" separator=","> (null,#{key.key},#{key.lock.id}) </foreach> </insert> <select id="findKeysByLockId" resultMap="keyMap"> select * from t_key where fk_lock_id = #{id} </select> </mapper> LockMapper.xml <?xml version="." encoding="UTF-"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper ." "http://mybatis.org/dtd/mybatis--mapper.dtd"> <mapper namespace="com.cy.mybatis.mapper.LockMapper"> <!--自定義返回類(lèi)型 --> <resultMap id="lockMap" type="LockBean"> <id property="id" column="id" javaType="java.lang.Integer"/> <result property="lock" column="lock_name" javaType="java.lang.String"/> </resultMap> <!--自定義返回類(lèi)型 --> <resultMap id="lockAndKeysMap" type="LockBean"> <id property="id" column="id" javaType="java.lang.Integer"/> <result property="lock" column="lock_name" javaType="java.lang.String"/> <collection property="keys" column="id" select="com.cy.mybatis.mapper.KeyMapper.findKeysByLockId"></collection> </resultMap> <insert id="saveLock"> insert into t_lock values (null,#{lock.lock}) </insert> <select id="findLockById" resultMap="lockMap"> select * from t_lock where id= #{id} </select> <select id="findLockAndKeys" resultMap="lockAndKeysMap"> select * from t_lock where id= #{id} </select> </mapper>
2.5 ) 實(shí)現(xiàn)
package com.cy.mybatis.service; import java.util.ArrayList; import java.util.List; import org.apache.ibatis.session.SqlSession; import com.cy.mybatis.beans.KeyBean; import com.cy.mybatis.beans.LockBean; import com.cy.mybatis.mapper.KeyMapper; import com.cy.mybatis.mapper.LockMapper; import com.cy.mybatis.tools.DBTools; public class OneToManyService { public static void main(String[] args) { // saveLock(); // batchSaveKeys(); findLockAndKeys(); } private static void findLockAndKeys() { SqlSession session = DBTools.getSession(); LockMapper lm = session.getMapper(LockMapper.class); LockBean lock = lm.findLockAndKeys(); System.out.println(lock); } private static void batchSaveKeys() { SqlSession session = DBTools.getSession(); LockMapper lm = session.getMapper(LockMapper.class); KeyMapper km = session.getMapper(KeyMapper.class); LockBean lock = lm.findLockById(); List<KeyBean> keys = new ArrayList<KeyBean>(); for(int i = ; i < ; i++){ KeyBean key = new KeyBean(null, "鑰匙"+i, lock); keys.add(key); } km.batchSaveKeys(keys); session.commit(); } private static void saveLock() { SqlSession session = DBTools.getSession(); LockMapper lm = session.getMapper(LockMapper.class); LockBean lock = new LockBean(null, "鎖", null); lm.saveLock(lock); session.commit(); } }
結(jié)果顯示:
三 、批量操作與分頁(yè)
這里就使用前一章的User.就寫(xiě)出主要的代碼。
首先定義分頁(yè)對(duì)象。
package com.cy.mybatis.beans; import java.util.List; /** * 定義一個(gè)分頁(yè)對(duì)象 * * @author * */ public class Pager { private int pageNo;// 當(dāng)前頁(yè)碼 private int pageTotal;// 總頁(yè)碼 private int rowsTotal;// 總條數(shù) private int pageSize;// 每頁(yè)顯示條數(shù) private List<Object> list;// 返回的數(shù)據(jù)集合 public int getPageNo() { return pageNo; } public void setPageNo(int pageNo) { this.pageNo = pageNo; } public int getPageTotal() { return pageTotal; } public void setPageTotal(int pageTotal) { this.pageTotal = pageTotal; } public int getRowsTotal() { return rowsTotal; } public void setRowsTotal(int rowsTotal) { this.rowsTotal = rowsTotal; pageTotal = rowsTotal % pageSize == ? rowsTotal / pageSize : rowsTotal / pageSize + ; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public List<?> getList() { return list; } public void setList(List<Object> list) { this.list = list; } @Override public String toString() { return "Pager [pageNo=" + pageNo + ", pageTotal=" + pageTotal + ", rowsTotal=" + rowsTotal + ", pageSize=" + pageSize + ", list=" + list + "]"; } } UserMapper.java接口。 package com.cy.mybatis.mapper; import java.util.List; import java.util.Map; import org.apache.ibatis.annotations.Param; import com.cy.mybatis.beans.UserBean; public interface UserMapper { /** * 新增用戶 * @param user * @return * @throws Exception */ public int insertUser(@Param("user")UserBean user) throws Exception; /** * 修改用戶 * @param user * @param id * @return * @throws Exception */ public int updateUser (@Param("u")UserBean user,@Param("id")int id) throws Exception; /** * 刪除用戶 * @param id * @return * @throws Exception */ public int deleteUser(int id) throws Exception; /** * 根據(jù)id查詢用戶信息 * @param id * @return * @throws Exception */ public UserBean selectUserById(int id) throws Exception; /** * 查詢所有的用戶信息 * @return * @throws Exception */ public List<UserBean> selectAllUser() throws Exception; /** * 批量增加 * @param user * @return * @throws Exception */ public int batchInsertUser(@Param("users")List<UserBean> user) throws Exception; /** * 批量刪除 * @param list * @return * @throws Exception */ public int batchDeleteUser(@Param("list")List<Integer> list) throws Exception; /** * 分頁(yè)查詢數(shù)據(jù) * @param parma * @return * @throws Exception */ public List<UserBean> pagerUser(Map<String, Object> parmas) throws Exception; /** * * 分頁(yè)統(tǒng)計(jì)數(shù)據(jù) * @param parma * @return * @throws Exception */ public int countUser(Map<String, Object> parmas) throws Exception; } xml文件 <?xml version="." encoding="UTF-"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper ." "http://mybatis.org/dtd/mybatis--mapper.dtd"> <mapper namespace="com.cy.mybatis.mapper.UserMapper"> <!-- 自定義返回結(jié)果集 --> <resultMap id="userMap" type="UserBean"> <id property="id" column="id" javaType="java.lang.Integer"></id> <result property="username" column="username" javaType="java.lang.String"></result> <result property="password" column="password" javaType="java.lang.String"></result> <result property="account" column="account" javaType="java.lang.Double"></result> </resultMap> <!-- 在各種標(biāo)簽中的id屬性必須和接口中的方法名相同 , id屬性值必須是唯一的,不能夠重復(fù)使用。parameterType屬性指明查詢時(shí)使用的參數(shù)類(lèi)型,resultType屬性指明查詢返回的結(jié)果集類(lèi)型--> <!-- useGeneratedKeys:( 僅 對(duì) insert 有 用 ) 這 會(huì) 告 訴 MyBatis 使 用 JDBC 的getGeneratedKeys 方法來(lái)取出由數(shù)據(jù)(比如:像 MySQL 和 SQLServer 這樣的數(shù)據(jù)庫(kù)管理系統(tǒng)的自動(dòng)遞增字段)內(nèi)部生成的主鍵。默認(rèn)值: false。 --> <!--keyProperty: (僅對(duì) insert有用)標(biāo)記一個(gè)屬性, MyBatis 會(huì)通過(guò) getGeneratedKeys或者通過(guò) insert 語(yǔ)句的 selectKey 子元素設(shè)置它的值。默認(rèn):不設(shè)置。 --> <!--#{}中的內(nèi)容,為占位符,當(dāng)參數(shù)為某個(gè)JavaBean時(shí),表示放置該Bean對(duì)象的屬性值 --> <insert id="insertUser" useGeneratedKeys="true" keyProperty="user.id"> insert into t_user (username,password,account) values (#{user.username},#{user.password},#{user.account}) </insert> <update id="updateUser"> update t_user set username=#{u.username},password=#{u.password},account=#{u.account} where id=#{id} </update> <delete id="deleteUser" parameterType="int"> delete from t_user where id=#{id} </delete> <select id="selectUserById" parameterType="int" resultMap="userMap"> select * from t_user where id=#{id} </select> <select id="selectAllUser" resultMap="userMap"> select * from t_user </select> <!-- 批量操作和foreach標(biāo)簽 --> <insert id="batchInsertUser" parameterType="java.util.List"> insert into t_user values <foreach collection="users" item="users" separator=","> (null,#{users.username},#{users.password},#{users.account}) </foreach> </insert> <delete id="batchDeleteUser"> delete from t_user where id in ( <foreach collection="list" item="list" separator=","> #{id} </foreach> ) </delete> <!--collection 為用于遍歷的元素(必選),支持?jǐn)?shù)組、List、Set --> <!-- item 表示集合中每一個(gè)元素進(jìn)行迭代時(shí)的別名. --> <!--separator表示在每次進(jìn)行迭代之間以什么符號(hào)作為分隔 符. --> <select id="pagerUser" parameterType="java.util.Map" resultMap="userMap"> select * from t_user where = <if test="username!=null"> and username like '%${username}%' </if> limit ${index},${pageSize} </select> <select id="countUser" parameterType="java.util.Map" resultType="int"> select count(*) from t_user where = <if test="username != null"> and username like '%${username}%' </if> </select> </mapper> #在生成SQL時(shí),對(duì)于字符類(lèi)型參數(shù),會(huì)拼裝引號(hào) $在生成SQL時(shí),不會(huì)拼裝引號(hào),可用于order by之類(lèi)的參數(shù)拼裝 測(cè)試類(lèi) package com.cy.mybatis.service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.ibatis.session.SqlSession; import com.cy.mybatis.beans.UserBean; import com.cy.mybatis.tools.DBTools; import com.cy.mybatis.mapper.UserMapper; public class UserService { /** * @param args */ public static void main(String[] args) { // insertUser(); // deleteUser(); // updateUser(); // selectUserById(); // selectAllUser(); // batchInsertUser(); // batchDeleteUser(); // countUser(); pagerUser(); } private static void countUser() { SqlSession session = DBTools.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); Map<String,Object> params = new HashMap<String,Object>(); params.put("username", "kitty"); int index = ; params.put("index", index);//從第幾頁(yè)開(kāi)始。mysql是從開(kāi)始的 params.put("pageSize", );//每頁(yè)顯示的數(shù)據(jù)條數(shù) int count; try { count = mapper.countUser(params); System.out.println(count); } catch (Exception e) { e.printStackTrace(); } } private static void pagerUser() { SqlSession session = DBTools.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); Map<String,Object> params = new HashMap<String,Object>(); params.put("username", "kitty"); params.put("index", );//從第幾頁(yè)開(kāi)始。mysql是從開(kāi)始的 params.put("pageSize", );//每頁(yè)顯示的數(shù)據(jù)條數(shù) try { List<UserBean> u = mapper.pagerUser(params); for (UserBean userBean : u) { System.out.println("--------"+userBean); } } catch (Exception e) { e.printStackTrace(); } } private static void batchDeleteUser() { SqlSession session = DBTools.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); List<Integer> ids = new ArrayList<Integer>(); for(int i = ; i < ; i ++){ ids.add(i); } try { mapper.batchDeleteUser(ids); session.commit(); } catch (Exception e) { e.printStackTrace(); } } private static void batchInsertUser() { SqlSession session = DBTools.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); List<UserBean> users = new ArrayList<UserBean>(); for(int i = ; i < ; i ++){ UserBean user = new UserBean("kitty"+i, "", .); users.add(user); } try { mapper.batchInsertUser(users); session.commit(); } catch (Exception e) { e.printStackTrace(); } } /** * 新增用戶 */ private static void insertUser() { SqlSession session = DBTools.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); UserBean user = new UserBean("懿", "", .); try { mapper.insertUser(user); System.out.println(user.toString()); session.commit(); } catch (Exception e) { e.printStackTrace(); session.rollback(); } } /** * 刪除用戶 */ private static void deleteUser(){ SqlSession session=DBTools.getSession(); UserMapper mapper=session.getMapper(UserMapper.class); try { mapper.deleteUser(); session.commit(); } catch (Exception e) { e.printStackTrace(); session.rollback(); } } /** * 修改用戶數(shù)據(jù) */ private static void updateUser(){ SqlSession session=DBTools.getSession(); UserMapper mapper=session.getMapper(UserMapper.class); UserBean user =new UserBean("小明", "",.); try { mapper.updateUser(user, ); session.commit(); } catch (Exception e) { e.printStackTrace(); session.rollback(); } } /** * 根據(jù)id查詢用戶 */ private static void selectUserById(){ SqlSession session=DBTools.getSession(); UserMapper mapper=session.getMapper(UserMapper.class); try { UserBean user= mapper.selectUserById(); System.out.println(user.toString()); session.commit(); } catch (Exception e) { e.printStackTrace(); session.rollback(); } } /** * 查詢所有的用戶 */ private static void selectAllUser(){ SqlSession session=DBTools.getSession(); UserMapper mapper=session.getMapper(UserMapper.class); try { List<UserBean> user=mapper.selectAllUser(); System.out.println(user.toString()); session.commit(); } catch (Exception e) { e.printStackTrace(); session.rollback(); } } }
看一下項(xiàng)目的整體:
每件事都需要堅(jiān)持!
- Mybatis多表關(guān)聯(lián)查詢的實(shí)現(xiàn)(DEMO)
- Mybatis 一對(duì)多和多對(duì)一關(guān)聯(lián)查詢問(wèn)題
- 深入淺出MyBatis中映射文件和實(shí)體類(lèi)的關(guān)聯(lián)性
- 實(shí)例講解Java的MyBatis框架對(duì)MySQL中數(shù)據(jù)的關(guān)聯(lián)查詢
- MyBatis實(shí)踐之動(dòng)態(tài)SQL及關(guān)聯(lián)查詢
- MyBatis學(xué)習(xí)教程(五)-實(shí)現(xiàn)關(guān)聯(lián)表查詢方法詳解
- mybatis實(shí)現(xiàn)一對(duì)一關(guān)聯(lián)映射實(shí)例代碼
- mybatis多對(duì)多關(guān)聯(lián)實(shí)戰(zhàn)教程(推薦)
- mybatis實(shí)現(xiàn)表與對(duì)象的關(guān)聯(lián)關(guān)系_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
- Mybatis中3種關(guān)聯(lián)關(guān)系的實(shí)現(xiàn)方法示例
相關(guān)文章
使用Spring的攔截器監(jiān)測(cè)每個(gè)Controller或方法的執(zhí)行時(shí)長(zhǎng)
這篇文章主要介紹了使用Spring的攔截器監(jiān)測(cè)每個(gè)Controller或方法的執(zhí)行時(shí)長(zhǎng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10Spring Boot中快速操作Mongodb數(shù)據(jù)庫(kù)指南
這篇文章主要給大家介紹了關(guān)于Spring Boot中如何快速操作Mongodb的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05Spring?cloud?Hystrix注解初始化源碼過(guò)程解讀
這篇文章主要為大家介紹了Hystrix初始化部分,我們從源碼的角度分析一下@EnableCircuitBreaker以及@HystrixCommand注解的初始化過(guò)程,有需要的朋友可以借鑒參考下,希望能夠有所幫助2023-12-12HDFS的Java API的訪問(wèn)方式實(shí)例代碼
這篇文章主要介紹了HDFS的Java API的訪問(wèn)方式實(shí)例代碼,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-02-02Fluent Mybatis實(shí)際開(kāi)發(fā)中的優(yōu)勢(shì)對(duì)比
本文給大家介紹如何通過(guò)IQuery和IUpdate定義強(qiáng)大的動(dòng)態(tài)SQL語(yǔ)句,給大家分享Fluent Mybatis實(shí)際開(kāi)發(fā)中的優(yōu)勢(shì)講解,感興趣的朋友一起看看吧2021-08-08