SSM框架整合完成一个简单的CRUD

603 阅读5分钟

写在前面的话

SSM框架整合开发会大幅度的提高我们的开发效率。我这里准备写一套SSM整合之后实现的单表的CRUD的案例,希望给刚刚学习SSM框架的小伙伴一些帮助。

也欢迎给位大神给出指点 ^_^。

tips:后面有源码下载地址。

欧耶!直接开打吧

你需要准备的武器

  • 学习过Spring,SpringMVC和MyBatis框架
  • 会整合SSM框架,不会的可以参考我的这一篇文章:juejin.cn/post/706888…
  • 要有一份对技术不断追求的心
  • 要热爱我的民族,热爱我们的祖国^_^

酒就不开了,直接开整吧

搭建一个SSM框架整合的web项目。

在resources中添加数据源配置db.properties

 jdbc.driver=com.mysql.jdbc.Driver
 jdbc.url=jdbc:mysql://127.0.0.1:3306/bank?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8
 jdbc.username=root
 jdbc.password=

[1]数据表实体类

准备一个数据表:

 -- 商品表 --
 create table item(
     item_id varchar(20) not null primary key,
     item_title varchar(300) not null,
     item_desc varchar(500) ,
     category_id int,
     create_time datetime not null,
     modify_time datetime not null,
     status int default '1'
 );
 ​
 -- 来个几条数据吧 --
 insert into item values('100010428315','Redmi K40 骁龙870 三星AMOLED 120Hz高刷直屏 4800万高清三摄 8GB+128GB 亮黑','【品质好物】4800万高清三摄相机,骁龙870【note10pro火热抢购中】查看>',1,'2022-02-26 15:26:23','2022-02-26 15:26:23',1);
 ​
 insert into item values('100013102509','荣耀Play5T Pro 6400万双摄 6.6英寸全视屏 22.5W超级快充 4000mAh大电池','【限时优惠400元】八核处理器,6400万超清双摄,配备22.5W超级快充~荣耀60SE新品上市查看>',1,'2022-02-26 15:26:23','2022-02-26 15:26:23',1);
 ​
 insert into item values('10031528454992','小米 红米 Redmi Note10 5G 游戏智能5G手机 新品Redmi手机 4G+128G月影银 官方标配','【小米直供|现货当天发】【低至949起】赠:90天碎屏险+钢化膜+品质音乐耳机+运费险!【Note11系列新品上市】查看>',1,'2022-02-26 15:26:23','2022-02-26 15:26:23',1);

根据数据库表,添加实体类:

 package com.qidian.demo.pojo;
 ​
 import java.util.Date;
 import java.io.Serializable;
 ​
 /**
  * @author 戴着假发的程序员
  */
 public class Item implements Serializable {
     private static final long serialVersionUID = -67170620160284587L;
     
     private String itemId;
     
     private String itemTitle;
     
     private String itemDesc;
     
     private Integer categoryId;
     
     private Date createTime;
     
     private Date modifyTime;
     
     private Integer status;
     // setter和getter我就省略了,太占空间了
 }

1645863047766.png

[2]Mapper开发

在你的mapper包中添加ItemMapper接口和ItemMaper.xml文件

1645863272197.png ItemMapper接口内容:

 package com.qidian.demo.mapper;
 ​
 import com.qidian.demo.pojo.Item;
 import java.util.List;
 ​
 ​
 /**
  * @author 戴着假发的程序员
  */
 public interface ItemMapper {
 ​
     /**
      * 通过ID查询单条数据
      * @param itemId 主键
      * @return 实例对象
      */
     Item selectById(String itemId);
     
     /**
      * 查询全部
      * @return 对象列表
      */
     List<Item> selectAll();
 ​
     /**
      * 通过实体作为筛选条件查询
      * @param item 实例对象
      * @return 对象列表
      */
     List<Item> selectList(Item item);
 ​
     /**
      * 新增数据
      * @param item 实例对象
      * @return 影响行数
      */
     int insert(Item item);
    
     /**
      * 修改数据
      * @param item 实例对象
      * @return 影响行数
      */
     int update(Item item);
 ​
     /**
      * 通过主键删除数据
      * @param itemId 主键
      * @return 影响行数
      */
     int deleteById(String itemId);
     
 }

ItemMapper.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 namespace="com.qidian.demo.mapper.ItemMapper">
     <!-- 结果集 -->
     <resultMap type="com.qidian.demo.pojo.Item" id="ItemMap">
         <result property="itemId" column="item_id" jdbcType="VARCHAR"/>
         <result property="itemTitle" column="item_title" jdbcType="VARCHAR"/>
         <result property="itemDesc" column="item_desc" jdbcType="VARCHAR"/>
         <result property="categoryId" column="category_id" jdbcType="INTEGER"/>
         <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
         <result property="modifyTime" column="modify_time" jdbcType="TIMESTAMP"/>
         <result property="status" column="status" jdbcType="INTEGER"/>
     </resultMap>
     <!-- 基本字段 -->
     <sql id="Base_Column_List">
         item_id, item_title, item_desc, category_id, create_time, modify_time, status    </sql>
     <!-- 查询单个 -->
     <select id="selectById" resultMap="ItemMap">
         select
           <include refid="Base_Column_List" />
         from item
         where item_id = #{itemId}
     </select>
     <!-- 查询全部 -->
     <select id="selectAll" resultMap="ItemMap">
         select
         <include refid="Base_Column_List" />
         from item
     </select>
     <!--通过实体作为筛选条件查询-->
     <select id="selectList" resultMap="ItemMap">
         select
         <include refid="Base_Column_List" />
         from item
         <where>
                     <if test="itemId != null and itemId != ''">
                 and item_id = #{itemId}
             </if>
                     <if test="itemTitle != null and itemTitle != ''">
                 and item_title = #{itemTitle}
             </if>
                     <if test="itemDesc != null and itemDesc != ''">
                 and item_desc = #{itemDesc}
             </if>
                     <if test="categoryId != null">
                 and category_id = #{categoryId}
             </if>
                     <if test="createTime != null">
                 and create_time = #{createTime}
             </if>
                     <if test="modifyTime != null">
                 and modify_time = #{modifyTime}
             </if>
                     <if test="status != null">
                 and status = #{status}
             </if>
                 </where>
     </select>
 ​
     <!-- 新增所有列 -->
     <insert id="insert" keyProperty="itemId" useGeneratedKeys="true">
         insert into item(item_id, item_title, item_desc, category_id, create_time, modify_time, status)
         values ( #{itemId}, #{itemTitle}, #{itemDesc}, #{categoryId}, #{createTime}, #{modifyTime}, #{status})
     </insert>
     <!-- 通过主键修改数据 -->
     <update id="update">
         update item
         <set>
                     <if test="itemTitle != null and itemTitle != ''">
                 item_title = #{itemTitle},
             </if>
                     <if test="itemDesc != null and itemDesc != ''">
                 item_desc = #{itemDesc},
             </if>
                     <if test="categoryId != null">
                 category_id = #{categoryId},
             </if>
                     <if test="createTime != null">
                 create_time = #{createTime},
             </if>
                     <if test="modifyTime != null">
                 modify_time = #{modifyTime},
             </if>
                     <if test="status != null">
                 status = #{status},
             </if>
                 </set>
         where item_id = #{itemId}
     </update>
     <!--通过主键删除-->
     <delete id="deleteById">
         delete from item where item_id = #{itemId}
     </delete>
 </mapper>

[3]service开发

在你的service包中添加ItemService接口和ItemServicImpl实现类:

1645863589858.png ItemService接口内容:

 package com.qidian.demo.service;
 ​
 import com.qidian.demo.pojo.Item;
 import java.util.List;
 ​
 /**
  * @author 戴着假发的程序员
  */
 public interface ItemService {
 ​
     /**
      * 通过ID查询单条数据
      * @param itemId 主键
      * @return 实例对象
      */
     Item selectById(String itemId);
 ​
     /**
      * 查询全部
      * @return 对象列表
      */
     List<Item> selectAll();
     
     /**
      * 通过实体作为筛选条件查询
      * @param item 实例对象
      * @return 对象列表
      */
     List<Item> selectList(Item item);
 ​
     /**
      * 新增数据
      * @param item 实例对象
      * @return 影响行数
      */
     int insert(Item item);
 ​
     /**
      * 修改数据
      * @param item 实例对象
      * @return 修改
      */
     Item update(Item item);
 ​
     /**
      * 通过主键删除数据
      * @param itemId 主键
      * @return 影响行数
      */
     int deleteById(String itemId);
 ​
 }

ItemServicImpl实现类内容:

 package com.qidian.demo.service.impl;
 ​
 import com.qidian.demo.pojo.Item;
 import com.qidian.demo.mapper.ItemMapper;
 import com.qidian.demo.service.ItemService;
 import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import java.util.List;
 ​
 /**
  * @author 戴着假发的程序员
  */
 @Service("itemService")
 public class ItemServiceImpl implements ItemService {
     @Resource
     private ItemMapper itemMapper;
 ​
     /**
      * 通过ID查询单条数据
      * @param itemId 主键
      * @return 实例对象
      */
     @Override
     public Item selectById(String itemId) {
         return this.itemMapper.selectById(itemId);
     }
     /**
      * 查询所有
      * @return 实例对象的集合
      */
      @Override
      public List<Item> selectAll() {
         return this.itemMapper.selectAll();
      }
     /**
      * 根据条件查询
      * @return 实例对象的集合
      */
     @Override
     public List<Item> selectList(Item item) {
         return this.itemMapper.selectList(item);
     }
     
     /**
      * 新增数据
      * @param item 实例对象
      * @return 实例对象
      */
     @Override
     public int insert(Item item) {
         return this.itemMapper.insert(item);
     }
 ​
     /**
      * 修改数据
      * @param item 实例对象
      * @return 实例对象
      */
     @Override
     public Item update(Item item) {
         this.itemMapper.update(item);
         return this.selectById(item.getItemId());
     }
 ​
     /**
      * 通过主键删除数据
      * @param itemId 主键
      * @return 是否成功
      */
     @Override
     public int deleteById(String itemId) {
         return this.itemMapper.deleteById(itemId);
     }
 }

[4]controller开发

在你的controller包中添加ItemController

1645863902408.png ItemController内容如下:

 package com.qidian.demo.controller;
 ​
 import com.qidian.demo.pojo.Item;
 import com.qidian.demo.service.ItemService;
 import org.springframework.web.bind.annotation.*;
 import java.util.List;
 import java.util.Map;
 import java.util.HashMap;
 import javax.annotation.Resource;
 /**
  * @author 戴着假发的程序员
  */
 @RestController
 @RequestMapping("/item")
 public class ItemController {
     @Resource
     private ItemService itemService;
     /**
      * @param item 参数对象
      * @return 单条数据
      */
     @RequestMapping(value = "get", method = RequestMethod.GET)
     public Item selectOne(Item item) {
         Item result = itemService.selectById(item.getItemId());
         if(result != null){
           return  result;
         }
         return null;
     }
     /**
      * 新增一条数据
      * @param item 实体类
      * @return Map
      */
     @RequestMapping(value = "insert", method = RequestMethod.POST)
     public Map insert(Item item) {
         Map map = new HashMap();
         map.put("code",200);
         int result = itemService.insert(item);
         if (result <= 0) {
           map.put("code",500);
         }
         return map;
     }
     /**
      * 修改一条数据
      * @param item 实体类
      * @return Map
      */
     @RequestMapping(value = "update")
     public Map update(Item item) {
         Map map = new HashMap();
         map.put("code",200);
         Item result = itemService.update(item);
         if (result != null) {
             map.put("data",result);
         }else{
             map.put("code",500);
         }
         return map;
     }
     /**
      * 删除一条数据
      * @param item 参数对象
      * @return Map
      */
     @RequestMapping(value = "delete")
     public Map delete(Item item) {
         Map map = new HashMap();
         map.put("code",200);
         int result = itemService.deleteById(item.getItemId());
         if (result <= 0) {
            map.put("code",500);
         }
         return map;
     }
     /**
      * 查询全部
      * @return Response对象
      */
     @RequestMapping(value = "selectAll")
     public List<Item> selectAll() {
         return itemService.selectAll();
     }
 }

OK可以测试接口了:

接口参数返回值说明
/item/selectAllitem列表返回所有item列表
/item/insertitem的所有列{code:xx,msg:xx}添加item
/item/deleteitem_id{code:xx,msg:xx}根据id删除item
/item/updateitem所有列{code:xx,msg:xx}编辑item信息
/item/getitem_id一个item对象根据id查询item信息

当然上面的案例只是一个简单的单表的CRUD,还有太多的细节没有处理,所以这个DEMO就是为了熟练SSM框架整合的基本操作。

后面我会更新完整的项目开发教程。多谢关注。

源码下载: gitee.com/win-dk/ssm-…