版权声明:本篇文章由IT_CREATE整理 https://blog.csdn.net/IT_CREATE/article/details/85687293
在使用mybatis的时候,我们要用到mapper映射,也就是说,一个项目有持久层dao,业务层service,表现层contraller,现在加上一个mapper映射。在mapper中,接口要和xml配置文件名字一样。
如:
在接口中,我们定义一些方法,这些方法在持久层dao中要用到,所以mapper接口中的方法和dao中的方法是一致的。
例子:
在接口UserMapper中,定义了一些方法,在配置文件xml中去实现这些方法的增删改
public interface UserMapper {
//@Param("u") 给参数定义个别名
int addUserBean(@Param("u") UserBean user);
/**
* 批量新增
* @param users
* @return
*/
int addBatchUserBean(@Param("users") List<UserBean> users);
int updateUserBean(@Param("u") UserBean user);
int deleteUserBean(@Param("u") UserBean user);
/**
* 批量删除
* @param ids
* @return
*/
int deleteBatchUserBean(@Param("ids") int[] ids);
int deleteUserBeanById(@Param("id") Integer id);
UserBean getUserBeanById(@Param("id") Integer id);
UserBean findUserBeanByLoginNameAndPwd(@Param("loginName")String loginName,@Param("pwd")String pwd);
/**
* 多参数传递查询的方式一
* 按照对象传值
* @param user
* @return
*/
List<UserBean> findUserBeanByObject(@Param("u") UserBean user);
/**
* 多参数传递查询的方式二
* 按照Map传值
* @param map
* @return
*/
List<UserBean> findUserBeanByMap(@Param("m") Map map);
}
配置文件UserMaper.xml中,代码如下:
<?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的命名空间,建立和接口联系 -->
<mapper namespace="com.gezhi.mybatis01.usermag.mapper.UserMapper">
<!-- 定义结果集中数据列,与对象中的属性之间的映射关系 orm -->
<resultMap type="UserBean" id="userMap">
<id property="id" column="id" javaType="java.lang.Integer" />
<result property="loginName" column="login_name" javaType="java.lang.String" />
<result property="userName" column="user_name" javaType="java.lang.String" />
<result property="password" column="user_pwd" javaType="string" />
<result property="age" column="age" javaType="int" />
<result property="gender" column="gender" javaType="int" />
<result property="birthday" column="birthday" javaType="java.util.Date" />
<result property="createTime" column="create_time" javaType="java.util.Date" />
</resultMap>
<!-- id就是接口的那些方法,实现哪个方法,id就是这个方法的方法名-->
<!-- useGeneratedKeys表示是否去获取自增id 可不写-->
<!-- keyProperty表示获取的自增id保存在哪里 可不写-->
<insert id="addUserBean" useGeneratedKeys="true" keyProperty="u.id"
parameterType="UserBean">
insert into
t_user(login_name,user_name,user_pwd,age,gender,birthday,create_time)
values
(#{u.loginName},#{u.userName},#{u.password},#{u.age},#{u.gender},#{u.birthday},now());
</insert>
<insert id="addBatchUserBean">
<!-- 批量新增的语法:insert into 表 (列名列表) values (),(),()…… -->
insert into
t_user(login_name,user_name,user_pwd,age,gender,birthday,create_time)
values
<!-- 循环语句,类似我们java的 for(UserBean u,users){ } ,separator表示每个结果之间用什么隔开-->
<foreach collection="users" item="u" separator=",">
(#{u.loginName},#{u.userName},#{u.password},#{u.age},#{u.gender},#{u.birthday},now())
</foreach>
</insert>
<update id="updateUserBean">
update t_user
<!-- set-if判断,可以在修改的时候对指定列进行修改,而不是全部修改-->
<set>
<if test="u.loginName != null and u.loginName != ''">
login_name = #{u.loginName},
</if>
<if test="u.userName != null and u.userName != ''">
user_name = #{u.userName},
</if>
<if test="u.age != null">
age = #{u.age},
</if>
<if test="u.gender != null">
gender = #{u.gender},
</if>
<if test="u.password != null and u.password != ''">
user_pwd = #{u.password},
</if>
<if test="u.birthday != null">
birthday = #{u.birthday},
</if>
create_time = now(),
</set>
where id = #{u.id};
</update>
<delete id="deleteUserBean">
delete from t_user where id = #{u.id}
</delete>
<delete id="deleteUserBeanById">
delete from t_user where id = #{id}
</delete>
<delete id="deleteBatchUserBean">
<!-- 批量删除的语法:delete from 表 where id in (……) -->
<!-- collection 如果参数并未取参数别名,那么此处就要写成array 取了别名,那么就按照别名来写,例如:ids -->
delete from t_user where id in
<foreach collection="ids" item="id" open="(" close=")"
separator=",">
#{id}
</foreach>
<!-- foreach 该标记主要用于遍历集合或者数组,collection 属性代表需要遍历的集合或数组 item 代表每次遍历取出来的数据
open 代表遍历开始前,以什么符号开始, close 代表遍历结束后,以什么符号结束 separator 代表每次遍历的分隔符 -->
</delete>
<!-- 返回结果类型如果用的是 resultMap,那么必须去实现这个关于userMap的映射关系-->
<select id="getUserBeanById" resultMap="userMap">
select
id,login_name,user_name,age,gender,user_pwd,birthday,create_time from
t_user where id = #{id}
</select>
<!-- 返回结果类型如果用的是 resultType,里面可以是map,也就是键值对,键名就是列名或是列别名;也可以是其他对象,这里用了UserBean接收结果,那么查询的列别名必须和UserBean的属性名保持一致-->
<select id="findUserBeanByLoginNameAndPwd" resultType="UserBean">
select
id,login_name as loginName,user_name as userName,age,gender,user_pwd
as password,birthday,create_time as createTime from t_user
where login_name = #{loginName} and user_pwd = #{pwd}
</select>
<select id="findUserBeanByObject" resultMap="userMap">
select
id,login_name,user_name,age,gender,user_pwd,birthday,create_time from
t_user
<where>
<!-- choose when otherwise 等同于java中的switch case default -->
<choose>
<when test="u.userName != null && u.userName != ''">
and user_name like concat(#{u.userName},'%')
</when>
<when test="u.age != null">
and age = #{u.age}
</when>
<when test="u.gender != null">
and gender = #{u.gender}
</when>
<otherwise>
1=1
</otherwise>
</choose>
</where>
<!-- <where>
1 = 1
<if test="u.userName != null && u.userName != ''">
and user_name like concat(#{u.userName},'%')
</if>
<if test="u.age != null">
and age = #{u.age}
</if>
<if test="u.gender != null">
and gender = #{u.gender}
</if>
</where> -->
<!-- trim if 作用跟where if 非常的接近
prefix="where" 表示需要条件判断之前,以什么开始
prefixOverrides="and|or" 如果where 后直接跟and或者or ,那么将使用空字符串替换
<trim prefix="where" prefixOverrides="and|or">
<if test="u.userName != null && u.userName != ''">
and user_name like concat(#{u.userName},'%')
</if>
<if test="u.age != null">
and age = #{u.age}
</if>
<if test="u.gender != null">
and gender = #{u.gender}
</if>
</trim>
order by ${sort} ${order}-->
</select>
<!-- Map键值对传值,直接按照对象获取属性的方式,获得值就可以了 -->
<select id="findUserBeanByMap" resultMap="userMap">
select
id,login_name,user_name,age,gender,user_pwd,birthday,create_time from
t_user
<where>
1 = 1
<if test="m.userName != null && m.userName != ''">
and user_name like concat(#{m.userName},'%')
</if>
<if test="m.age != null">
and age = #{m.age}
</if>
<if test="m.gender != null">
and gender = #{m.gender}
</if>
</where>
</select>
</mapper>