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>
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方法??!
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。