mybatis框架之mapper的xml配置的编写(单表)

版权声明:本篇文章由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 &amp;&amp; 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 &amp;&amp; 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 &amp;&amp; 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 &amp;&amp; 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>

猜你喜欢

转载自blog.csdn.net/IT_CREATE/article/details/85687293