MyBatis (四) 注解和存储过程

本文介绍MyBatis中实现分页查询的方法及存储过程的使用技巧,包括SQL公共片段的应用、IN和OUT参数的处理方式以及注解方式的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. sql 公共片段

<sql id="publicfindemp">
        select e.*,depname from employee e ,department d
        where d.depid=e.depid
</sql>

使用 sql 公共片段:

 <include refid="publicfindemp"/>
 <!--3.1 分页查询和查询所有-->
    <select id="findEmloyee" parameterType="PageUtil" resultMap="empMap">
        <choose>
            <!-- 分页查询 -->
            <when test="startrow!=0 and pagesize>0" >
                <include refid="publicfindemp"/>
                limit #{startrow},#{pagesize}
            </when>
            <!-- 查询所有 -->
            <otherwise>
                <include refid="publicfindemp"/>
            </otherwise>
        </choose>
    </select>

2. 存储过程原理

delimiter //
create procedure pro_emp(in startrow int,in pagesize int)
begin
   select e.*,d.depname from employee e,department d
    where d.depid=e.depid limit startrow,pagesize;
end 
//
delimiter;
delimiter //
create procedure proc_emptotalcount(out empcount int)
begin
    select count(*) into empcount from employee e,department d
    where d.depid = e.depid;
end
//
delimiter;

在 mapper.xml 里面这么写:
1)IN

<select id="findByPrimaryKey" 
parameterMap="paramMap" >>>>注意要写parameterMap
statementType="CALLABLE" >>>>表示是存储过程
resultType="com.pojo.Employee">
        CALL EmployeeSys.proc_empbyid(?)
</select>
<parameterMap id="paramMap" type="Employee">
  <parameter property="empId" mode="IN" jdbcType="INTEGER"/>
 </parameterMap>

type:封装 java 对象的类型
jdbcType:参数的数据类型,必须是引用数据类型,必须是大写;
mode:存储过程的参数的类型,如果是输入参数则是IN,输出参数则是OUT;
2)OUT

 <select id="getTotalcount" 
 parameterMap="totalcountMap" 
 statementType="CALLABLE">
      CALL EmployeeSys.proc_emptotalcount(?)
  </select>

<parameterMap id="totalcountMap" type="PageUtil">
     <parameter property="totalcount" mode="OUT" jdbcType="INTEGER"/>
</parameterMap>

3)关于 out 的 测试

        System.out.println("---getTotalcount(PageUtil pageUtil)---");
        PageUtil pageUtil1 = new PageUtil(1,2);
        mapper.getTotalcount(pageUtil1);
        System.out.println(pageUtil1.getTotalcount());

理解:存储过程 out 的是:out 出property=”totalcount”,并且是封装在type=”PageUtil”里面的,所以用pageUtil1.getTotalcount() 来接。select count(*) into empcount ,方法不需要返回值,直接进属性里面捞。

3)注解

在 mapper接口里面直接写sql 语句,就不需要使用 xml 文件了:

 @Select("select * from project")
 List<Workorder> findName();
 // 分页查询
 @Select("select w.*,p.projectname from Workorder w,project p where   p.id=w.projectid limit #{startrow},#{pagesize}")
 List<Workorder> findPage(PageUtil pageUtil);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值