用戶表(user) 用戶uid(自增,唯一鍵,可不填) 手機號碼(登錄) 密碼(要填) 用戶名 性別 年齡
博客表(blog) id(自增) title content create_time update_time is_delete uid
用戶收藏書的表(b_collect) id(自增) bid(書的id) uid(用戶id)
1 需求說明
打算建個數據庫ohsay,ohsay庫下有user表,blog表,b_collect表。
2 數據庫新建和刪除操作,大小寫都可以
刪除數據庫【oh_say】SQL語句:
DROP DATABASE IF EXISTS oh_say;
新建數據庫【ohsay】SQL語句
create database if not exists ohsay;
3 建用戶表,表名【user】
SQL語句方式建表
CREATE TABLE `ohsay`.`user` (
`uid` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '用戶id',
`phone` VARCHAR(20) NOT NULL,
`pwd` VARCHAR(20) NULL,
`name` VARCHAR(20) NULL,
`sex` INT NULL,
PRIMARY KEY (`uid`),
UNIQUE INDEX `uid_UNIQUE` (`uid` ASC) VISIBLE,
UNIQUE INDEX `phone_UNIQUE` (`phone` ASC) VISIBLE)
COMMENT = '用戶表';
直接在視圖建表方式
4 關於mybatis的使用 ( better_mybatis-generator插件下載 )
mybatis generator插件可以自動化生成sql模板,然後在設置裏面配置生成模板存放路徑
(注意:如果創建失敗可能需要勾選mysql_8)
需要先連接數據庫 (注意,URL需要帶上serverTimeZone,否則創建實體會鏈接數據庫失敗)
右鍵user選擇mybatis generator自動生成user表的實體類
在上一步中model dao xml的package包設置爲***.generator.user
在model包中新建文件UserBean.kt (注意mybatis自動生成的User和UserBean的使用)
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Slf4j
public class UserBean {
private int uid;
private String phone;
private String pwd;
@JsonInclude(JsonInclude.Include.NON_NULL)
private String name;
@JsonInclude(JsonInclude.Include.NON_NULL)
private Integer sex;
}
在service包中新建文件UserRestService.kt 和 文件 UserRestServiceImpl.kt
import com.fgh.spring.model.UserBean;
import java.util.List;
public interface UserRestService {
int saveUser(UserBean userBean);
int deleteUser(int uid);
int updateUser(UserBean userBean);
UserBean getUser(int uid);
List<UserBean> getAllUser();
}
import com.fgh.spring.generator.User;
import com.fgh.spring.generator.UserMapper;
import com.fgh.spring.model.UserBean;
import com.fgh.spring.utils.DozerUtil;
import lombok.extern.slf4j.Slf4j;
import org.dozer.Mapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Slf4j
@Service
public class UserRestServiceImpl implements UserRestService {
@Resource
Mapper mapper;
@Resource
UserMapper userMapper;
@Override
public int saveUser(UserBean userBean) {
User user = mapper.map(userBean, User.class);
return userMapper.insert(user);
}
@Override
public int deleteUser(int uid) {
return userMapper.deleteByPrimaryKey(uid);
}
//updateByPrimaryKeySelective會對字段進行判斷再更新(如果爲Null就忽略更新),如果你只想更新某一字段,可以用這個方法。
//updateByPrimaryKey對你注入的字段全部更新
@Override
public int updateUser(UserBean userBean) {
User user = mapper.map(userBean, User.class);
return userMapper.updateByPrimaryKeySelective(user);
}
@Override
public UserBean getUser(int uid) {
User user = userMapper.selectByPrimaryKey(uid);
return mapper.map(user, UserBean.class);
}
@Override
public List<UserBean> getAllUser() {
List<User> list = userMapper.selectByExample(null);
return DozerUtil.mapList(list, UserBean.class);
}
}
關於Dozerutil,在utils目錄下新建
import com.google.common.collect.Lists;
import org.dozer.DozerBeanMapper;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
public class DozerUtil {
static DozerBeanMapper dozerBeanMapper = new DozerBeanMapper();
public static <T> List<T> mapList(Collection sourceList, Class<T> destinationClass) {
List destinationList = Lists.newArrayList();
for (Iterator i$ = sourceList.iterator(); i$.hasNext();) {
Object sourceObject = i$.next();
Object destinationObject = dozerBeanMapper.map(sourceObject, destinationClass);
destinationList.add(destinationObject);
}
return destinationList;
}
}
還需要在config目錄下新建 DozerBeanMapperConfigure.java
import org.dozer.DozerBeanMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class DozerBeanMapperConfigure {
@Bean
public DozerBeanMapper mapper() {
DozerBeanMapper mapper = new DozerBeanMapper();
return mapper;
}
}
在controller目錄下新建UserRestController.java
import com.fgh.spring.model.AjaxResponse;
import com.fgh.spring.model.UserBean;
import com.fgh.spring.service.UserRestService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@Slf4j
@RestController
@RequestMapping("/user")
public class UserRestController {
@Resource(name = "userRestServiceImpl")
UserRestService userRestService;
//創建用戶
@PostMapping("/register")
public AjaxResponse saveUser(@RequestParam String phone, @RequestParam String pwd) {
UserBean userBean = new UserBean();
userBean.setPhone(phone);
userBean.setPwd(pwd);
int code = userRestService.saveUser(userBean);
return AjaxResponse.success(code);
}
//更改用戶資料
@PostMapping("/info/update")
public AjaxResponse changeInfo(@RequestParam int uid,
@RequestParam(required = false) String phone,
@RequestParam(required = false) Integer sex,
@RequestParam(required = false) String name) {
UserBean userBean = new UserBean();
userBean.setUid(uid);
userBean.setPhone(phone);
userBean.setSex(sex);
userBean.setName(name);
int code = userRestService.updateUser(userBean);
return AjaxResponse.success(code);
}
//獲取用戶資料
@PostMapping("/info")
public AjaxResponse getUser(@RequestParam int uid) {
UserBean user = userRestService.getUser(uid);
return AjaxResponse.success(user);
}
//註銷用戶
@PostMapping("/delete")
public AjaxResponse deleteUser(@RequestParam int uid) {
int code = userRestService.deleteUser(uid);
return AjaxResponse.success(code);
}
//獲取所有用戶(不分頁)
@GetMapping("/alluser")
public AjaxResponse getAllUser() {
List<UserBean> list = userRestService.getAllUser();
return AjaxResponse.success(list);
}
//獲取所有用戶(分頁)
@GetMapping("/alluser/v2")
public AjaxResponse getAllUserLimit(@RequestParam int page,
@RequestParam int pageSize) {
//startPage一定要在getAllUser前面
PageHelper.startPage(page, pageSize);
List<UserBean> list = userRestService.getAllUser();
PageInfo<UserBean> data = PageInfo.of(list);
return AjaxResponse.success(data);
}
}