#Debe configurarse; de lo contrario, se informará un error
establecer @@global.log_bin_trust_function_creators = 1;
# Consulta conjunta de cinco tablas y procedimiento almacenado de llamada
seleccione e.empid,e.empname,e.teléfono,e.entertime,e.género,e.edad,
j.nombredetrabajo,d.nombredep,
c.cardno,c.gettime,c.outdate,c.cardtype,c.photo,
c2.comname, cal_addr(c2.addrid,c2.address) dirección de detalle
de los empleados e
trabajos de unión interna j en e.jobid=j.jobid
departamentos de unión interna d en e.depid = d.depid
unión interna a la empresa c2 en d.comid = c2.comid
credenciales de unión izquierda c en e.empid = c.empid;
establecer @@global.log_bin_trust_function_creators = 1;
#Eliminar procedimiento almacenado
soltar función si existe cal_addr;
#Crear procedimiento almacenado
crear función cal_addr(addr int,compaddr varchar(200))
devuelve varchar(300)
comenzar
declarar cityinfo varchar(50) predeterminado "";
seleccione concat (a1.addrname, a2.addrname, a3.addrname) en cityinfo
desde la dirección a1, dirección a2, dirección a3
donde a3.addrid=addr y a3.subaddr=a2.addrid y a2.subaddr=a1.addrid;
set cityinfo=concat(cityinfo,compaddr);
devolver información de la ciudad;
fin;
#Llamar al procedimiento almacenado
seleccione cal_addr(20,'dirección específica');
#mybaits Uno a muchos usando resultMap
<?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="com.kgc.towercrane.tchr.mapper.QueryHrMapper">
<resultMap id="emp-emp" type="EmpPage">
<result property="currentPage" column="currentpage"/>
<result property="rowPage" column="rowPage"/>
<collection property="datas"
column="{c=currentPage,r=rowPage}"
ofType="EmployeesVO"
select="findEmpByPage"/>
</resultMap>
<select id="findEmp" parameterType="EmpPage" resultMap="emp-emp">
<![CDATA[
select ceil(count(*)/#{rowPage}) total,#{rowPage} rowPage,#{currentPage} currentPage,
if(#{currentPage}<ceil(count(*)/#{rowPage}),#{currentPage}+1,#{currentPage}) next,
if(#{currentPage}=1,#{currentPage},#{currentPage}-1) previous,
if(#{currentPage}<ceil(count(*)/#{rowPage}),1,0) hasNext,
if(#{currentPage}=1,0,1) hasPrevious from employees
]]>
</select>
<select id="findEmpByPage" resultType="EmployeesVO">
select e.empid,e.empname,e.telephone,e.entertime,e.gender,e.age,
j.jobname,d.depname,
c.cardno,c.gettime,c.outdate,c.cardtype,c.photo,
c2.comname, cal_addr(c2.addrid,c2.address) detailaddr
from employees e
inner join jobs j on e.jobid=j.jobid
inner join departments d on e.depid = d.depid
inner join company c2 on d.comid = c2.comid
left join credentials c on e.empid = c.empid limit ${(c-1)*r},#{r}
</select>
</mapper>