使用SSM实现一个简单的CRUD

x33g5p2x  于2022-03-11 转载在 其他  
字(9.5k)|赞(0)|评价(0)|浏览(468)

写在前面的话

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

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

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

欧耶!直接开打吧

你需要准备的武器

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

酒就不开了,直接开整吧

搭建一个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我就省略了,太占空间了
}

[2]Mapper开发

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xSAtD0CO-1646889283988)(assets/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实现类:

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

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框架整合的基本操作。

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

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

相关文章