最新springboot集成mybatis详细教程同时实现自定义拦截器分页功能,kafka调优面试

Java核心架构进阶知识点

面试成功其实都是必然发生的事情,因为在此之前我做足了充分的准备工作,不单单是纯粹的刷题,更多的还会去刷一些Java核心架构进阶知识点,比如:JVM、高并发、多线程、缓存、Spring相关、分布式、微服务、RPC、网络、设计模式、MQ、Redis、MySQL、设计模式、负载均衡、算法、数据结构、kafka、ZK、集群等。而这些也全被整理浓缩到了一份pdf——《Java核心架构进阶知识点整理》,全部都是精华中的精华,本着共赢的心态,好东西自然也是要分享的

image

image

image

内容颇多,篇幅却有限,这就不在过多的介绍了,大家可根据以上截图自行脑补

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

import javax.validation.constraints.NotBlank;

/**

  • Created by Feng

*/

public class User {

private Integer id;

@NotBlank(message = “用户名不能为空”)

private String userName;

@NotBlank(message = “密码不能为空”)

private String passWord;

private String uName;

private String phone;

private String email;

private String cityID;

private String cityName;

private String provienceID;

private String provienceName;

private String address;

private String organizationID;

private String roleID;

private String photo;

private String birthday;

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

this.userName = userName;

}

public String getPassWord() {

return passWord;

}

public void setPassWord(String passWord) {

this.passWord = passWord;

}

public String getuName() {

return uName;

}

public void setuName(String uName) {

this.uName = uName;

}

public String getPhone() {

return phone;

}

public void setPhone(String phone) {

this.phone = phone;

}

public String getEmail() {

return email;

}

public void setEmail(String email) {

this.email = email;

}

public String getCityID() {

return cityID;

}

public void setCityID(String cityID) {

this.cityID = cityID;

}

public String getCityName() {

return cityName;

}

public void setCityName(String cityName) {

this.cityName = cityName;

}

public String getProvienceID() {

return provienceID;

}

public void setProvienceID(String provienceID) {

this.provienceID = provienceID;

}

public String getProvienceName() {

return provienceName;

}

public void setProvienceName(String provienceName) {

this.provienceName = provienceName;

}

public String getAddress() {

return address;

}

public void setAddress(String address) {

this.address = address;

}

public String getOrganizationID() {

return organizationID;

}

public void setOrganizationID(String organizationID) {

this.organizationID = organizationID;

}

public String getRoleID() {

return roleID;

}

public void setRoleID(String roleID) {

this.roleID = roleID;

}

public String getPhoto() {

return photo;

}

public void setPhoto(String photo) {

this.photo = photo;

}

public String getBirthday() {

return birthday;

}

public void setBirthday(String birthday) {

this.birthday = birthday;

}

@Override

public String toString() {

return “User{” +

“id=” + id +

“, userName='” + userName + ‘’’ +

“, passWord='” + passWord + ‘’’ +

“, uName='” + uName + ‘’’ +

“, phone='” + phone + ‘’’ +

“, email='” + email + ‘’’ +

“, cityID='” + cityID + ‘’’ +

“, cityName='” + cityName + ‘’’ +

“, provienceID='” + provienceID + ‘’’ +

“, provienceName='” + provienceName + ‘’’ +

“, address='” + address + ‘’’ +

“, organizationID='” + organizationID + ‘’’ +

“, roleID='” + roleID + ‘’’ +

“, photo='” + photo + ‘’’ +

“, birthday='” + birthday + ‘’’ +

‘}’;

}

}

创建用于查询的UserDao和用于分页的Pager

package com.feng.dao;

import com.feng.entity.User;

import database.support.Pager;

import org.apache.ibatis.annotations.Param;

import java.util.List;

/**

  • Created by Feng

*/

public interface UserDao {

List getUser(@Param(“user”) User user);

List getUser(@Param(“pager”) Pager pager, @Param(“user”) User user);

User loadUserByUserName(String userName);

int addUser(User user);

int addUsers(List userList);

}

package database.support;

import javax.validation.constraints.NotNull;

/**

  • Created by Feng

*/

public class Pager {

@NotNull

private int pageNo;

private int pageSize = 10;

private int total;

private String sortBy;

private String rank = “DESC”;

public int getPageNo() {

return pageNo;

}

public int getPageSize() {

return pageSize;

}

public int getTotal() {

return total;

}

public String getSortBy() {

return sortBy;

}

public String getRank() {

return rank;

}

public Pager setPageNo(int pageNo) throws IllegalAccessException {

if(pageNo <= 0){

throw new IllegalAccessException(“分页页码必须大于0”);

}

this.pageNo = pageNo;

return this;

}

public Pager setPageSize(int pageSize) throws IllegalAccessException {

if(pageSize <= 0){

throw new IllegalAccessException(“单页数据量必须大于0”);

}

this.pageSize = pageSize;

return this;

}

public Pager setTotal(int total) {

this.total = total;

return this;

}

public Pager setSortBy(String sortBy) {

this.sortBy = sortBy;

return this;

}

public Pager setRank(String rank) {

this.rank = rank;

return this;

}

}

我们会用到UserDao中重载过的两个getUser方法,其中一个只接受用于查询的User参数,另一个额外接受一个Pager对象用于分页。

然后在spring配置文件中指定的包内编写用于映射UserDao的mybatis映射配置文件UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>

ID,USERNAME,U_NAME,PHONE,EMAIL,CITY_ID,CITY_NAME,PROVIENCE_ID,PROVIENCE_NAME,ADDRESS,PHOTO,BIRTHDAY,ORGANIZATION_ID,ROLE_ID

,PASSWORD

SELECT

FROM USER

WHERE USERNAME = #{userName}

SELECT

FROM USER

ID = #{id}

AND USERNAME = #{userName}

AND U_NAME LIKE #{uName}

AND PHONE = #{phone}

AND EMAIL = #{email}

AND CITY_ID = #{cityID}

AND PROVIENCE_ID = #{provienceID}

AND ADDRESS LIKE #{address}

AND ORGANIZATION_ID = #{organizationID}

AND ROLE_ID = #{roleID}

insert into USER (ID,USERNAME,PASSWORD,U_NAME,PHONE,EMAIL,CITY_ID,CITY_NAME,PROVIENCE_ID,PROVIENCE_NAME,ADDRESS,PHOTO,BIRTHDAY,ORGANIZATION_ID,ROLE_ID)

values (#{id},

#{userName},

#{passWord},

#{uName},

#{phone},

#{email},

#{cityID},

#{cityName},

#{provienceID},

#{provienceName},

#{address},

#{photo},

#{birthday},

#{organizationID},

#{roleID})

这里需要说明的是我们在UserDao中有两个getUser方法,但在配置文件中只映射了一个select标签,这是因为mybatis和dao层之间的映射只与方法名称有关,而与方法参数无关。所以在sql语句不变,只是参数增加的情况下我们可以用一个select标签映射多个方法。唯一要注意的是传入多个对象参数时要在dao层中使@Param注解为参数指定名称。

然后添加一个mybatis配置类MybatisConfig

package com.feng.config;

import database.mybatis.plug.PageInterceptor;

import org.mybatis.spring.annotation.MapperScan;

import org.mybatis.spring.boot.autoconfigure.ConfigurationCustomizer;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

/**

  • Created by Feng

*/

@MapperScan(“com.feng.dao”)

@Configuration

public class MybatisConfig {

}

使用MapperScan用于指定dao层位置。

这个时候我们已经可以通过注入的方式使用UserDao来查询用户数据了,但为了规范,我们在dao层之上增加一个service层,编写UserService接口和实现类

package com.feng.service;

import com.feng.entity.User;

import database.support.Pager;

import java.util.List;

/**

  • Created by Feng

*/

public interface UserService {

public User getUserByID(int id);

public int removeUserByID(int id);

public User loadUserByUserName(String userName);

public List getUser(Pager pager,User user);

public List getUser(User user);

}

package com.feng.service;

import com.feng.dao.UserDao;

import com.feng.entity.User;

import database.support.Pager;

import org.springframework.stereotype.Service;

import javax.annotation.Resource;

import java.util.List;

/**

  • Created by Feng

*/

@Service

public class UserServiceImpl implements UserService {

@Resource

private UserDao userDao;

@Override

public User getUserByID(int id) {

User queryUser = new User();

queryUser.setId(id);

List users = userDao.getUser(queryUser);

if(users != null && users.size() > 0){

return users.get(0);

}

return null;

}

@Override

public int removeUserByID(int id) {

return 0;

}

@Override

public User loadUserByUserName(String userName) {

return userDao.loadUserByUserName(userName);

}

@Override

public List getUser(Pager pager, User user) {

return userDao.getUser(pager,user);

}

@Override

public List getUser(User user) {

return userDao.getUser(user);

}

}

创建启动类和junit测试类

package com.feng;

import org.springframework.boot.SpringApplication;

@SpringBootApplication

public class SpringBootWebApplication {

public static void main(String[] args){

SpringApplication.run(SpringBootWebApplication.class, args);

}

}

最后

看完美团、字节、腾讯这三家的面试问题,是不是感觉问的特别多,可能咱们又得开启面试造火箭、工作拧螺丝的模式去准备下一次的面试了。

开篇有提及我可是足足背下了1000道题目,多少还是有点用的呢,我看了下,上面这些问题大部分都能从我背的题里找到的,所以今天给大家分享一下互联网工程师必备的面试1000题

注意不论是我说的互联网面试1000题,还是后面提及的算法与数据结构、设计模式以及更多的Java学习笔记等,皆可分享给各位朋友

最新“美团+字节+腾讯”一二三面问题,挑战一下你能走到哪一面?

互联网工程师必备的面试1000题

而且从上面三家来看,算法与数据结构是必备不可少的呀,因此我建议大家可以去刷刷这本左程云大佬著作的《程序员代码面试指南 IT名企算法与数据结构题目最优解》,里面近200道真实出现过的经典代码面试题

最新“美团+字节+腾讯”一二三面问题,挑战一下你能走到哪一面?

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

user) {

return userDao.getUser(user);

}

}

创建启动类和junit测试类

package com.feng;

import org.springframework.boot.SpringApplication;

@SpringBootApplication

public class SpringBootWebApplication {

public static void main(String[] args){

SpringApplication.run(SpringBootWebApplication.class, args);

}

}

最后

看完美团、字节、腾讯这三家的面试问题,是不是感觉问的特别多,可能咱们又得开启面试造火箭、工作拧螺丝的模式去准备下一次的面试了。

开篇有提及我可是足足背下了1000道题目,多少还是有点用的呢,我看了下,上面这些问题大部分都能从我背的题里找到的,所以今天给大家分享一下互联网工程师必备的面试1000题

注意不论是我说的互联网面试1000题,还是后面提及的算法与数据结构、设计模式以及更多的Java学习笔记等,皆可分享给各位朋友

[外链图片转存中…(img-eMJEVJFF-1715649620391)]

互联网工程师必备的面试1000题

而且从上面三家来看,算法与数据结构是必备不可少的呀,因此我建议大家可以去刷刷这本左程云大佬著作的《程序员代码面试指南 IT名企算法与数据结构题目最优解》,里面近200道真实出现过的经典代码面试题

[外链图片转存中…(img-UXfTtoql-1715649620392)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值