指定Mapper接口参数
package com.chentianyu.mapper;import com.chentianyu.pojo.User;import org.apache.ibatis.annotations.Mapper;import org.apache.ibatis.annotations.Param;import java.util.List;/*** 底层提供的功能:* 要添加条件(判断有没有条件,有就加,没有就拉倒(不加),条件:姓名,性别(可以用实体类或者是下标,或者是map)),* 多条件分页查询* 添加* 删除* 更新* 底层干的活就是为前端提供数据的。所以前后端一般有接口文档*/public interface UserMapper {/*** SSM后台提供的数据* url:* 参数:* userName:表单中的用户名称* userSex:表单中的用户性别* page:提交的页码(第一次访问为null)* 结果: 是一个JSON数组* 无数据时:* []*/public List<User> selectUserPage(@Param("userName")String userName,@Param("userSex")String userSex,@Param("startRow")//算好的其实行的值int startRow);}
package com.chentianyu.mapper;import com.chentianyu.pojo.User;import org.apache.ibatis.annotations.Mapper;import org.apache.ibatis.annotations.Param;import java.util.List;/*** 底层提供的功能:* 要添加条件(判断有没有条件,有就加,没有就拉倒(不加),条件:姓名,性别(可以用实体类或者是下标,或者是map)),* 多条件分页查询* 添加* 删除* 更新* 底层干的活就是为前端提供数据的。所以前后端一般有接口文档*/public interface UserMapper {/*** SSM后台提供的数据* url: /user/selectUserPage?userName=?&userSex=?* 参数:* userName:表单中的用户名称* userSex:表单中的用户性别* page:提交的页码(第一次访问为null)* 结果: 是一个JSON数组* 无数据时:* []** select * from user limit (当前页码-1)*每页条数,每页条数;*/public List<User> selectUserPage(@Param("userName")String userName,@Param("userSex")String userSex,@Param("startRow")//算好的其实行的值int startRow);/*** 增加(添加)* url: /user/createUser* 参数:* cardType* cardNo* userName* userSex* userAge* userRole* 结果:* 添加成功:* 1* 添加失败:* 0*/int createUser(User user);/*** 删除* url: /user/deleteUserById?userId= ?* 参数* userId:删除用户的id* 结果:* 删除成功:* 1* 删除失败:* 0*/int deleteUserById(String userId);/*** 获取总行数* url: /user/getRowCount?userName=?&userSex=?* 参数:* userName: 表单中用户的名称* userSex:表单中用户的性别* 结果:* 有数据时:* 12* 无数据时:* 0*/int getRowCount(@Param("userName")String userName,@Param("userSex")String userSex);}
到此为止,接口层开发完毕,接口按照接口文档开发。接口文档就是用来前后端统一传输请求的规范
开发要用动态代理的方式做:
创建XXXMapper.xml模板(参考spring-sm整合-MyBatis模板)
分页查询&初始化配置
<?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.chentianyu.mapper.UserMapper"><!--列名和实体类成员变量名称不一致private String userId;private String cardType;private String cardNo;private String userName;private String userSex;private String userAge;private String userRole;所以干所有活之前,先resultMap。完成实体类与列名的映射--><resultMap id="usermap" type="user"><id property="userId" column="user_id"></id><result property="cardType" column="card_type"></result><result property="cardNo" column="card_no"></result><result property="userName" column="user_name"></result><result property="userSex" column="user_sex"></result><result property="userAge" column="user_age"></result><result property="userRole" column="user_role"></result></resultMap><!--定义全部列名--><sql id="allColumns">user_id,card_type,card_no,user_name,user_sex,user_age,user_role</sql><!--实现分页查询public List<User> selectUserPage(@Param("userName")String userName,@Param("userSex")String userSex,@Param("startRow")//算好的其实行的值int startRow);--><select id="selectUserPage" resultMap="usermap">select <include refid="allColumns"></include>from user <where><if test="userName!=null and userName!=''">and user_name like concat('%',#{userName},'%')</if><if test="userSex!=null and userSex!=''">and user_sex = #{userSex}</if></where>limit #{startRow},5</select></mapper>
整个分页查询的功能就开发完了
添加
<!--
int createUser(User user);
-->
<insert id="createUser" parameterType="user">
insert into user values(#{userId},#{cardType},#{cardNo},#{userName},#{userSex},#{userAge},#{userRole})
</insert>
删除
<!--
int deleteUserById(String userId);
-->
<delete id="deleteUserById" parameterType="string">
delete from user where user_id=#{userId}
</delete>
计算总行数
<!--
计算总行数
int getRowCount(
@Param("userName")
String userName,
@Param("userSex")
String userSex);
-->
<select id="getRowCount" resultType="int">
select count(*) from user <where>
<if test="userName!=null and userName!=''">
and user_name like concat('%',#{userName},'%')
</if>
<if test="userSex!=null and userSex!=''">
and user_sex = #{userSex}
</if>
</where>
</select>
这样我们mapper开发就结束了
