mybatis

<!--mybatis-->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>2.0.1</version>
		</dependency>
### mybatis配置
mybatis.mapper-locations=classpath:/mappers/*Mapper.xml
mybatis.type-aliases-package=cn.stevekung.dao
package cn.stevekung.dao;

import cn.stevekung.pojo.AyUser;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

@Mapper
public interface AyUserDao {
    /**
     *  描述:通过用户名和密码查询用户
     * @param name
     * @param password
     */
    AyUser findByNameAndPassword(@Param("name") String name,
                                 @Param("password") String password);
}
<?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="cn.stevekung.dao.AyUserDao">
    <resultMap id="UserResultMap" type="cn.stevekung.pojo.AyUser">
        <id column="id" property="id" jdbcType="VARCHAR"/>
        <result column="name" property="name" jdbcType="VARCHAR"/>
        <result column="password" property="password" jdbcType="VARCHAR"/>
        <result column="mail" property="mail" jdbcType="VARCHAR"/>
    </resultMap>
    <select id="findByNameAndPassword" resultMap="UserResultMap" parameterType="String">
        select * from ay_user u
        <where>
            u.name = #{name}
            AND u.password = #{password}
        </where>
    </select>
</mapper>

 

package cn.stevekung.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;

@Entity
@Table(name = "ay_user")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class AyUser implements Serializable{
    @Id
    private String id;
    private String name;
    private String password;
    private String mail;
}
package cn.stevekung.service;

import cn.stevekung.pojo.AyUser;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.Collection;
import java.util.List;

public interface AyUserService {
    // 基本crud操作
    AyUser findById(String id); // 查
    List<AyUser> findAll(); // 查
    AyUser save(AyUser ayUser);// 增 改
    void delete(String id); // 删

    // 分页
    Page<AyUser> findAll(Pageable pageable);

    // 自定义查询方法
    List<AyUser> findByName(String name);
    List<AyUser> findByNameLike(String name);
    List<AyUser> findByIdIn(Collection<String> ids);

    // mybatis
    AyUser findByNameAndPassword(String name, String password);
}
package cn.stevekung.service.impl;

import cn.stevekung.dao.AyUserDao;
import cn.stevekung.pojo.AyUser;
import cn.stevekung.repository.AyUserRepository;
import cn.stevekung.service.AyUserService;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.AllArgsConstructor;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.*;

@Service
@Transactional
public class AyUserServiceImpl implements AyUserService {

//    private static final Logger log = LoggerFactory.getLogger(AyUserServiceImpl.class);
    Logger log = LogManager.getLogger(this.getClass());

    @Autowired
    AyUserRepository ayUserRepository;

    @Autowired
    StringRedisTemplate stringRedisTemplate;

    @Autowired
    ObjectMapper objectMapper;

    @Autowired
    AyUserDao ayUserDao;

    private static final String ALL_USER = "ALL_USER_LIST";

    @Override
    public AyUser findById(String id) {

        AyUser ayUser = new AyUser();
        try {
            //step.1  查询Redis缓存中的所有数据
            List<String> redisStrings = stringRedisTemplate.opsForList().range(ALL_USER, 0, -1);
            List<AyUser> ayUserList = new ArrayList<>();
            for (String redisString : redisStrings) {
                AyUser user = objectMapper.readValue(redisString, AyUser.class);
                ayUserList.add(user);
            }
            if (null != ayUserList && ayUserList.size() > 0){
                for (AyUser user : ayUserList) {
                    if (user.getId().equals(id)){
                        return user;
                    }
                }
            }
            //step.2  查询数据库中的数据
            ayUser = ayUserRepository.findById(id).get();
            if (ayUser != null){
                //step.3 将数据插入到Redis缓存中
                stringRedisTemplate.opsForList().rightPush(ALL_USER, objectMapper.writeValueAsString(ayUser));
            }
        } catch (Exception e) {
            log.info("AyUserServiceImpl + findById() error");
            e.printStackTrace();
        }
        return ayUser;

    }

    @Override
    public List<AyUser> findAll() {
        List<AyUser> result = ayUserRepository.findAll();
        return result;
    }

    @Override
    @Transactional
    public AyUser save(AyUser ayUser) {
        // 更新 和 保存
        AyUser save = new AyUser();
        try {
            // 先更新数据库
            save = ayUserRepository.save(ayUser);
//        测试事务回滚
        String error = null;
        error.split("/");
            // 再更新缓存 (即删除缓存 设置缓存)
            List<String> redisStrings = stringRedisTemplate.opsForList().range(ALL_USER, 0, -1);
            for (String redisString : redisStrings) {
                AyUser user = objectMapper.readValue(redisString, AyUser.class);
                if (user.getName().equals(ayUser.getName())){
                    stringRedisTemplate.opsForList().remove(ALL_USER,1, redisString);
                }
            }
            stringRedisTemplate.opsForList().rightPush(ALL_USER, objectMapper.writeValueAsString(save));
        } catch (Exception e) {
            log.info("AyUserServiceImpl + save() error");
            e.printStackTrace();
        }
        return save;
    }

    @Override
    public void delete(String id) {

        try {
            // 先更新数据库
            ayUserRepository.deleteById(id);
            log.info("userId:" + id + "用户被删除");
            // 再删除缓存
            List<String> redisStrings = stringRedisTemplate.opsForList().range(ALL_USER, 0, -1);
            for (String redisString : redisStrings) {
                AyUser user = objectMapper.readValue(redisString, AyUser.class);
                if (user.getId().equals(id)){
                    stringRedisTemplate.opsForList().remove(ALL_USER, 1, redisString);
                }
            }

        } catch (Exception e) {
            log.info("AyUserServiceImpl + delete() error");
            e.printStackTrace();
        }
    }

    // 分页
    @Override
    public Page<AyUser> findAll(Pageable pageable) {
        return ayUserRepository.findAll(pageable);
    }

    @Override
    public List<AyUser> findByName(String name) {
        return ayUserRepository.findByName(name);
    }

    @Override
    public List<AyUser> findByNameLike(String name) {
        return ayUserRepository.findByNameLike(name);
    }

    @Override
    public List<AyUser> findByIdIn(Collection<String> ids) {
        return ayUserRepository.findByIdIn(ids);
    }

    // mybatis
    @Override
    public AyUser findByNameAndPassword(String name, String password) {
        return ayUserDao.findByNameAndPassword(name, password);
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值