mybatis映射和动态SQL:

mybatis 核心:动态sql(自己写sql语句来实现复杂的逻辑)
所有的框架都是一个半成品,所以有些特殊的需求需要自己封装jdbc,一般企业百分之八九十的需求都可以满足;

联合查询:在实体类里面直接注入;提供get和set方法;
如果数据库的名字和实体类的名字不一样,查询如下(可以注意名字,直接查询,这样查询显得很复杂):

<!--resultMap 相当于返回结果集;id必须是resultMap值;type代表返回值类型(可给别名)
    <id property=""><id>只代表id 标签的实体类的属性名,column数据列名
    其他的不是id的属性就是用这个名称result
            mybatis 的封装是数据库的列名,必须和实体bean的属性名相同;用resultMap的情况:
    第一种:数据库列名和属性名不匹配时;第二种是复杂查询时(一对一,一对多)
  property:是类里面的属性名字;column:是数据库的名字;这里是通过映射给值的;
    -->
    <resultMap id="selectByMapResult" type="User">
        <id property="id" column="id"></id>
        <result property="userName" column="userName"></result>
        <result property="userRole" column="userRole"></result>
    </resultMap>
    <select id="selectByMap" resultMap="selectByMapResult" parameterType="Map">
        select u.*,r.roleName from smbms_user u,smbms_role r
        where userName like concat('%',#{userName},'%') and
        userRole=#{userRole} and userRole=r.id;
    </select>

一对一或者一对多的时候:

<resultMap id="selectByRoleResult" type="User">
        <id property="id" column="id"></id>
        <result property="userName" column="userName"></result>
        <result property="userRole" column="userRole"></result>
        <!--在mybatis配置一对一的关系,拿到的是属性名;javaType代表返回的类型,可以给别名			如果是一对多的时候这里的--ofType-->
        <association property="role" javaType="Role">
            <id property="id" column="r_id"></id>
            <result property="roleName" column="roleName"></result>
            <result property="roleCode" column="roleCode"></result>
        </association>
    </resultMap>
    <select id="selectByRole" parameterType="User" resultMap="selectByRoleResult">
        select u.*,r.id as r_id,r.roleName,r.roleCode from smbms_user u,smbms_role r
        where userName like concat('%',#{userName},'%') and
        userRole=#{userRole} and userRole=r.id
    </select>
   resultMap 和 association 里面的数据库id映射的名字不能相同;

动态sql:
if 标签;
where标签 会默认的去除你的or 或者 and符号
trim标签(里面的属性:prefix加前缀;prefixOverrides去除第一个不需要的and符号;suffix是加后缀
suffixOverrides去除最后个不需要的符号或关键字)

<select id="selectAllLike" resultType="User">
        select u.*,r.roleName from smbms_user u,smbms_role r
         <trim prefix="where" prefixOverrides="and" suffix="and userRole=r.id">
        <if test="userRole !=null">
            and userRole=#{userRole}
        </if>
        <if test="userName != null and userName !=''">
            and userName like concat('%',#{userName},'%')
        </if>
         </trim>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值