一 启动类
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);
}
五 测试
数据库数据
1 /saveUser测试
2 /updateUser测试
3 /deleteUser测试
4 /queryUserById测试
5 /queryUserList测试
6 /queryUserListPaged测试
7 /queryUserByIdCustom
8 /saveUserTransactional