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

基于Mybatis映射的一點(diǎn)心得(分享)

 更新時(shí)間:2021年04月01日 15:20:31   作者:紅尾巴的豬  
下面小編就為大家?guī)硪黄贛ybatis映射的一點(diǎn)心得(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

以前一直使用Hibernate,基本上沒用過Mybatis,工作中需要做映射關(guān)系,簡單的了解下Mybatis的映射。

兩者相差不多都支持一對一,一對多,多對多,本章簡單介紹一對一的使用以及注意點(diǎn)。

建表語句:

CREATE TABLE `bloc` ( 
 
 `id` int(11) NOT NULL auto_increment, 
 
 `name` varchar(255) collate utf8_bin default NULL, 
 
 `company_id` int(11) default NULL, 
 
 `intro` varchar(255) collate utf8_bin default NULL, 
 
 PRIMARY KEY (`id`) 
 
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; 
 
 
 
INSERT INTO`bloc` (`id`, `name`, `company_id`, `intro`) VALUES ('1', '宏偉集團(tuán)', '1', '跨國集團(tuán)');
CREATE TABLE `company` ( 
 
 `id` int(11) NOT NULL, 
 
 `name` varchar(255) collate utf8_bin default NULL, 
 
 `intro` varchar(255) collate utf8_bin default NULL, 
 
 PRIMARY KEY (`id`) 
 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; 
 
INSERT INTO company (`id`, `name`, `intro`) VALUES ('1', '', NULL);

形式一:子查詢

JAVA代碼:SqlSessionHelper.java

package com.demo.mybatis; 
 
import java.io.IOException; 
import java.io.Reader; 
 
import org.apache.ibatis.io.Resources; 
import org.apache.ibatis.session.SqlSessionFactory; 
import org.apache.ibatis.session.SqlSessionFactoryBuilder; 
 
public class SqlSessionHelper { 
 
 public static SqlSessionFactory getSessionFactory() throws IOException{ 
 SqlSessionFactory sessionFactory = null; 
 Reader reader = Resources.getResourceAsReader("configuration.xml"); 
 try{ 
  sessionFactory = new SqlSessionFactoryBuilder().build(reader);; 
 }catch(Exception ex){ 
  ex.printStackTrace(); 
 } 
 return sessionFactory; 
 } 
}

Test.java:

package com.demo.mybatis; 
 
import java.util.List; 
 
import org.apache.ibatis.session.SqlSession; 
 
import mapper.BlocMapper; 
import model.Bloc; 
 
public class Test { 
 
 /** 
 * @param args 
 */
 public static void main(String[] args) { 
  
 try{ 
  SqlSession sqlSession = SqlSessionHelper.getSessionFactory().openSession(); 
  BlocMapper blocMapper = sqlSession.getMapper(BlocMapper.class); 
  List<Bloc> blocs = blocMapper.getBlocList("1"); 
  for (Bloc bloc : blocs) { 
  System.out.println("companyName = "bloc.getCompany().getName()); 
  } 
 }catch(Exception ex){ 
  System.out.println(ex.getMessage()); 
 } 
 
 } 
 
}

mapper:

package mapper; 
 
import java.util.List; 
 
import model.Bloc; 
 
public interface BlocMapper { 
 
 public List<Bloc> getBlocList(String name); 
} 
package mapper; 
 
public interface CompanyMapper { 
 
} 

model:

package model; 
 
public class Bloc { 
 
 private Integer id; 
 
 private String name; 
 
 private String intro; 
 
 private Company company; 
 
 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 getIntro() { 
 return intro; 
 } 
 
 public void setIntro(String intro) { 
 this.intro = intro; 
 } 
 
 public Company getCompany() { 
 return company; 
 } 
 
 public void setCompany(Company company) { 
 this.company = company; 
 } 
 
 
}
package model; 
 
public class Company { 
 
 private Integer id; 
 
 private String name; 
 
 private Integer intro; 
 
 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 Integer getIntro() { 
 return intro; 
 } 
 
 public void setIntro(Integer intro) { 
 this.intro = intro; 
 } 
 
 
}

映射配置如下:(如果是一堆多的話“brandObject”改成實(shí)體List屬性association 改成collection )

<?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="mapper.CompanyMapper"> 
 
 <resultMap id="BaseResultMap" type="model.Company" > 
 <id column="id" property="id" jdbcType="INTEGER" /> 
 <result column="name" property="name" jdbcType="VARCHAR" /> 
 <result column="intro" property="intro" jdbcType="VARCHAR" /> 
 </resultMap> 
 <select id = "getCompanyInfo" parameterType="Integer" resultMap="BaseResultMap"> 
 select * from company where id = #{id} 
 </select> 
</mapper> 
<mapper namespace="mapper.BlocMapper">
 <resultMap id="BaseResultMap" type="model.Bloc" >
 <id column="id" property="id" jdbcType="INTEGER" />
 <result column="name" property="name" jdbcType="VARCHAR" />
 <result column="intro" property="intro" jdbcType="VARCHAR" />
 <association column="company_id" property="company" select="mapper.CompanyMapper.getCompanyInfo">
 </association>
 </resultMap>
 
 <select id="getBlocList" parameterType="String" resultMap="BaseResultMap">
 select * from bloc where name = #{name}
 </select>
</mapper>

column:表中的字段 property:實(shí)體當(dāng)中的字段名 select:引入的另一個(gè)xxxMapper.xml的getCompanyInfo方法

這樣當(dāng)查詢用的映射時(shí)檢測到有select就會執(zhí)行你引入的另一個(gè)Mapper的查詢方法,查詢條件是company_id= 查詢方法的參數(shù)

運(yùn)行結(jié)果

companyName = 

形式二:關(guān)聯(lián)查詢

映射配置實(shí)體測試類一樣:

<?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="mapper.BlocMapper"> 
 <resultMap id="BaseResultMap" type="model.Bloc" > 
 <id column="id" property="id" jdbcType="INTEGER" /> 
 <result column="name" property="name" jdbcType="VARCHAR" /> 
 <result column="intro" property="intro" jdbcType="VARCHAR" /> 
 <!-- 查詢會有賦值紊亂問題 --> 
 <association column="company_id" property="company" resultMap = "mapper.CompanyMapper.BaseResultMap"> 
 </association> 
 <!-- <association column="company_id" property="company" select="mapper.CompanyMapper.getCompanyInfo"> 
 </association> --> 
 </resultMap> 
 
 <select id="getBlocList" parameterType="String" resultMap="BaseResultMap"> 
 <!-- select * from bloc where name = #{name} --> 
 <!-- 查詢會有賦值紊亂問題 --> 
 select * from bloc b left join company c on b.company_id = c.id where b.name = #{name} 
 </select> 
</mapper>

column:表中的字段 property:實(shí)體當(dāng)中的字段名 resultMap :引入另一個(gè)Mapper的映射

值得注意的是:因?yàn)槭乔短子成?,所以形式二在兩個(gè)實(shí)體字段名一樣的情況下會引發(fā)字段賦值的紊亂,例如兩個(gè)實(shí)體都有name 當(dāng)?shù)谝粋€(gè)實(shí)體name有值,第二個(gè)實(shí)體name沒有值的時(shí)候,查詢出來的結(jié)果是兩個(gè)實(shí)體name都有值,且都是一樣的為第一個(gè)實(shí)體的name值

運(yùn)行結(jié)果為

companyName = 宏偉集團(tuán) 

顯然運(yùn)行結(jié)果不是我們想要的結(jié)果

以上簡單的Demo希望能幫助初學(xué)Mybatis童鞋!!

這篇基于Mybatis映射的一點(diǎn)心得(分享)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Mybatis-plus如何更新Null字段詳解

    Mybatis-plus如何更新Null字段詳解

    MyBatis-plus在進(jìn)行更新操作時(shí)不會更新傳入實(shí)體中為null或默認(rèn)值屬性字段,只更新不為null的值、非默認(rèn)值的屬性字段,這篇文章主要給大家介紹了關(guān)于Mybatis-plus如何更新Null字段的相關(guān)資料,需要的朋友可以參考下
    2023-07-07
  • Spring AOP 自定義注解的實(shí)現(xiàn)代碼

    Spring AOP 自定義注解的實(shí)現(xiàn)代碼

    本篇文章主要介紹了Spring AOP 自定義注解的實(shí)現(xiàn)代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • IDEA社區(qū)版下載安裝流程詳解(小白篇)

    IDEA社區(qū)版下載安裝流程詳解(小白篇)

    這篇文章主要介紹了IDEA社區(qū)版下載安裝流程詳解(小白篇),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • SpringBoot接口防抖(防重復(fù)提交)的實(shí)現(xiàn)方法

    SpringBoot接口防抖(防重復(fù)提交)的實(shí)現(xiàn)方法

    SpringBoot接口防抖主要通過前端和后端兩種方式實(shí)現(xiàn),前端通過JavaScript控制用戶操作,后端通過攔截器、過濾器等機(jī)制控制請求頻率,文中介紹的非常詳細(xì),感興趣的可以了解一下
    2024-11-11
  • IDEA中項(xiàng)目集成git提交代碼的詳細(xì)步驟

    IDEA中項(xiàng)目集成git提交代碼的詳細(xì)步驟

    這篇文章主要介紹了IDEA中項(xiàng)目集成git提交代碼的詳細(xì)步驟,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • 基于@Bean修飾的方法參數(shù)的注入方式

    基于@Bean修飾的方法參數(shù)的注入方式

    這篇文章主要介紹了@Bean修飾的方法參數(shù)的注入方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java兩個(gè)集合取差集4種方式舉例

    Java兩個(gè)集合取差集4種方式舉例

    在Java?編程中,經(jīng)常需要對集合進(jìn)行一些操作,比如取兩個(gè)集合的交集、并集和差集,下面這篇文章主要給大家介紹了關(guān)于Java兩個(gè)集合取差集的4種方式,需要的朋友可以參考下
    2024-08-08
  • 一文帶你初識java中的String類

    一文帶你初識java中的String類

    String代表字符串,Java 程序中的所有字符串字面值(如 "abc" )都作為此類的實(shí)例實(shí)現(xiàn),這篇文章主要給大家介紹了關(guān)于java中String類的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • Java中Map與JSON數(shù)據(jù)之間的互相轉(zhuǎn)化

    Java中Map與JSON數(shù)據(jù)之間的互相轉(zhuǎn)化

    我們在開發(fā)中難免和JSON打交道,這不小編最近遇到了,需要把一些信息轉(zhuǎn)成JSON字符串,下面這篇文章主要給大家介紹了關(guān)于Java中Map與JSON數(shù)據(jù)之間的互相轉(zhuǎn)化,需要的朋友可以參考下
    2023-04-04
  • 深入剖析理解AsyncGetCallTrace源碼底層原理

    深入剖析理解AsyncGetCallTrace源碼底層原理

    這篇文章主要為大家介紹了AsyncGetCallTrace源碼的深層原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02

最新評論

孟津县| 中江县| 曲沃县| 明星| 漳浦县| 依兰县| 襄城县| 潜山县| 响水县| 辽源市| 台北县| 衡东县| 台州市| 于都县| 东乡族自治县| 抚远县| 鄂伦春自治旗| 海原县| 武穴市| 苗栗市| 兴城市| 柘城县| 从化市| 泸西县| 资阳市| 海口市| 龙海市| 澄迈县| 镇原县| 滨州市| 永仁县| 房山区| 遂昌县| 上蔡县| 扶风县| 肇东市| 蓬莱市| 浦北县| 玛多县| 海兴县| 庆安县|