目录
3、在edu.hou下新建TeacherApplication项目启动类。
4、在edu.hou下新建文件夹entity,在entity文件夹下建一个简单的Teacher类,主键。
5、在edu.hou下新建文件夹mapper,在mapper文件夹下建一个TeacherMapper类
6、在edu.hou下新建文件夹service,在service文件夹下建一个TeacherService接口
7、在Service中建impl文件夹,在文件夹里建立TeacherServiceImpl类,进行service的实现
8、在resources中建立application.properties,填入连接mysql信息,数据层开发
9、在edu.hou中建立文件夹config,config下建立MpConfig文件,里面包含逻辑删除、乐观锁拦截器、分页拦截器
10、在edu.hou下建立handler文件夹,handler下建立MpMetaObjectHandler文件
11、建立测试类,在test/java下建立edu.hou.test.TeacherTest。
本次实验建立Teacher数据库,对数据库进行增删改查操作。
一、建立SpringBoot项目
在IDEA中创建Maven项目,添加依赖等
1、idea中建立项目mp_test,pom中添加依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.11.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>edu.hou</groupId>
<artifactId>mp_test</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--lombok用来简化实体类-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
</project>
2、在edu.hou下新建controller文件夹,在controller文件夹下建一个简单的TeacherController类;(Controller类要添加@Controller注解,项目启动时,SpringBoot会自动扫描加载Controller)。本次实验没有用到。
package edu.hou.controller;
import org.springframework.web.bind.annotation.RestController;
//控制器
@RestController
public class TeacherController {
}
3、在edu.hou下新建TeacherApplication项目启动类。
package edu.hou;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class TeacherApplication {
public static void main(String[] args) throws Exception{
SpringApplication.run(TeacherApplication.class,args);
}
}
4、在edu.hou下新建文件夹entity,在entity文件夹下建一个简单的Teacher类,主键。
package edu.hou.entity;
//实体类
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.util.Date;
@Data
public class Teacher {
//ID_WORKER_STR 字符类型
//input 手动输入
@TableId(type = IdType.ID_WORKER_STR)
private String tid;
private String name;
private String gender;
private Integer age;
@TableField(fill=FieldFill.INSERT)
@TableLogic
private Integer deleted;//逻辑删除
@TableField(fill=FieldFill.INSERT)
@Version
private Integer version;//拦截器
@TableField(fill=FieldFill.INSERT)
private Date createTime;//创建时间
@TableField(fill=FieldFill.INSERT_UPDATE)
private Date updateTime;//修改时间
}
5、在edu.hou下新建文件夹mapper,在mapper文件夹下建一个TeacherMapper类
package edu.hou.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import edu.hou.entity.Teacher;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface TeacherMapper extends BaseMapper<Teacher> {
}
6、在edu.hou下新建文件夹service,在service文件夹下建一个TeacherService接口
package edu.hou.service;
import com.baomidou.mybatisplus.extension.service.IService;
import edu.hou.entity.Teacher;
public interface TeacherService extends IService<Teacher> {
}
7、在Service中建impl文件夹,在文件夹里建立TeacherServiceImpl类,进行service的实现
package edu.hou.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import edu.hou.entity.Teacher;
import edu.hou.mapper.TeacherMapper;
import edu.hou.service.TeacherService;
import org.springframework.stereotype.Service;
//service的实现
@Service
public class TeacherServiceImpl extends ServiceImpl<TeacherMapper, Teacher> implements TeacherService {
}
8、在resources中建立application.properties,填入连接mysql信息,数据层开发
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mp?useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
#mybatis??
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
9、在edu.hou中建立文件夹config,config下建立MpConfig文件,里面包含逻辑删除、乐观锁拦截器、分页拦截器
package edu.hou.config;
import com.baomidou.mybatisplus.core.injector.ISqlInjector;
import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@MapperScan(basePackages = "edu.hou.mapper")
public class MpConfig {
/*
实现逻辑删除
@return
*/
@Bean
public ISqlInjector sqlInjector(){
return new LogicSqlInjector();
}
/*
乐观锁拦截器
*/
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor(){
return new OptimisticLockerInterceptor();
}
/*
分页拦截器
*/
@Bean
public PaginationInterceptor paginationInterceptor(){
return new PaginationInterceptor();
}
}
10、在edu.hou下建立handler文件夹,handler下建立MpMetaObjectHandler文件
package edu.hou.handler;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class MpMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("createTime",new Date(),metaObject);
this.setFieldValByName("updateTime",new Date(),metaObject);
this.setFieldValByName("version",1,metaObject);
this.setFieldValByName("deleted",0,metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime",new Date(),metaObject);
}
}
11、建立测试类,在test/java下建立edu.hou.test.TeacherTest。
package edu.hou.test;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import edu.hou.entity.Teacher;
import edu.hou.service.TeacherService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
public class TeacherTest {
@Autowired
private TeacherService teacherService;
@Test
public void addTeacher(){
Teacher teacher = new Teacher();
//teacher.setTid("456"); //第四步时,id就可以自动生成了,无需手动输入
teacher.setName("yinzhen");
teacher.setGender("nan");
teacher.setAge(44);
teacherService.save(teacher);
}
//删除操作
@Test
public void removeTeacher(){
//删除的分类:1、物理删除。2、逻辑删除
teacherService.removeById("456");
}
//更新操作
@Test
public void updateTeacher(){
Teacher teacher = teacherService.getById("1543952160369205249");
teacher.setName("hongli");
teacherService.updateById(teacher);
}
//查询操作
@Test
public void selectTeacher(){
QueryWrapper wrapper = new QueryWrapper();
//eq:相等
wrapper.eq("age",21);
List<Teacher> list = teacherService.list(wrapper);
System.out.println(list);
}
//分页查询
@Test
public void pageTeacher(){
Page<Teacher> page = new Page<>(1,2); //第一页,每页有两个数据
teacherService.page(page,null);
List<Teacher> records = page.getRecords();
long total = page.getTotal();
boolean next = page.hasNext();
boolean previous = page.hasPrevious();
System.out.println(records);
System.out.println(next);
System.out.println(previous);
System.out.println(total);
}
}
12、在mysql中建立mp数据库,本次使用的navicat工具。
- 新建数据库mp,mp中建立teacher表
create table teacher(
tid char(18) PRIMARY key,
name varchar(20),
gender char(10),
age int
)
刚建立时只有id、name、gender、age。后面运行后会出现deleted、version、create_time、update_time
2、第8步时已经连接数据库,直接运行edu.hou.test.TeacherTest,需要哪一步时运行哪一步。