创建一个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);
}
}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://img-blog.csdnimg.cn/img_convert/2fdf290502aaf6ff381d4f1148266f20.jpeg)
最后
由于篇幅有限,这里就不一一罗列了,20道常见面试题(含答案)+21条MySQL性能调优经验小编已整理成Word文档或PDF文档
还有更多面试复习笔记分享如下
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
tApplication
public class SpringBootWebApplication {
public static void main(String[] args){
SpringApplication.run(SpringBootWebApplication.class, args);
}
}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-Rs6JaZNM-1713414962307)]
[外链图片转存中…(img-Q9Iv81im-1713414962308)]
[外链图片转存中…(img-GfOHT77p-1713414962308)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://img-blog.csdnimg.cn/img_convert/2fdf290502aaf6ff381d4f1148266f20.jpeg)
最后
由于篇幅有限,这里就不一一罗列了,20道常见面试题(含答案)+21条MySQL性能调优经验小编已整理成Word文档或PDF文档
[外链图片转存中…(img-07Z49O2r-1713414962308)]
还有更多面试复习笔记分享如下
[外链图片转存中…(img-3PI4BXxl-1713414962308)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!