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

本文介绍RESTful风格参数接收方法及MyBatis中增删改查的实现技巧,包括参数绑定、自增主键返回、批量提交、事务管理等关键知识点。
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>
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值