1.安装IDEA
2.安装JDK
3.安装mysql
4.配置Mean仓库
添加项目依赖,此处添加三个依赖,Web,Mysql ,Mybatis。(也可不选,等项目创建完后,再往pom.xml里添加相应的依赖即可。点击next。
org.springframework.boot
spring-boot-starter-web
mysql
mysql-connector-java
5.1.30
compile
org.springframework.boot
spring-boot-starter-test
test
org.mybatis.spring.boot
mybatis-spring-boot-starter
2.1.3
对Maven仓库进行配置。点击左上角的File,选择菜单里的Settings选项。可直接搜索Maven,直接点击,不用打开子目录。右边即会展示如图配置项Maven仓库的默认配置都是在C盘的用户目录下,建议更换位置。勾选图中圈出的Override,再点击旁边的文件夹,就能对配置文件的位置进行修改了。
建议先行创建文件夹,在D盘创建了一个Maven文件夹,并将配置文件settings.xml(下文有代码)放于该目录下,并在该目录下(与settings.xml同级)创建文件夹repository(以后的依赖都会存放于此),点。
settings.xml的代码:
alimaven
aliyun maven
http://maven.aliyun.com/nexus/content/groups/public/
central
在resources文件夹下建立config文件夹,存放mybatis的配置文件 mybatis-config.xml,(地址报红可暂且不管。后面引入MyBatis依赖即可解决)代码如下:
可将application.properties文件改成application.yml文件,代码如下:
# 配置端口
server:
port: 8081
# 连接数据库
spring:
datasource:
url: jdbc:mysql://localhost:3306/test?useSSL=false&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
password: 123456
username: root
driver-class-name: com.mysql.jdbc.Driver
# mybatis环境配置
mybatis:
config-location: classpath:config/mybatis-config.xml
mapper-locations: classpath:mapper/*.xml
11.运行启动类TestApplication,如图点击左上角(有些IDEA版本在右上角)的箭头;或者进入启动类TestApplication里,点击绿色的三角形里的绿色三角形run。成功启动项目控制台会有如下信息(JVM running for…).
1.在test包下,创建4个包(与启动类TestApplication同级),分别是controller,dao,entity,还有service。
选中test文件夹,鼠标右键,选择new列表下的Packeage,
鼠标右键service包,在此包下再创建一个impl包,存放service实现类。
2.在resources目录下,再新建一个mapper文件夹,并创建TestMapper.xml,代码如下:
3.在entity包下创建实体类User,代码如下:
package com.demo.test.entity;
public class User {
private Integer id;
private String username;
private String password;
private Integer age;
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 Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", age=" + age +
'}';
}
}
4.在dao包下创建UserDao接口,代码如下:
package com.demo.test.dao;
import com.demo.test.entity.User;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;
//Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注
@Component
public interface UserDao {
//获取指定id 的用户
User findById(@Param("id")String id);
//原始登录
String login(@Param("username")String username);
}
5.在service包下创建UserService接口,代码如下:
package com.demo.test.service;
import com.demo.test.entity.User;
public interface UserService {
User findById(String id);
String login(String username);
}
6.在service包下的impl包下,创建UserServiceImpl实现类,代码如下:
package com.demo.test.service.impl;
import com.demo.test.dao.UserDao;
import com.demo.test.entity.User;
import com.demo.test.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
//Service注解,将自动注册到Spring容器,不需要再在applicationContext.xml文件定义bean了.一般用于service层的实现类
// 类似的还包括@Component、@Repository、@Controller。
@Service
public class UserServiceImpl implements UserService {
//@Autowired是一种注解,可以对成员变量、方法和构造函数进行标注,来完成自动装配的工作
@Autowired
private UserDao userDao;
//获取指定id 的用户
//Override下面的方法名是否是你父类中所有的,如果没有则报错。
@Override
public User findById(String id) {
return userDao.findById(id);
}
//原始登录
@Override
public String login(String username) {
return userDao.login(username);
}
}
7.在controller包下,创建TestController,代码如下:
package com.demo.test.controller;
import com.demo.test.entity.User;
import com.demo.test.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.json.MappingJackson2JsonView;
import java.util.Map;
@RestController //@Controller+@ResponseBody,就不能返回jsp,html页面
@RequestMapping("/user") //将HTTP请求映射给controller,即请求路径
public class UserController {
@Autowired
private UserService userService;
//获取指定id的用户信息
@GetMapping("/test") //等价于@RequestMapping的GET请求方式,@RequestParam将请求参数绑定到你控制器的方法参数上
public User findUser(@RequestParam(value = "id") String id){
return userService.findById(id);
}
//原始登录接口
@RequestMapping(value = "login")
//使用ModelAndView类用来存储处理完后的结果数据,以及显示该数据的视图。
//Map是一个接口,即Interface Map,其中K-key类型和V-value的类型
public ModelAndView login(@RequestParam Map map){
String username = (String) map.get("name");
String password = (String) map.get("pass");
System.out.println("前端发来用户信息,用户名:"+username+"——密码:"+password);
String result = userService.login(username);
if (password.equals(result)){
map.put("code",200);
map.put("massage","成功接收数据");
}
else {
map.put("code",201);
map.put("massage","密码错误");
}
return new ModelAndView(new MappingJackson2JsonView(),map);
}
}
8.最后,在启动类TestApplication中,添加上注解扫描@MapperScan(“com.demo.test.dao”),然后启动。
9.项目成功启动后,打开浏览器,输入地址:
http://localhost:8080/user/login?name=zhangsan&pass=123456(name和pass为数据库的数据)
package com.demo.test.entity;
public class CommonResult {
private Integer code;
private String massage;
private T data;
public CommonResult(Integer code,String massage){
this(code,massage,null);
}
public CommonResult(Integer code, String massage, T data) {
this.code = code;
this.massage = massage;
this.data = data;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMassage() {
return massage;
}
public void setMassage(String massage) {
this.massage = massage;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
@Override
public String toString() {
return "CommonResult{" +
"code=" + code +
", massage='" + massage + '\'' +
", data=" + data +
'}';
}
}
2,建完CommonResult实体类后,修改原本的controller层,应用此实体类作为返回类型,只修改了findUser方法的代码,代码如下:
package com.demo.test.controller;
import com.demo.test.entity.CommonResult;
import com.demo.test.entity.User;
import com.demo.test.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.json.MappingJackson2JsonView;
import java.util.Map;
@RestController //@Controller+@ResponseBody,就不能返回jsp,html页面
@RequestMapping("/user") //将HTTP请求映射给controller,即请求路径
public class UserController {
@Autowired
private UserService userService;
//获取指定id的用户信息
@GetMapping("/test") //等价于@RequestMapping的GET请求方式,@RequestParam将请求参数绑定到你控制器的方法参数上
public CommonResult findUser(@RequestParam(value = "id") String id){
CommonResult commonResult = new CommonResult(200,"查询成功", userService.findById(id));
return commonResult;
}
//原始登录接口
@RequestMapping(value = "login")
//使用ModelAndView类用来存储处理完后的结果数据,以及显示该数据的视图。
//Map是一个接口,即Interface Map,其中K-key类型和V-value的类型
public ModelAndView login(@RequestParam Map map){
String username = (String) map.get("name");
String password = (String) map.get("pass");
System.out.println("前端发来用户信息,用户名:"+username+"——密码:"+password);
String result = userService.login(username);
if (password.equals(result)){
map.put("code",200);
map.put("massage","成功接收数据");
}
else {
map.put("code",201);
map.put("massage","密码错误");
}
return new ModelAndView(new MappingJackson2JsonView(),map);
}
}
将mybatis替换成mybtis-plus。
1.MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
2.将pom.xml文件里的mybatis依赖,更换成mybatis-plus
com.baomidou
mybatis-plus-boot-starter
3.4.1
完整pom.xml
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.4.0
com.demo
test
0.0.1-SNAPSHOT
test
Demo project for Spring Boot
1.8
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-web
mysql
mysql-connector-java
8.0.25
compile
org.springframework.boot
spring-boot-starter-test
test
com.baomidou
mybatis-plus-boot-starter
3.4.1
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-starter-thymeleaf
org.springframework.boot
spring-boot-maven-plugin
2.将application.yml文件里的mybatis头改成mybatis-plus,如图,只改图中红线一处,其余无需更改
3.新建一个config文件夹,存放MybatisPlusConfig文件(分页插件配置,不做分页可不加)
package com.demo.test.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MybatisPlusConfig {
/**
* 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));
return interceptor;
}
@Bean
public ConfigurationCustomizer configurationCustomizer() {
return configuration -> configuration.setUseDeprecatedExecutor(false);
}
}
4.在UserDao接口类中,继承BaseMapper,普通增删查改都无需再写接口
5.测试
打开最下方的Test文件,找到TestApplicationTests,进行测试
代码入下:
package com.demo.test;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.demo.test.dao.UserDao;
import com.demo.test.entity.User;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
import java.util.Map;
@SpringBootTest
class TestApplicationTests {
@Autowired
private UserDao userDao;
@Test
void contextLoads() {
// 根据 ID 查询
User user = userDao.findById("1");
System.out.println("对应id的用户为:"+user);
//分页、条件、模糊查询
Page page = new Page<>(1, 5);
page.addOrder(OrderItem.asc("age"));
Page userIPage = userDao.selectPage(page, Wrappers.lambdaQuery().eq(User::getAge, 11).like(User::getUsername, "A"));
Assertions.assertThat(page).isSameAs(userIPage);
System.out.println("总条数 -------------> {}"+userIPage.getTotal());
System.out.println("当前页数 --- -------------> {}"+userIPage.getCurrent());
System.out.println("当前每页显示数 -----------> {}"+userIPage.getSize());
List records = userIPage.getRecords();
Assertions.assertThat(records).isNotEmpty();
System.out.println(records);
}
}
1.Dao层继承BaseMapper后,不进行复杂的操作,都可以不管了
2.在service层写上接口方法
// 分页查询
IPage selectPage(IPage page, @Param("ew") Wrapper queryWrapper);
3.在impl中实现方法
//分页条件查询
@Override
public IPage selectPage(IPage page, Wrapper queryWrapper) {
return userDao.selectPage(page,queryWrapper);
}
4.在controller中写入
//分页条件查询,按年龄查询,按用户名模糊查询都是可选参数
@PostMapping("/selectPage") //等价于@RequestMapping的GET请求方式,@RequestParam将请求参数绑定到你控制器的方法参数上
public CommonResult selectPage(@RequestParam(value = "pageSize") Integer pageSize,@RequestParam(value = "current") Integer current,
@RequestParam(value = "age",required=false) Integer age,@RequestParam(value = "username",required=false) String username){
Page page = new Page<>(current, pageSize);
QueryWrapper queryWrapper = new QueryWrapper<>();
if (age != null){
//不为空则加入条件
queryWrapper.eq("age",age); //按年龄查询
}
if (!StringUtils.isEmpty(username)){
//不为空则加入条件
queryWrapper.like("username",username); //按用户名模糊查询
}
CommonResult commonResult = new CommonResult(200,"查询成功", userService.selectPage(page,queryWrapper));
return commonResult;
}
在Apifox中http://localhost:8080/user/selectPage(Apifox可以下载电脑版,或者直接web版,web版要在浏览器中添加扩展程序插件)