《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!
创建一个maven项目,引入springboot
和springboot-mybatis
依赖。
pom.xml
org.springframework.boot
spring-boot-starter-parent
2.0.2.RELEASE
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
org.mybatis.spring.boot
mybatis-spring-boot-starter
2.0.1
mysql
mysql-connector-java
8.0.11
添加springboot配置文件,这里为了简单,不使用连接池。
application.yml
server:
port: 8001
spring:
application:
name: user-service
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/TEST_MS?serverTimezone=UTC
username: 用户名
password: 密码
mybatis:
typeAliasesPackage: com.feng.entity
mapperLocations: classpath:mybatis-mapper/*.xml
其中typeAliasesPackage
指定用于映射数据的pojo位置,mapperLocations
用于指定映射dao层的mapper文件,如果使用全注解方式开发的话可以省略。
先创建一个用于映射数据的pojo:User.java
package com.feng.entity;
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
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);
}
}
读者福利
由于篇幅过长,就不展示所有面试题了,感兴趣的小伙伴
更多笔记分享
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!
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);
}
}
读者福利
由于篇幅过长,就不展示所有面试题了,感兴趣的小伙伴
[外链图片转存中…(img-nD5Gi3p7-1714759278514)]
[外链图片转存中…(img-4ocf0eVL-1714759278515)]
[外链图片转存中…(img-HhLLSBJ8-1714759278515)]
更多笔记分享
[外链图片转存中…(img-zRjtJGwc-1714759278515)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!