一 启动类

package com.imooc;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;

import tk.mybatis.spring.annotation.MapperScan;

@SpringBootApplication
//扫描 mybatis mapper 包路径
@MapperScan(basePackages = "com.imooc.mapper")
//扫描 所有需要的包, 包含一些自用的工具类包 所在的路径
@ComponentScan(basePackages= {"com.imooc", "org.n3r.idworker"})
public class ImoocApplication {

    public static void main(String[] args) {
        SpringApplication.run(ImoocApplication.class, args);
    }
}

二 控制器

package com.imooc.controller;

import java.util.Date;
import java.util.List;

import org.n3r.idworker.Sid;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.imooc.pojo.IMoocJSONResult;
import com.imooc.pojo.SysUser;
import com.imooc.service.UserService;

@RestController
@RequestMapping("mybatis")
public class MyBatisCRUDController {
    
    @Autowired
    private UserService userService;
    
    @Autowired
    private Sid sid;
    
    @RequestMapping("/saveUser")
    public IMoocJSONResult saveUser() throws Exception {
        
        String userId = sid.nextShort();
        
        SysUser user = new SysUser();
        user.setId(userId);
        user.setUsername("imooc" + new Date());
        user.setNickname("imooc" + new Date());
        user.setPassword("abc123");
        user.setIsDelete(0);
        user.setRegistTime(new Date());
        
        userService.saveUser(user);
        
        return IMoocJSONResult.ok("保存成功");
    }
    
    @RequestMapping("/updateUser")
    public IMoocJSONResult updateUser() {
        
        SysUser user = new SysUser();
        user.setId("10011001");
        user.setUsername("10011001-updated" + new Date());
        user.setNickname("10011001-updated" + new Date());
        user.setPassword("10011001-updated");
        user.setIsDelete(0);
        user.setRegistTime(new Date());
        
        userService.updateUser(user);
        
        return IMoocJSONResult.ok("保存成功");
    }
    
    @RequestMapping("/deleteUser")
    public IMoocJSONResult deleteUser(String userId) {
        
        userService.deleteUser(userId);
        
        return IMoocJSONResult.ok("删除成功");
    }
    
    @RequestMapping("/queryUserById")
    public IMoocJSONResult queryUserById(String userId) {
        
        return IMoocJSONResult.ok(userService.queryUserById(userId));
    }
    
    @RequestMapping("/queryUserList")
    public IMoocJSONResult queryUserList() {
        
        SysUser user = new SysUser();
        user.setUsername("jack");
        user.setNickname("ja");
        
        List<SysUser> userList = userService.queryUserList(user);
        
        return IMoocJSONResult.ok(userList);
    }
    
    @RequestMapping("/queryUserListPaged")
    public IMoocJSONResult queryUserListPaged(Integer page) {
        
        if (page == null) {
            page = 1;
        }

        int pageSize = 10;
        
        SysUser user = new SysUser();
        
        List<SysUser> userList = userService.queryUserListPaged(user, page, pageSize);
        
        return IMoocJSONResult.ok(userList);
    }
    
    @RequestMapping("/queryUserByIdCustom")
    public IMoocJSONResult queryUserByIdCustom(String userId) {
        
        return IMoocJSONResult.ok(userService.queryUserByIdCustom(userId));
    }
    
    @RequestMapping("/saveUserTransactional")
    public IMoocJSONResult saveUserTransactional() {
        
        String userId = sid.nextShort();
        
        SysUser user = new SysUser();
        user.setId(userId);
        user.setUsername("lee" + new Date());
        user.setNickname("lee" + new Date());
        user.setPassword("abc123");
        user.setIsDelete(0);
        user.setRegistTime(new Date());
        
        userService.saveUserTransactional(user);
        
        return IMoocJSONResult.ok("保存成功");
    }
}

三 服务层

1 UserService

package com.imooc.service;

import java.util.List;

import com.imooc.pojo.SysUser;

public interface UserService {

    public void saveUser(SysUser user) throws Exception;

    public void updateUser(SysUser user);

    public void deleteUser(String userId);

    public SysUser queryUserById(String userId);

    public List<SysUser> queryUserList(SysUser user);

    public List<SysUser> queryUserListPaged(SysUser user, Integer page, Integer pageSize);

    public SysUser queryUserByIdCustom(String userId);
    
    public void saveUserTransactional(SysUser user);
}

2 UserServiceImpl

package com.imooc.service.impl;

import java.util.List;

import com.imooc.config.LogServiceTakeTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.thymeleaf.util.StringUtils;

import com.github.pagehelper.PageHelper;
import com.imooc.mapper.SysUserMapper;
import com.imooc.mapper.SysUserMapperCustom;
import com.imooc.pojo.SysUser;
import com.imooc.service.UserService;

import tk.mybatis.mapper.entity.Example;

@Service
public class UserServiceImpl implements UserService {

    final static Logger log = LoggerFactory.getLogger(UserServiceImpl.class);

    @Autowired
    private SysUserMapper userMapper;
    
    @Autowired
    private SysUserMapperCustom userMapperCustom;
    
    @Override
    @Transactional(propagation = Propagation.REQUIRED)
    public void saveUser(SysUser user) throws Exception {
        
        try {
            Thread.sleep(4000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        
        userMapper.insert(user);
    }

    @Override
    @Transactional(propagation = Propagation.REQUIRED)
    public void updateUser(SysUser user) {
//        userMapper.updateByPrimaryKeySelective(user);
        userMapper.updateByPrimaryKey(user);
    }

    @Override
    @Transactional(propagation = Propagation.REQUIRED)
    public void deleteUser(String userId) {
        userMapper.deleteByPrimaryKey(userId);
    }

    @Override
    @Transactional(propagation = Propagation.SUPPORTS)
    public SysUser queryUserById(String userId) {
        
        try {
            Thread.sleep(6000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        
        return userMapper.selectByPrimaryKey(userId);
    }

    @Override
    @Transactional(propagation = Propagation.SUPPORTS)
    public List<SysUser> queryUserList(SysUser user) {
        
        
        Example example = new Example(SysUser.class);
        Example.Criteria criteria = example.createCriteria();

        log.error("日志记录发生错误, username: {}", user.getUsername());
        if (!StringUtils.isEmptyOrWhitespace(user.getUsername())) {
            criteria.andEqualTo("username", user.getUsername());
            System.out.println("username"+user.getUsername());
            criteria.andLike("username", "%" + user.getUsername() + "%");
        }

        if (!StringUtils.isEmptyOrWhitespace(user.getNickname())) {
            criteria.andLike("nickname", "%" + user.getNickname() + "%");
        }
        
        List<SysUser> userList = userMapper.selectByExample(example);
        
        return userList;
    }
    
    @Override
    @Transactional(propagation = Propagation.SUPPORTS)
    public List<SysUser> queryUserListPaged(SysUser user, Integer page, Integer pageSize) {
        // 开始分页
        PageHelper.startPage(page, pageSize);
        
        Example example = new Example(SysUser.class);
        Example.Criteria criteria = example.createCriteria();
        
        if (!StringUtils.isEmptyOrWhitespace(user.getNickname())) {
            criteria.andLike("nickname", "%" + user.getNickname() + "%");
        }
        example.orderBy("registTime").desc();
        List<SysUser> userList = userMapper.selectByExample(example);
        
        return userList;
    }
    
    @Override
    @Transactional(propagation = Propagation.SUPPORTS)
    public SysUser queryUserByIdCustom(String userId) {
        
        List<SysUser> userList = userMapperCustom.queryUserSimplyInfoById(userId);
        
        if (userList != null && !userList.isEmpty()) {
            return (SysUser)userList.get(0);
        }
        
        return null;
    }
    
    @Override
    @Transactional(propagation = Propagation.REQUIRED)
    public void saveUserTransactional(SysUser user) {
        
        userMapper.insert(user);
        
        int a = 1 / 0;
        
        user.setIsDelete(1);
        userMapper.updateByPrimaryKeySelective(user);
    }
}

四 自定义mapper

1 SysUserMapperCustom.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.imooc.mapper.SysUserMapperCustom" >
  
  <!-- 查询简单的用户信息 -->
    <select id="queryUserSimplyInfoById" resultType="com.imooc.pojo.SysUser"
                                         parameterType="java.lang.String" >
        select
            *
        from
            sys_user
        where
            id = #{id,jdbcType=VARCHAR}
    </select>
</mapper>

2 SysUserMapperCustom.java

package com.imooc.mapper;

import java.util.List;

import com.imooc.pojo.SysUser;

public interface SysUserMapperCustom {
    
    List<SysUser> queryUserSimplyInfoById(String id);
}

五 测试

数据库数据

SpringBoot整合MyBatis——实现基于mybatis的CRUD功能

1 /saveUser测试

SpringBoot整合MyBatis——实现基于mybatis的CRUD功能

SpringBoot整合MyBatis——实现基于mybatis的CRUD功能

2 /updateUser测试

SpringBoot整合MyBatis——实现基于mybatis的CRUD功能

SpringBoot整合MyBatis——实现基于mybatis的CRUD功能

3 /deleteUser测试

SpringBoot整合MyBatis——实现基于mybatis的CRUD功能

SpringBoot整合MyBatis——实现基于mybatis的CRUD功能

4  /queryUserById测试

SpringBoot整合MyBatis——实现基于mybatis的CRUD功能

5  /queryUserList测试

SpringBoot整合MyBatis——实现基于mybatis的CRUD功能

6 /queryUserListPaged测试

SpringBoot整合MyBatis——实现基于mybatis的CRUD功能

7 /queryUserByIdCustom

SpringBoot整合MyBatis——实现基于mybatis的CRUD功能

8 /saveUserTransactional

SpringBoot整合MyBatis——实现基于mybatis的CRUD功能

 

 

相关文章: