在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ mybaits 同一張表的一對多該怎么寫

mybaits 同一張表的一對多該怎么寫

1.同一張表的一對多,如何寫

    public class TownVillageName {

        private String townshipName;

        private List<String> villageCommitteeNames;
    }
    
    <resultMap id="TownVillageNamesResult"
        type="com.lingjiu.leping.pojo.bo.farmland.TownVillageName">
        <result column="township_name" property="townshipName"
            jdbcType="VARCHAR" />
        <collection property="villageCommitteeNames">
        </collection>
    </resultMap>

clipboard.png

回答
編輯回答
故人嘆

mybatis框架的關(guān)聯(lián)配置:

首先假設(shè)我們數(shù)據(jù)庫中有兩個表,一個表示move,另一個是moveType,move里面有一個字段typeid,與moveType表里面的id相對應(yīng)。相信大家已經(jīng)看出來了,一個moveType對應(yīng)多個move,我們查詢move字段的時候,必要的時候得顯示moveType的內(nèi)容,比如我的move的name是:《A計(jì)劃》,那么對應(yīng)的我的moveType就是動作片,而不是直接顯示的id,有人說這不就是sql的內(nèi)連接查詢么?非也,你用sql的內(nèi)連接是顯示不出來MoveType里面的name的,那么,對于這種情況我們該怎么查詢呢?怎么配置呢?

為了不讓大家迷糊,我還是寫全吧,從最基本的實(shí)體類開始:

  首先我們創(chuàng)建一個Move的實(shí)體類,與數(shù)據(jù)庫中的move表相對應(yīng),代碼如下:

public class Move {

private Long id;               //電影id  
private MoveType type;         //電影類型  
private String name;           //電影名稱  
private String actor;          //電影主演  
private String director;       //電影導(dǎo)演  
private Integer price;         //電影價(jià)格  

}

  在這里我們省略getter和setter方法,直接在創(chuàng)建一個實(shí)體類,MoveType,此類與數(shù)據(jù)庫中的moveType表相對應(yīng),代碼如下:

[java]
public class MoveType {

private Integer     id;  
private String      typeName;  

}

  同樣我們省略getter和setter方法,咱們在去建一個dao接口,IMoveDao,與Move類相對應(yīng),代碼如下:

public interface IMoveDao {

/** 
 *  
* @Title: saveMove 
* @Description: 添加電影 
* @param @param move 
* @param @return    設(shè)定文件 
* @return int    返回類型 
* @throws 
 */  
public int  saveMove(Move move);  
/** 
 *  
* @Title: queryMoveByTerm 
* @Description: 動態(tài)查詢電影 
* @param @param mt 
* @param @return    設(shè)定文件 
* @return List<Move>    返回類型 
* @throws 
 */  
public List<Move> queryMoveByTerm(MoveTerm mt);  

}

       接著在創(chuàng)建個IMoveTypeDao接口類,與實(shí)體類MoveType相對應(yīng):

public interface IMoveTypeDao {

/** 
 *  
* @Title: getAllMoveTypes 
* @Description: 查詢?nèi)康碾娪邦愋?
* @param @return    設(shè)定文件 
* @return List<MoveType>    返回類型 
* @throws 
 */  
public List<MoveType>  getAllMoveTypes();  

}

    光有了實(shí)體類和dao接口還遠(yuǎn)遠(yuǎn)不夠,正兒八經(jīng)的配置還沒開始呢。
    我們先配置MoveDaoMapper.xml的映射文件,同樣,此映射文件對應(yīng)的是IMoveDao接口,這個比較復(fù)雜,咱們慢慢的來,代碼如下:
(1)先把頭部拿出來:

<?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">

(2)映射Move實(shí)體類的字段屬性

<!-- 映射Move實(shí)體類的字段屬性 -->

<!-- type="move" 等價(jià)于type="org.entity.Move"-->  
<resultMap type="move" id="moveMapper">  
    <id property="id" column="id"/>  
    <result property="name" column="name"/>  
    <result property="actor" column="actor"/>  
    <result property="director" column="director"/>  
    <result property="price" column="price"/>  

<!-- 關(guān)聯(lián)MoveType實(shí)體類, -->

    <!-- type:實(shí)體類Move中的type對象 -->  
    <!-- typeid:數(shù)據(jù)表Move的typeid -->  
    <!-- selectMoveType:映射的是實(shí)體類MoveType -->  
    <association property="type" column="typeid"  
    select="selectMoveType" />  

</resultMap>

(3)映射實(shí)體類MoveType

<!-- 映射實(shí)體類MoveType -->

<!-- type="moveType" 等價(jià)于type="org.entity.MoveType"一樣  -->  
<resultMap id="moveTypeMapper"  type="moveType" >  
        <id property="id" column="id"/>  
        <result property="typeName" column="typename"/>  
</resultMap>  

(4)對應(yīng)的moveType的映射
[java]
<!-- selectMoveType與上面MoveType實(shí)體類的select相對應(yīng) -->

<!-- moveTypeMapper與上面映射實(shí)體類MoveType的id相對應(yīng) -->  
<select id="selectMoveType"  resultMap="moveTypeMapper">  
    select * from movetype where id=#{typeid}  
</select>  

(5)下面就是咱們在Dao層里面方法的sql實(shí)現(xiàn)了

<!-- 添加電影 -->
<insert id="saveMove" parameterType="move">

insert into   
move  
(id,typeId,name,actor,director,price)  
values  
(#{id},#{type.id},#{name},#{actor},#{director},#{price})  

</insert>

<!-- 動態(tài)查詢電影 -->
<select id="queryMoveByTerm"
parameterType="hashmap"
resultMap="moveMapper">

select   
id,  
typeid,  
name  
,actor  
,director  
,price  
 from move   
  <where>  
    <if test="typeid!=null "> and typeid=#{typeid}</if>  
    <if test="name!=null"> and name=#{name}</if>  
    <if test="actor!=null"> and actor=#{actor}</if>  
    <if test="director!=null"> and director=#{director}</if>  
    <if test="smallPrice!=null"> and price between #{smallPrice}  and #{bigPrice}</if>  
</where>   

</select>

最后記得用<mapper></mapper>把上面的配置包起來。
到此,我們的MoveDaoMapper.xml的配置就結(jié)束了,下面我們來配置一下MoveTypeDaoMapper.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="moveTypeDao">

<select id="getAllMoveTypes" resultType="moveType">  
    select * from movetype   
</select>  

</mapper>

  這里面只有一個查詢所有電影類型的方法,所以比較簡單,重點(diǎn)和難點(diǎn)還是都在MoveDaoMapper.xml里面,最后我在附加一個動態(tài)查詢的條件類吧:

public class MoveTerm {

private Long id;             //電影id  
private MoveType type;      //電影類型  
private String name;        //電影名稱  
private String actor;       //主演  
private String director;    //導(dǎo)演  
private Integer smallPrice; //最低價(jià)格  
private Integer bigPrice;   //最高價(jià)格  

}

省略getter和setter方法??!

2018年9月14日 10:56
編輯回答
薔薇花

一個自連接查詢,不用寫collection啊。直接返回實(shí)體。

2018年3月6日 10:14