微信小程序——个人相册(后端)

2023-10-31 05:30
文章标签 程序 微信 个人相册

本文主要是介绍微信小程序——个人相册(后端),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

微信小程序——个人相册(后端)

1. 项目创建

  1. 新建Maven项目,其中Archettype选择“webapp”,以下是项目结构
    在这里插入图片描述

  2. 添加项目所需依赖,在pom.xml添加以下内容:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.hniu</groupId><artifactId>myhome</artifactId><packaging>war</packaging><version>1.0-SNAPSHOT</version><name>myhome Maven Webapp</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><java.version>1.8</java.version><spring.version>5.3.16</spring.version><mysql.version>8.0.28</mysql.version><mybatis.version>3.5.2</mybatis.version><mybatis.spring.version>2.1.1</mybatis.spring.version><servlet.version>3.1.0</servlet.version></properties><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>${mybatis.version}</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>${mybatis.spring.version}</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.14</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><!--jackson依赖--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.11.0</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.11.0</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.11.0</version></dependency><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.4</version></dependency><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.3.2</version></dependency></dependencies><build><plugins><plugin><!--以下是插件版tomcat7-->
<!--        <groupId>org.apache.tomcat.maven</groupId>-->
<!--        <artifactId>tomcat7-maven-plugin</artifactId>-->
<!--        <version>2.2</version>-->
<!--        <configuration>-->
<!--          <charset>utf-8</charset>-->
<!--          <port>8089</port>-->
<!--          <path>/myhome</path>-->
<!--        </configuration>--><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>3.3.1</version><!--要在下面添加以下配置--><configuration><failOnMissingWebXml>false</failOnMissingWebXml></configuration></plugin></plugins></build>
</project>
  1. 建议使用tomcat8~9版本,版本太高或低容易报错,以下配置tomcat
    ①:选择正确路径的Tomcat
    ②:选择对应项目JDK的JRE版本
    ③:选择没有被其他程序占用的端口,默认是8080

在这里插入图片描述
在这里插入图片描述

  1. 配置application.properties,以下代码:
    附:
    获取小程序的appidappsecret
    进入到小程序的管理控制台(公众平台),选择“开发”——“开发管理”,切换到“开发设置”在这里插入图片描述

db.driver=com.mysql.cj.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/myphoto
db.username=root
#修改为你的MySQL密码
db.password=123456#添加小程序的appid和appsecret
wx.appid=
wx.secret=#file.savePath修改为本机实际保存路径
file.savePath=D:\\myhome\\photo\\
#file.accessUrl:访问路径
file.accessUrl=/photo/

2. 项目代码

  1. 创建package com.hniu.myphone.comm.config,config包下创建以下配置类:GlobalConfigurationProperties

package com.hniu.myphone.comm.config;import com.github.pagehelper.PageInterceptor;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;import javax.sql.DataSource;
import java.io.IOException;
import java.util.List;
import java.util.Objects;/*** 全局配置文件*/
@Configurationpublic class GlobalConfiguration extends WebMvcConfigurationSupport {@Autowiredprivate Properties props; //全局配置参数/*** 注册数据源* @return*/@Beanpublic DataSource dataSource(){DriverManagerDataSource ds = new DriverManagerDataSource();ds.setDriverClassName(props.getDbDrivce());ds.setUrl(props.getDbUrl());ds.setUsername(props.getDbUsername());ds.setPassword(props.getDbPasswrod());return ds;}/*** 注册mybatis会话工厂* @return* @throws IOException*/@Beanpublic SqlSessionFactoryBean sessionFactory() throws IOException {SqlSessionFactoryBean sessionBean = new SqlSessionFactoryBean();sessionBean.setDataSource(dataSource());  //数据源sessionBean.setTypeAliasesPackage("com.hniu.myphone.mapper"); //实体别名PathMatchingResourcePatternResolver sourceResolver = new PathMatchingResourcePatternResolver();//Mapper.xmlResource[] rs = sourceResolver.getResources("classpath:mapper/*Mapper.xml");sessionBean.setMapperLocations(rs);PageInterceptor interceptor =new PageInterceptor();sessionBean.setPlugins(interceptor);return sessionBean;}/*** 注册mybatis操作模板* @return* @throws Exception*/@Beanpublic SqlSessionTemplate sessionTemplate() throws Exception {SqlSessionTemplate template = new SqlSessionTemplate(Objects.requireNonNull(sessionFactory().getObject()));return template;}/*** 注册消息转换器,把返回的对象转换成JSON* @param converters*/protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) {// put the jackson converter to the front of the list so that application/json content-type strings will be treated as JSONconverters.add(new MappingJackson2HttpMessageConverter());// and probably needs a string converter too for text/plain content-type strings to be properly handledconverters.add(new StringHttpMessageConverter());}@Overrideprotected  void addResourceHandlers(ResourceHandlerRegistry registry){registry.addResourceHandler(props.getAccessUrl()+"**").addResourceLocations("file:"+props.getSavePath());}@Beanpublic CommonsMultipartResolver multipartResolver(){CommonsMultipartResolver resolver=new CommonsMultipartResolver();return resolver;}
}
package com.hniu.myphone.comm.config;import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;@Component
@PropertySource("classpath:application.properties")
public class Properties {@Value("${db.driver}")private String dbDrivce;@Value("${db.url}")private String dbUrl;@Value("${db.username}")private String dbUsername;@Value("${db.password}")private String dbPasswrod;@Value("${wx.appid}")private String appid;@Value("${wx.secret}")private String secret;@Value("${file.savePath}")private String savePath;@Value("${file.accessUrl}")private String accessUrl;//	此处忽略了getter和setter}
  1. 在package com.hniu.myphone下创建mapper包,mapper包下创建实体类:AccountCoverPhoto

package com.hniu.myphone.mapper;public class Account {private String accId;private String openid;private String nickName;private String avatarUrl;//	此处忽略了getter和setter
}
package com.hniu.myphone.mapper;public class Cover {private String coverId;private String accId;private String accessUrl;private String photoId;//	此处忽略了getter和setter
}
package com.hniu.myphone.mapper;import java.util.Date;public class Photo {private String photoId;private Long photoSize;private Date uploadTimestamp;private String photoSavePath;private String photoAccessUrl;private Account account;//	此处忽略了getter和setter
}
  1. 在package com.hniu.myphone.comm下创建WXUtils,WXUtils包下创建以下微信工具类:

package com.hniu.myphone.comm.WXUtils;import com.fasterxml.jackson.databind.ObjectMapper;
import com.hniu.myphone.comm.config.Properties;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import java.io.IOException;
import java.util.Map;
@Component
public class WXUtils {private static final String WX_LOGIN_SERVICE = "https://api.weixin.qq.com/sns/jscode2session";@Autowiredprivate Properties props;public String getOpenId(String code) throws IOException {String url = String.format(WX_LOGIN_SERVICE + "?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code", props.getAppid(), props.getSecret(), code);HttpClient client = HttpClientBuilder.create().build();HttpGet get=new HttpGet(url);HttpResponse res=client.execute(get);String result= EntityUtils.toString(res.getEntity());ObjectMapper om=new ObjectMapper();Map<String,Object> map=om.readValue(result,Map.class);String openId= (String)map.get("openid");return openId;}
}
  1. 在package com.hniu.myphone下创建controller包,controller包下创建控制器类:AccountControllerCoverControllerPhotoController

package com.hniu.myphone.controller;import com.hniu.myphone.comm.WXUtils.WXUtils;
import com.hniu.myphone.comm.config.Properties;
import com.hniu.myphone.mapper.Account;
import com.hniu.myphone.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import java.io.File;
import java.io.IOException;
import java.util.UUID;@RestController
@RequestMapping("/account")
public class AccountController {@Autowiredprivate AccountService accountService;@Autowiredprivate WXUtils wxUtils;@Autowiredprivate Properties pros;@GetMapping("/getUserInfo")public Account getUserInfo(String code){try{String openId=wxUtils.getOpenId(code);Account account=accountService.selectByOpenId(openId);return account;} catch (IOException e) {throw new RuntimeException(e);}
//        return null;}@PostMapping("/save")public String save(Account account, String code){try{String openId=wxUtils.getOpenId(code);account.setOpenid(openId);accountService.saveAccount(account);} catch (IOException e) {throw new RuntimeException(e);}return account.getAccId();}@PostMapping("/modifyNickName")public String modifyNickName(Account account){accountService.uploadAccount(account);return "1";}@PostMapping("/uploadAvatar")public String uploadAvatar(@RequestPart MultipartFile avatar,Account account){String uploadRoot=pros.getSavePath()+account.getAccId()+ File.separator;File root=new File(uploadRoot);if (!root.exists()){root.mkdirs();}String oldFileName=avatar.getOriginalFilename();String suffx=oldFileName.substring(oldFileName.lastIndexOf("."));String newFileName= UUID.randomUUID().toString()+suffx;try{avatar.transferTo(new File(uploadRoot+newFileName));String accessUrl=pros.getAccessUrl()+account.getAccId()+"/"+newFileName;account.setAvatarUrl(accessUrl);accountService.uploadAccount(account);return accessUrl;} catch (IOException e) {throw new RuntimeException(e);}}
}
package com.hniu.myphone.controller;import com.hniu.myphone.mapper.Cover;
import com.hniu.myphone.service.CoverService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;
import java.util.UUID;@RestController
@RequestMapping("/cover")
public class CoverController {@Autowiredprivate CoverService coverService;@GetMapping("/list")public List<Cover> list(String accId){return coverService.list(accId);}@GetMapping("/getOne")public Cover selectOne(String accId,String photoId){return coverService.selectOne(accId, photoId);}@GetMapping("/delete")public void delete(String coverId){coverService.delete(coverId);}@PostMapping("/save")public String save(Cover cover){String coverId = UUID.randomUUID().toString().replaceAll("-","");cover.setCoverId(coverId);return coverService.save(cover);}}
import com.hniu.myphone.comm.config.Properties;
import com.hniu.myphone.mapper.Account;
import com.hniu.myphone.mapper.Photo;
import com.hniu.myphone.service.PhotoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.UUID;@RestController
@RequestMapping("/photo")
public class PhotoController {@Autowiredprivate final PhotoService photoService;@Autowiredprivate Properties pros;public PhotoController(PhotoService photoService) {this.photoService = photoService;}@PostMapping("/upload")public String uploadPhoto(@RequestPart MultipartFile file,String accId) {Photo photo = new Photo();Account account = new Account();account.setAccId(accId);photo.setAccount(account);long size = file.getSize();String oldFileName = file.getOriginalFilename();String suffx = oldFileName.substring(oldFileName.lastIndexOf("."));String newFileName = UUID.randomUUID().toString()+suffx;photo.setPhotoSize(size);try {String uploadRoot = pros.getSavePath()+"\\"+accId+ File.separator;File root = new File(uploadRoot);if(!root.exists()){root.mkdirs();}photo.setPhotoSavePath(uploadRoot);file.transferTo(new File(uploadRoot+newFileName));String accessUrl = pros.getAccessUrl()+accId+"/"+newFileName;photo.setPhotoAccessUrl(accessUrl);photoService.savePhoto(photo);} catch (IOException e) {e.printStackTrace();return "";}return "1";}@GetMapping("/list")public List<Photo> list(String accId,Integer pageNum){if (pageNum==null){pageNum=1;}return photoService.selectList(accId,pageNum,5);}@GetMapping("/delete")public void deletePhoto(String[] photoIds){System.out.println(Arrays.toString(photoIds));photoService.deletePhoto(photoIds);}
}
  1. 在package com.hniu.myphone下创建dao包,dao包下创建接口:AccountMapperCoverMapperPhotoMapper

package com.hniu.myphone.dao;import com.hniu.myphone.mapper.Account;import java.util.List;
import java.util.Map;/****/
public interface AccountMapper {public List<Map<String,Object>> selectAll();//    public Map<String,Object>  selectByOpenId(String openId);public Account selectByOpenId(String openId);void saveAccount(Account account);void uploadAccount(Account account);
}
package com.hniu.myphone.dao;import com.hniu.myphone.mapper.Cover;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;import java.util.List;@Repository
public interface CoverMapper {public List<Cover> selectCover(String accId);public void deleteByCoverId(String coverId);public Cover selectAccIdAndPhotoId(@Param("accId") String accId, @Param("photoId") String photoId);public int insertCover(Cover cover);}
package com.hniu.myphone.dao;import com.hniu.myphone.mapper.Account;
import com.hniu.myphone.mapper.Photo;import java.util.List;public interface PhotoMapper {public void savePhoto(Photo photo);public void deleteByPhotoIds(String[] photoIds);List<Photo> selectList(String accId,int startNum,int endNum);
}
  1. 在package com.hniu.myphone下创建service包,service包下创建服务类: AccountServiceCoverServicePhotoService

package com.hniu.myphone.service;import com.hniu.myphone.dao.AccountMapper;
import com.hniu.myphone.mapper.Account;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Service;import java.util.UUID;
@Controller
@Service
public class AccountService {@Autowiredprivate AccountMapper accountMapper;//    public List<Map<String,Object>> selectAll(){
//        return accountMapper.selectAll();
//    }//    public Map<String,Object>  selectByOpenId(String openId){
//        return accountMapper.selectByOpenId(openId);
//    }public Account selectByOpenId(String openId){return accountMapper.selectByOpenId(openId);}public void saveAccount(Account account){String accId= UUID.randomUUID().toString().replaceAll("-","");account.setAccId(accId);accountMapper.saveAccount(account);}public void uploadAccount(Account account){accountMapper.uploadAccount(account);}
}
package com.hniu.myphone.service;import com.hniu.myphone.dao.CoverMapper;
import com.hniu.myphone.mapper.Cover;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class CoverService {@Autowiredprivate CoverMapper coverMapper;public List<Cover> list(String accId){return coverMapper.selectCover(accId);}public Cover selectOne(String accId,String photoId){Cover cover = coverMapper.selectAccIdAndPhotoId(accId, photoId);if (cover == null){return null;}else {return cover;}}public void delete(String coverId){coverMapper.deleteByCoverId(coverId);}public String save(Cover cover){int i = coverMapper.insertCover(cover);if (i>0){return "1";}else {return null;}}}
package com.hniu.myphone.service;import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hniu.myphone.dao.PhotoMapper;
import com.hniu.myphone.mapper.Photo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.sql.Timestamp;
import java.util.Date;
import java.util.List;
import java.util.UUID;@Service
public class PhotoService {@Autowiredprivate PhotoMapper photoMapper;public void savePhoto(Photo photo){
//        //使用UUID生成主键,并赋值给photoID
//        String photoID= UUID.randomUUID().toString();
//        photo.setPhotoId(photoID);
//        //获取当前时间,赋值给uploadTimestamp
//        Timestamp uploadTimestamp=new Timestamp(System.currentTimeMillis());
//        photo.setUploadTimestamp(uploadTimestamp);
//        //调用PhotoMapper接口中的方法实现照片信息的保存
//        photoMapper.savePhoto(photo);String uuid = UUID.randomUUID().toString().replaceAll("-","");Date date = new Date();photo.setPhotoId(uuid);photo.setUploadTimestamp(date);photoMapper.savePhoto(photo);}public List<Photo> selectList(String accId,int pageNum,int pageSize){return photoMapper.selectList(accId,(pageNum-1)*pageSize,pageNum*pageSize);}public void deletePhoto(String[] photoIds){photoMapper.deleteByPhotoIds(photoIds);}
}
  1. 在package com.hniu.myphone下创建Application

package com.hniu.myphone;
import org.mybatis.spring.annotation.MapperScan;
import org.mybatis.spring.annotation.MapperScans;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.DispatcherServlet;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import javax.servlet.DispatcherType;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import java.util.EnumSet;
@EnableWebMvc
@ComponentScan
@MapperScans(@MapperScan("com.hniu.myphone.dao"))
public class Application implements WebApplicationInitializer {//    filter.setEncoding("utf-8");public void onStartup(ServletContext servletContext) throws ServletException {AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();DispatcherServlet servlet = new DispatcherServlet();servlet.setApplicationContext(context);servletContext.addServlet("ds",servlet).addMapping("/");context.setServletContext(servletContext);context.register(Application.class);context.refresh();context.start();CharacterEncodingFilter filter=new CharacterEncodingFilter();filter.setEncoding("UTF-8");servletContext.addFilter("cef",filter).addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST),true,"/*");}}
  1. resources下创建mapper目录,在mapper目录下新建以下xml文件:AccountMapper.xmlCoverMapper.xmlPhotoMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.6//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hniu.myphone.dao.AccountMapper"><resultMap id="accountMap" type="Account"><id column="acc_id" property="accId"></id><result column="openid" property="openid"></result><result column="nickName" property="nickName"></result><result column="avatarUrl" property="avatarUrl"></result></resultMap><select id="selectByOpenId" parameterType="string" resultMap="accountMap">SELECT * FROM t_account WHERE openid = #{openid};</select><insert id="saveAccount" parameterType="Account">INSERT INTO t_account (acc_id, openid, nickName, avatarUrl) VALUES (#{accId},#{openid}, #{nickName}, #{avatarUrl})</insert><update id="uploadAccount" parameterType="Account">update t_account<set><if test="nickName != null and nickName.trim() != ''">nickname=#{nickName}</if><if test="avatarUrl != null and avatarUrl.trim() != ''">avatarUrl = #{avatarUrl}</if></set>where acc_id=#{accId};</update>
</mapper>
<?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.hniu.myphone.dao.CoverMapper"><resultMap id="result" type="com.hniu.myphone.mapper.Cover"><id column="cover_id" property="coverId"/><result column="acc_id" property="accId"/><result column="photo_accessUrl" property="accessUrl"/><result column="photo_id" property="photoId"/></resultMap><insert id="insertCover">insert into t_cover(cover_id, acc_id, photo_accessUrl, photo_id) values (#{coverId},#{accId},#{accessUrl},#{photoId})</insert><delete id="deleteByCoverId">delete from t_cover where cover_id = #{coverId}</delete><select id="selectCover" resultMap="result">select * from t_cover where acc_id = #{accId}</select><select id="selectAccIdAndPhotoId" resultMap="result">select * from t_cover where acc_id = #{accId} and photo_id = #{photoId}</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.6//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hniu.myphone.dao.PhotoMapper"><resultMap id="result" type="com.hniu.myphone.mapper.Photo"><id property="photoId" column="photo_id"/><result property="photoSize" column="photo_size"/><result property="uploadTimestamp" column="upload_timestamp"/><result property="photoSavePath" column="photo_savePath"/><result property="photoAccessUrl" column="photo_accesUrl"/><association property="account"><id property="accId" column="acc_id"/><!-- Add other account properties here --></association></resultMap><insert id="savePhoto" parameterType="com.hniu.myphone.mapper.Photo">INSERT INTO t_photo(photo_id, photo_size, upload_timestamp, photo_savePath, photo_accesUrl, acc_id)VALUES(#{photoId}, #{photoSize}, #{uploadTimestamp}, #{photoSavePath}, #{photoAccessUrl}, #{account.accId});</insert><delete id="deleteByPhotoIds">delete from t_photo where photo_id in<foreach collection="array" index="index" open="(" close=")" item="item" separator=",">#{item}</foreach></delete><!--    <select id="selectList" resultMap="result" parameterType="string">-->
<!--        SELECT * FROM t_photo WHERE acc_id = #{account.accId} ORDER BY upload_timestamp DESC;-->
<!--    </select>--><select id="selectList" resultMap="result">select * from t_photo where acc_id = #{arg0} order by upload_timestamp desc limit #{arg1},#{arg2}</select>
</mapper>

源码:个人相册后端

这篇关于微信小程序——个人相册(后端)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/313155

相关文章

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

python编写朋克风格的天气查询程序

《python编写朋克风格的天气查询程序》这篇文章主要为大家详细介绍了一个基于Python的桌面应用程序,使用了tkinter库来创建图形用户界面并通过requests库调用Open-MeteoAPI... 目录工具介绍工具使用说明python脚本内容如何运行脚本工具介绍这个天气查询工具是一个基于 Pyt

Ubuntu设置程序开机自启动的操作步骤

《Ubuntu设置程序开机自启动的操作步骤》在部署程序到边缘端时,我们总希望可以通电即启动我们写好的程序,本篇博客用以记录如何在ubuntu开机执行某条命令或者某个可执行程序,需要的朋友可以参考下... 目录1、概述2、图形界面设置3、设置为Systemd服务1、概述测试环境:Ubuntu22.04 带图

Python程序打包exe,单文件和多文件方式

《Python程序打包exe,单文件和多文件方式》:本文主要介绍Python程序打包exe,单文件和多文件方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python 脚本打成exe文件安装Pyinstaller准备一个ico图标打包方式一(适用于文件较少的程

Python程序的文件头部声明小结

《Python程序的文件头部声明小结》在Python文件的顶部声明编码通常是必须的,尤其是在处理非ASCII字符时,下面就来介绍一下两种头部文件声明,具有一定的参考价值,感兴趣的可以了解一下... 目录一、# coding=utf-8二、#!/usr/bin/env python三、运行Python程序四、

如何基于Python开发一个微信自动化工具

《如何基于Python开发一个微信自动化工具》在当今数字化办公场景中,自动化工具已成为提升工作效率的利器,本文将深入剖析一个基于Python的微信自动化工具开发全过程,有需要的小伙伴可以了解下... 目录概述功能全景1. 核心功能模块2. 特色功能效果展示1. 主界面概览2. 定时任务配置3. 操作日志演示

Redis迷你版微信抢红包实战

《Redis迷你版微信抢红包实战》本文主要介绍了Redis迷你版微信抢红包实战... 目录1 思路分析1.1hCckRX 流程1.2 注意点①拆红包:二倍均值算法②发红包:list③抢红包&记录:hset2 代码实现2.1 拆红包splitRedPacket2.2 发红包sendRedPacket2.3 抢

无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案

《无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案》:本文主要介绍了无法启动此程序,详细内容请阅读本文,希望能对你有所帮助... 在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是"api-ms-win-core-path-l1-1-0.dll丢失

SpringBoot后端实现小程序微信登录功能实现

《SpringBoot后端实现小程序微信登录功能实现》微信小程序登录是开发者通过微信提供的身份验证机制,获取用户唯一标识(openid)和会话密钥(session_key)的过程,这篇文章给大家介绍S... 目录SpringBoot实现微信小程序登录简介SpringBoot后端实现微信登录SpringBoo

uniapp小程序中实现无缝衔接滚动效果代码示例

《uniapp小程序中实现无缝衔接滚动效果代码示例》:本文主要介绍uniapp小程序中实现无缝衔接滚动效果的相关资料,该方法可以实现滚动内容中字的不同的颜色更改,并且可以根据需要进行艺术化更改和自... 组件滚动通知只能实现简单的滚动效果,不能实现滚动内容中的字进行不同颜色的更改,下面实现一个无缝衔接的滚动