添加数据的业务逻辑代码(有图片有文字)

1. 注意:

  1. 首先因为需要添加的数据有文字,也有图片,所以封装前端传来的参数只能用HttpServletRequest
  2. 因为有图片上传,所以需要导包
 <!--文件上传需要的包-->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.3</version>
        </dependency>


        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.10.0</version>
        </dependency>
  1. 需要的类

2. controller

@Controller
@RequestMapping("/ads")
public class AdController {

    @Resource
    private IAdService adService;
    
    /**
     * 添加广告
     * @return
     */
    @RequestMapping("/addAd.action")
    @ResponseBody
    public R addAd(HttpServletRequest request) throws Exception{//涉及到文件的上传,参数只能用HttpServletRequest
        adService.addAd(request);
        return R.ok();
    }
}

3. service

@Service
@Slf4j
public class AdServiceImpl implements IAdService {

    @Resource
    private IAdDAO adDAO;

    @Resource
    private IAdTypeDAO adTypeDAO;

    public void setAdTypeDAO(IAdTypeDAO adTypeDAO) {

        this.adTypeDAO = adTypeDAO;
    }

    public void setAdDAO(IAdDAO adDAO) {
        this.adDAO = adDAO;
    }
    @Override
    public void addAd(HttpServletRequest request) throws Exception{
        //获取Ad对象
       Ad ad =  getAd(request);
       //像数据库插入数据
        adDAO.addAd(request);
    }

    private Ad getAd(HttpServletRequest request) throws Exception {
        //第一步:创建磁盘文件工厂
        DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
        //设置磁盘文件缓冲区大小
        diskFileItemFactory.setSizeThreshold(8192);
        //实例化Servlet对象
        ServletFileUpload fileUpload = new ServletFileUpload(diskFileItemFactory);

        //第二步:解析请求
        List<FileItem> fileItems = fileUpload.parseRequest(request);
        //定义变量存放解析出来的内容
        String adDetails = "";//详情
        String adDescribe = "";//描述
        int adType = 0;//类型
        String adPhoto  = "";//图片在互联网上的存储位置
        Integer adId = 0;// //前端传递过来的id对象
        String adImages = "";//图片显示的这个地址

        for (FileItem fileItem : fileItems){
            //判断FileItem对象里面封装的数据是一个普通文本表单字段,还是一个文件表单字段。
            if (fileItem.isFormField()){
                if (fileItem.getFieldName().equals("adDetails")){
                    adDetails = fileItem.getString("UTF-8");
                }else if (fileItem.getFieldName().equals("adDescribe")){
                    adDescribe = fileItem.getString("UTF-8");
                }else if (fileItem.getFieldName().equals(adType)){
                    adType=Integer.parseInt(fileItem.getString("UTF-8"));
                }else if(fileItem.getFieldName().equals("adId")){
                    adId=Integer.parseInt(fileItem.getString("UTF-8"));
                } else if(fileItem.getFieldName().equals("adImages")){
                    adImages=fileItem.getString("UTF-8");
                }
            }else {
                if (fileItem.getFieldName().equals("file")){
                    //首先取出图片的内容
                    InputStream fileItemInputStream = fileItem.getInputStream();
                    //给图片生成唯一的名字  传jpg过来也是正确的  png和jpg只是一种压缩算法的标识
                    String fileName = FileNameUtils.getFileName();
                    //接下来将这个文件上传到第三方的cdn上(阿里云的OSS上/腾讯云/xxx云)
                    adImages =  uploadFileToOSS(fileItemInputStream,fileName);
                }
            }
 
        }
      //第三步:数据的解析完成,向数据库添加数据
        Ad ad = new Ad();
        ad.setAdType(adType);
        ad.setAdDescribe(adDescribe);
        ad.setAdDetails(adDetails);
        ad.setAdId(adId);
        //广告类型的名字
        AdType adTypeSelect = adTypeDAO.findAdTypeById(adType);
        ad.setAdTypeName(adTypeSelect.getAdTypeName());
        ad.setAdImages(adImages);
        return ad;
    }

    /**
     * 这个方法就是用来进行文件的上传的
     * @param fileItemInputStream
     * @param fileName
     * @return
     */
    private String uploadFileToOSS(InputStream fileItemInputStream, String fileName) {
        //TODO 这里需要将文件上传到 第三方的阿里云的OSS上去
        return "https://img2.baidu.com/it/u=1395980100,2999837177&fm=253&fmt=auto&app=120&f=JPEG?w=1200&h=675";
    }
}


4. dao

4.1 广告类型的

@Component
public class AdTypeDAO implements IAdTypeDAO {

    @Resource
    private JdbcUtils jdbcUtils;

    public void setJdbcUtils(JdbcUtils jdbcUtils) {
        this.jdbcUtils = jdbcUtils;
    }

    @Override
    public AdType findAdTypeById(Integer adTypeId) throws Exception {
        return jdbcUtils.queryRunner().query(ConnectionThreadLocal.getThreadLocal().get(),
                "select * from t_adtype where adTypeId=?",
                new BeanHandler<AdType>(AdType.class),
                adTypeId);
    }
}

4.2 添加广告的

    @Override
    public void insert(Ad ad) throws Exception {
        //接下来
        jdbcUtils.queryRunner().update(
                ConnectionThreadLocal.getThreadLocal().get(),
                "insert into t_ad(adImages,adType,adDescribe,adDetails,adTypeName) values(?,?,?,?,?)",
                ad.getAdImages(),ad.getAdType(),ad.getAdDescribe(),ad.getAdDetails(),ad.getAdTypeName()
        );
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1篇 Java编程基础   第1章 Java开发环境的搭建(教学视频:9分钟) 2   1.1 理解Java 2   1.2 搭建Java所需环境 3   1.2.1 下载JDK 3   1.2.2 安装JDK 4   1.2.3 配置环境 5   1.2.4 测试JDK配置是否成功 7   实例1 开发第一个Java程序 7   第2章 Java基础类型与运算符(教学视频:39分钟) 9   2.1 基础类型 9   实例2 自动提升 9   实例3 自动转换 10   实例4 常用基础类型之强制转换 11   2.2 运算符 12   实例5 算术运算符 12   实例6 关系运算符 13   实例7 逻辑运算符 14   实例8 位运算符 15   实例9 移位运算符 16   实例10 转型运算符 17   2.3 其他形式 18   实例11 常量与变量 18   实例12 各种进制的转换 19   实例13 Java中的进制与移位运算符 22   第3章 条件控制语句(教学视频:75分钟) 26   3.1 if控制语句 26   实例14 判断输入的年份是否为闰年 26   实例15 抽奖活动 27   3.2 for语句 28   实例16 小九九乘法表 28   实例17 如何列出素数 29   实例18 Java中的递归 31   实例19 男生女生各多少人 32   实例20 求水仙花数 34   实例21 求任意一个正数的阶乘 35   实例22 求n的n次方 35   实例23 利用for循环输出几何图形 36   实例24 杨辉三角 38   3.3 while语句 39   实例25 求1到100之间的和 39   实例26 存上100元需要多少天 40   实例27 输出100之间的所有偶数 41   实例28 如何判断回文数字 42   3.4 do…while语句 43   实例29 输出100之间的所有奇数 44   实例30 求最大的随机数 44   3.5 switch语句 45   实例31 判断字母分类 46   实例32 优良及差 47   实例33 打印任意一年日历 48   实例34 一年四季的划分 51   第2篇 Java数据处理   第4章 异常处理(教学视频:62分钟) 54   4.1 编译时异常 54   实例35 除0发生的算术异常(ArithmeticException) 54   实例36 数组下标越界异常(ArrayIndexOutOfBoundsException) 55   实例37 数组元素类型不匹配异常(ArrayStoreException) 56   实例38 强制类型转换异常(ClassCastException) 56   实例39 索引越界异常(IndexOutOfBoundsException) 57   实例40 空指针异常(NullPointerException) 58   实例41 数字格式转换异常(NumberFornatException) 59   实例42 字符串索引越界异常(StringIndexOutBounds) 60   实例43 操作错误(UnsupportedOperationException) 60   4.2 运行时异常 61   实例44 找不到指定类时发生的异常(ClassNotFoundException) 62   实例45 请求的方法不存在(NoSuchMethodException) 63   4.3 try…catch捕获异常 65   实例46 try…catch捕获异常的实例 66   实例47 try…catch…finally捕获异常的实例 67   实例48 try…catch嵌套捕获异常的实例 68   4.4 throws声明异常 69   实例49 throws声明异常实例一 69   实例50 throws声明异常实例二 70   4.5 throw抛出异常 72   实例51 throw抛出异常实例一 72   实例52 throw抛出异常实例二 73   4.6 自定义异常 74   实例53 自定义异常实例一 74   实例54 自定义异常实例二 75   第5章 数组(教学视频:98分钟) 78   5.1 一维数组 78   实例55 一

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值