`

05_用户模块及角色模块的单表和多表操作

阅读更多
1 Restful风格的参数接收
/{id}  与 参数id对应,这个{id} 获取来自页面的值
@PathVariable(比如这种url:someUrl/12)用来获取url里面的值。Restful风格的使用这个,
如果名称一致,就下面图片的写法,如果名称不一致,还需要指定一个名称。
@RequestParam (比如这种url:someUrl?id=12),普通的写法使用这个,注意这个与上面的区别。


2 相同名称数据的提交可以使用数组接收或者list接收。
3  其实增删改成在mapper.xml 文件里面都可以使用<select></select> 标签
4  针对mybatis传递的参数不是对象的时候,而是直接传递的参数需要使用map的方式:
// UserbeanMapper.java
//注意着两个参数 uid 、rid 的写法,必须的使用如下的方式,否则不能够传入到xml文件
//而且名称要与xml文件中的名称一致 对应values(#{uid},#{rid})
void insertUidAndRid(@Param("uid") Integer userid,@Param("rid") Integer rid);

//这里的传入参数不是实体对象,而是使用map
//这里面的名称要与上面接口中的参数名称一致,如:userid roleid 对应 @Param("uid") @Param("rid")
<insert id="insertUidAndRid" parameterType="map">
     insert into t_user_role(userid,roleid)
     values(#{uid},#{rid})
  </insert>  

5 mysql的主键为自增的时候,mabatis如何在插入数据的时候就能返回主键值给实体对象?

方式1:通过如下的方式来实现:如下代码:useGeneratedKeys="true" keyProperty="userid"
例如:
<insert id="insertSelective" useGeneratedKeys="true" keyProperty="userid"   parameterType="cn.hd.model.Userbean" >
    insert into t_user
  </insert>

方式2:


6 修改用户角色数据回填的写法:
//首先引入一个标签
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!-- 
fn:contains(user.rids,r.roleid)
user.rids :所有的权限
r.roleid :当前的权限

在所有的权限里面看是否包含当前的权限,如果包含返回true
-->
  <c:forEach items="${rolelist }" var="r">
          <input type="checkbox" name="rids" value="${r.roleid }"  ${fn:contains(user.rids,r.roleid) ? 'checked':'' } >${r.rolename }
        </c:forEach>


7 在删除用户的时候对权限的删除实现的方法:
1 通过业务逻辑的实现:首先删除中间表的数,然后删除用户的数据
2 也可以通过数据库的级联删除,删除了用户数据,级联删除角色数据,这个需要数据库设计的时候有级联删除的设置。

8 加上事物相关,注意这个REQUIRED是面试重点
<!-- 事务的配置 -->
<bean id="txManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
   <!-- 拦截器方式配置事物 -->
    <tx:advice id="transactionAdvice" transaction-manager="txManager">
        <tx:attributes>
            <!-- 以如下关键字开头的方法使用事物 -->
            <tx:method name="add*" propagation="REQUIRED" />
            <tx:method name="save*" propagation="REQUIRED" />
            <tx:method name="update*" propagation="REQUIRED"/>
            <tx:method name="modify*" propagation="REQUIRED"/>
            <tx:method name="edit*" propagation="REQUIRED"/>
            <tx:method name="delete*" propagation="REQUIRED"/>
            <tx:method name="remove*" propagation="REQUIRED"/>
            <tx:method name="buyfood" propagation="REQUIRED"/>
            <tx:method name="order" propagation="REQUIRED"/>
            <!-- 以如下关键字开头的方法不使用事物 -->
            <tx:method name="get*" read-only="true"/>
            <tx:method name="find*" read-only="true" />
            <tx:method name="load*"  read-only="true" />
            <tx:method name="query*"  read-only="true" />
         
            <!-- 其他方法不使用事物 -->
            <tx:method name="*" propagation="SUPPORTS" />
        </tx:attributes>
    </tx:advice>
   
    <!-- 切面,将事物用在哪些对象上 -->
    <aop:config>
        <aop:pointcut id="transactionPointcut" expression="execution(* cn.hd.service.impl.*Impl.*(..))" />
        <aop:advisor pointcut-ref="transactionPointcut" advice-ref="transactionAdvice" />
    </aop:config>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics