SSM框架中mapper層,增刪改查,如何實現


1、批量修改

<!-- 批量修改 MySQL-->
<update id="updateBatch" parameterType="java.lang.String" >
update tabaccount set STATUSVALUE= #{statusvalue,jdbcType=INTEGER}
where accid in (
<foreach collection="accid" item="accid" separator=",">
#{accid}
</foreach>
)
</update>

 

<!-- 批量刪除Oracle -->
<delete id="deleteBatch" parameterType="java.lang.Short" >
begin
<foreach collection="arrEmp" item="empno" separator=";">
delete from EMPs
where EMPNO = #{empno}
</foreach>
; end;
</delete>

2、分頁

<!-- 分頁 MySQL  語句最后加limit a,b        a是數據第幾條,b是每頁顯示的多少條數據-->
<select id="page" resultMap="BaseResultMap" parameterType="java.lang.Integer">
SELECT a.accid, a.accname, a.accrealname,a.accpwd, a.accphone, a.accbirthday, a.rolevalue,a.createtime, a.deleteflag,
a.updatetime, a.url, a.statusvalue,r.roleid, r.rolevalue, r.rolename,s.statusid,s.statusvalue, s.statusname,
s.statusmemo FROM tabaccount a INNER JOIN
tabaccrole r ON a.rolevalue=r.rolevalue INNER JOIN tabstatus s ON s.statusvalue=a.statusvalue
where a.deleteflag=1 limit #{page,jdbcType=INTEGER},3
</select>

 

<!-- 分頁Oracle   三層查詢利用 偽列ROWNUM  1,3代表顯示數據1-3條sql語句如下-->

SELECT rn,accname,accrealname,loginlogid,accid, loginlogtime , loginlogip FROM (
SELECT ROWNUM rn, accname,accrealname,loginlogid,accid, loginlogtime , loginlogip FROM
(SELECT t.accname,t.accrealname,l.loginlogid, l.accid,l.loginlogtime ,
l.loginlogip from TABACCOUNT t INNER JOIN tabloginlog l
ON l.accid=t.accid ORDER BY loginlogtime DESC ))WHERE rn BETWEEN 1 AND 3

3、多表鏈接

首先,主表account的實體類中,要加入所要連接的表的屬性

 

 

 補充完整set,get方法,重寫to String

其次,在accountMapper.xml文件中的BaseResultMap中加入連接表的標簽

<!-- 1對1 連接表-->
<association property="role" resultMap="com.unite.test.dao.RoleMapper.BaseResultMap">
</association>
<association property="status" resultMap="com.unite.test.dao.StatusMapper.BaseResultMap">
</association>

最后,寫查詢所有方法sql語句多表鏈接

<!-- 查詢所有 -->
<select id="sellectAll" resultMap="BaseResultMap" >
SELECT a.accid, a.accname, a.accrealname,a.accpwd, a.accphone, a.accbirthday, a.rolevalue,a.createtime, a.deleteflag,
a.updatetime, a.url, a.statusvalue,r.roleid, r.rolevalue, r.rolename,s.statusid,s.statusvalue, s.statusname,
s.statusmemo FROM tabaccount a INNER JOIN
tabaccrole r ON a.rolevalue=r.rolevalue INNER JOIN tabstatus s ON s.statusvalue=a.statusvalue
where a.deleteflag=1
</select>

4、模糊查詢

// 多條件查詢 dao層  accountMapper.class文件

 // 利用注解綁定參數

List<Account> sellectMore(@Param("accname")String accname,@Param("statusvalue")Integer statusvalue);

 

<!-- 多條件查詢   mapper.xml-->
<!-- <where>標簽 自動加上where關鍵字 也可以自動刪掉 and也可以智能忽略掉 -->
<select id="sellectMore" resultMap="BaseResultMap" >
SELECT a.accid, a.accname, a.accrealname,a.accpwd, a.accphone, a.accbirthday, a.rolevalue,a.createtime, a.deleteflag,
a.updatetime, a.statusvalue,a.url, r.roleid, r.rolevalue, r.rolename,s.statusid,s.statusvalue, s.statusname,
s.statusmemo FROM tabaccount a INNER JOIN
tabaccrole r ON a.rolevalue=r.rolevalue INNER JOIN tabstatus s ON s.statusvalue=a.statusvalue
<where>
<if test="accname != null" >
and accname like concat(concat('%',#{accname,jdbcType=VARCHAR}),'%')
</if>
<if test="statusvalue != null" >
and a.statusvalue = #{statusvalue,jdbcType=DECIMAL}
</if>
and a.deleteflag=1
</where>
</select>

 

5、新增

難點:1、注冊用戶選出生日期,jsp界面日期是String類型,而數據庫是date類型,實體類的日期也是date類型如何轉換?

首先,在實體類的操作,加注解

//前台日期string類型,后台自動轉date
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date accbirthday;

其次、配置文件操作在springMVC-servlet.xml中加入

<!-- 前台日期string類型,后台自動轉date -->
<mvc:annotation-driven></mvc:annotation-driven>

在beans中

難點:2、MySQL數據庫如何獲取時間戳

 

 設計表的默認值

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM