三.Mybatis高级查询

一关联查询:
表:
author: id realName userID IDCard
jikeUse: id userName password
visit: visitID userID visitDate visitIp

联合查询:查询所有作者带出其用户名

mapping:
    <resultMap id="JiKeAuthorMap" type="Author">
        <id property="id" column="author.id" />
        <result property="realName" column="realName" />
        <result property="IDCard" column="IDCard" />
        <association property="jikeUser" column="userID"
            javaType="JiKeUser">
            <id property="id" column="jikeUser.id" />
            <result property="userName" column="userName" />
            <result property="password" column="password" />
        </association>
    </resultMap>

    <select id="selectAuthorJoin" resultMap="JiKeAuthorMap">
        select * from author inner join jikeUser on     jikeuser.id=author.userID
    </select>

构造查询:

mapping:

<resultMap id="JiKeAuthorMapByCon" type="Author">
        <id property="id" column="author.id" />
        <result property="realName" column="realName" />
        <result property="IDCard" column="IDCard" />
        <association property="jikeUser" column="userID"
            javaType="JiKeUser">
            <constructor>
                    <arg column="userName" javaType="String" />
                    <arg column="password" javaType="String" />
            </constructor>
        </association>
    </resultMap>

<select id="selectAuthorJoin" resultMap="JiKeAuthorMapByCon">
        select * from author inner join jikeUser 
            on jikeuser.id=author.userID
    </select>

测试:List<Author> ap=session.selectList("selectAuthorJoin");

构造查询有些参数无值

子查询:

mapping:
<resultMap id="JiKeAuthorSubMap" type="Author">
        <id property="id" column="author.id" />
        <result property="realName" column="realName" />
        <result property="IDCard" column="IDCard" />
        <association property="jikeUser" column="userID"
            javaType="JiKeUser" select="findById">
        </association>
</resultMap>

<select id="selectAuthor" resultMap="JiKeAuthorSubMap">
        select * from author 
</select>

懒加载可以在基本配置文件开启:

<settings>
    <setting name="lazyLoadingEnabled" value="true"/>
    <setting name="aggressiveLazyLoading" value="false"/>
</settings>

二.集合查询
表:
jikeUser:id userName password
visit: visitID userID visitDate vistIP

JikeUser类中添加private List visitList;一对多
mapping:

<resultMap id="visitMap" type="JiKeUser">
        <id property="id" column="id" />
        <result property="userName" column="userName" />
        <collection property="visitList" javaType="ArrayList"
            column="visitID" ofType="jike.book.pojo.Visit">
            <result property="visitID" column="visitID" />
            <result property="visitIP" column="visitIP" />
            <result property="visitDate" column="visitDate" />
        </collection>
</resultMap>

<select id="selectVisit" resultMap="visitMap">
        select * from JiKeUser inner join visit on jikeuser.id=visit.userID
</select>

测试:

List<JiKeUser> ap=session.selectList("selectVisit"); 
for(JiKeUser temp:ap) {
                System.out.println("用户名="+temp.getUserName());
                for(Visit oneVisit:temp.getVisitList())
                {
                    System.out.println("登录时间="+oneVisit.getVisitDate()+
                            "登录IP="+oneVisit.getVisitIP());
                }   
            }

三.鉴别器

简单鉴别:
Id Gender Husband wife
主键 性别 丈夫 妻子

为1给丈夫赋值,为2给妻子赋值

<discriminator javaType=“byte" column="gender"> 
           <case value="1" > 
             <result property=”husband” column=“husband" /> 
         </case> 
         <case value="2"    > 
                 <result property=”wife” column=“wife" />
        </case>     
</discrimindator>

复杂鉴别:
会员等级 等级对象
byte UserClass

为1实例化一个普通会员,为2实例化一个高级会员,为3实例化一个VIP

Class    GeneralClass extends UserClass     //普通会员,等级为1
Class    SeniorClass extends UserClass    //高级会员,等级为2
Class    VIPClass extends UserClass     //VIP会员,等级为3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值