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

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;

/**
 * 全局配置文件
 */
@Configuration

public class GlobalConfiguration extends WebMvcConfigurationSupport {
    @Autowired
    private Properties props; //全局配置参数
    /**
     * 注册数据源
     * @return
     */
    @Bean
    public 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
     */
    @Bean
    public SqlSessionFactoryBean sessionFactory() throws IOException {
        SqlSessionFactoryBean sessionBean = new SqlSessionFactoryBean();
        sessionBean.setDataSource(dataSource());  //数据源
        sessionBean.setTypeAliasesPackage("com.hniu.myphone.mapper"); //实体别名
        PathMatchingResourcePatternResolver sourceResolver = new PathMatchingResourcePatternResolver();
        //Mapper.xml
       Resource[] rs = sourceResolver.getResources("classpath:mapper/*Mapper.xml");
        sessionBean.setMapperLocations(rs);

        PageInterceptor interceptor =new PageInterceptor();
        sessionBean.setPlugins(interceptor);

        return sessionBean;
    }
    /**
     * 注册mybatis操作模板
     * @return
     * @throws Exception
     */
    @Bean
    public 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 JSON
        converters.add(new MappingJackson2HttpMessageConverter());
        // and probably needs a string converter too for text/plain content-type strings to be properly handled
        converters.add(new StringHttpMessageConverter());
    }

    @Override
    protected  void addResourceHandlers(ResourceHandlerRegistry registry){
        registry.addResourceHandler(props.getAccessUrl()+"**").addResourceLocations("file:"+props.getSavePath());
    }

    @Bean
    public 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";

    @Autowired
    private 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 {
    @Autowired
    private AccountService accountService;
    @Autowired
    private WXUtils wxUtils;

    @Autowired
    private 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 {

    @Autowired
    private 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 {
    @Autowired
    private final PhotoService photoService;
    @Autowired
    private 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 {
    @Autowired
    private 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 {

    @Autowired
    private 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 {

    @Autowired
    private 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 mapper
          PUBLIC "-//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 mapper
        PUBLIC "-//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>

源码个人相册后端

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐