/** *mapper 标签属于映射文件的根标签 *namespace 用于提供访问该映射文件的标识名称,该名称必须以dao接口的完整路径命名**/..._mybatis sysdate">
赞
踩
mybatis是一款持久层的框架,以下记录mybatis中看到的常见操作
- <mapper namespace="com.ruoyi.system.mapper.SysUserMapper">
- </mapper>
- /**
- *mapper 标签属于映射文件的根标签
- *namespace 用于提供访问该映射文件的标识名称,该名称必须以dao接口的完整路径命名
- **/
mapper映射配置,该文件适用于java程序中存放执行的sql脚本
CRUD操作
- <resultMap type="SysUser" id="SysUserResult">
- <id property="userId" column="user_id" />
- <result property="deptId" column="dept_id" />
- <result property="loginName" column="login_name" />
- <result property="userName" column="user_name" />
- </resultMap>
-
-
- resultMap 表示返回结果集
- type 表示转换的对象
- id 提供给其他SQL引用的名称
- <insert id="insertUser" parameterType="SysUser" useGeneratedKeys="true" keyProperty="userId">
- insert into sys_user(
- <if test="userId != null and userId != 0">user_id,</if>
- <if test="deptId != null and deptId != 0">dept_id,</if>
- <if test="loginName != null and loginName != ''">login_name,</if>
- <if test="userName != null and userName != ''">user_name,</if>
- create_time
- )values(
- <if test="userId != null and userId != ''">#{userId},</if>
- <if test="deptId != null and deptId != ''">#{deptId},</if>
- <if test="loginName != null and loginName != ''">#{loginName},</if>
- <if test="userName != null and userName != ''">#{userName},</if>
- sysdate()
- )
- </insert>
-
- id ==> java程序调用数据库操作的方法名称
-
- parameterType ==> 传入当前方法中的参数类型 (对象/基本数据类型)
-
- useGeneratedKeys ==>非必要操作参数,当值为true时,在执行添加记录之后可以获取到数据库自动生成的主键ID。
-
- keyProperty ==> 与useGeneratedKeys一起使用,表示对应的主键的对象
- <delete id="deleteUserById" parameterType="Long">
- update sys_user where user_id = #{userId}
- </delete>
- <update id="updateUser" parameterType="SysUser">
- update sys_user
- <set>
- <if test="deptId != null and deptId != 0">dept_id = #{deptId},</if>
- <if test="loginName != null and loginName != ''">login_name = #{loginName},</if>
- <if test="userName != null and userName != ''">user_name = #{userName},</if>
- <if test="userType != null and userType != ''">user_type = #{userType},</if>
- update_time = sysdate()
- </set>
- where user_id = #{userId}
- </update>
- <select id="checkLoginNameUnique" parameterType="String" resultType="int">
- select count(1) from sys_user where login_name=#{loginName}
- </select>
当一个查询语句用的多的时候,我们还可以写一个固定的SQL 然后通过<include refid="。。。"/> 来引用。作用相当于 * ,
selectUserVo是固定的几个字段,而用*号的话会降低查询效率,因为后期数据库的字段会不断增加。
- <sql id="selectUserVo">
- select u.user_id, u.dept_id, u.login_name, u.user_name
- from sys_user u
- left join sys_user_role ur on u.user_id = ur.user_id
- </sql>
-
- <select id="selectUserByEmail" parameterType="String" resultMap="SysUserResult">
- <include refid="selectUserVo"/>
- where u.email = #{email}
- </select>
我们在项目中偶尔会遇到需要动态生成sql语句的查询条件,这个时候我们就可以用mybatis的foreach了
foreach元素的属性主要有item,index,collection,open,separator,close。
在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况下,该属性的值是不一样的,主要有一下3种情况:
- <delete id="deleteUserByIds" parameterType="Long">
- update sys_user set del_flag = '2' where user_id in
- <foreach collection="array" item="userId" open="(" separator="," close=")">
- #{userId}
- </foreach>
- </delete>
对应的java代码块
- /**
- * 批量删除用户信息
- *
- * @param ids 需要删除的数据ID
- * @return 结果
- */
- @Override
- public int deleteUserByIds(String ids) throws BusinessException
- {
- Long[] userIds = Convert.toLongArray(ids);
- for (Long userId : userIds)
- {
- checkUserAllowed(new SysUser(userId));
- }
- return userMapper.deleteUserByIds(userIds);
- }
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。