目录
一.数据库表设计
学生表student
列名 | 注释 |
id | 唯一标识 |
student_name | 学生姓名 |
课程表 Course
列名 | 注释 |
id | 位置标识 |
course_name | 课程名称 |
student_id | 学生id |
多对多 一对多
Course
import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @Data @TableName(value = "course") public class Course { private Integer cid; private String courseName; private Integer studentId; }
Student
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.util.List; @Data @TableName(value = "student") public class Student { private Integer id; private String studentName; //一对一 // @TableField(exist = false)表名 不该字段映射在数据库中, //忽略该字段,因为该字段不存在与数据库里,是我们编写出来的 //@TableField(exist = false) //private Course course; //一对多 @TableField(exist = false) private List<Course> courses; }
application.properties
# mysql 5 版本 com.mysql.jdbc.Driver # mysql 8 版本 com.mysql.cj.jdbc.Driver 区域时间 serverTimezone=GMT%2B8 spring.datasource.username=root spring.datasource.password=root spring.datasource.url=jdbc:mysql://localhost:3306/te?useUnicode=true&useSSL=false&characterEncoding=utf-8&serverTimezone=GMT%2B8 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # 日志 mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl # 逻辑删除 mybatis-plus.global-config.db-config.logic-delete-value=1 mybatis-plus.global-config.db-config.logic-not-delete-value=0
依赖
<!-- 数据库驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.12</version> </dependency> <!-- lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <!-- mybatis-plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.0.5</version> </dependency> <!-- 代码自动生成器依赖 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.0.5</version> </dependency> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency>
自动生成代码块 设置了之后就能自动生成底层模块 如 controller , service , entity
package com.example.demo.code; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException; import com.baomidou.mybatisplus.generator.AutoGenerator; import com.baomidou.mybatisplus.generator.config.DataSourceConfig; import com.baomidou.mybatisplus.generator.config.GlobalConfig; import com.baomidou.mybatisplus.generator.config.PackageConfig; import com.baomidou.mybatisplus.generator.config.StrategyConfig; import com.baomidou.mybatisplus.generator.config.po.TableFill; import com.baomidou.mybatisplus.generator.config.rules.DateType; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; import org.junit.platform.commons.util.StringUtils; import java.util.ArrayList; import java.util.Scanner; public class CodeGenerator { public static String scanner(String tip){ Scanner scanner = new Scanner(System.in); StringBuilder help = new StringBuilder(); help.append("请输入"+tip+":"); System.out.println(help); if (scanner.hasNext()){ String next = scanner.next(); // StringUtils只能在text中才有,否则在Java包中会显示不出来 if (StringUtils.isNotBlank(next)){ return next; } } throw new MybatisPlusException("请输入正确的"+tip+":") ; } public static void main(String[] args) { //代码生成器 AutoGenerator autoGenerator = new AutoGenerator(); //全局配置 GlobalConfig gc = new GlobalConfig(); String property = System.getProperty("user.dir"); gc.setOutputDir(property+"/src/main/java"); //设置代码生成路径 gc.setFileOverride(true); // 是否覆盖以前文件 gc.setOpen(false); // 是否打开生成目录 gc.setAuthor("FBI");// 设置项目作者名称 gc.setIdType(IdType.AUTO);//设置主键策略 gc.setBaseResultMap(true); // 生成基本ResulMap gc.setBaseColumnList(true);//生成基本ColumnList gc.setServiceName("%sService");//去掉服务默认前缀 gc.setDateType(DateType.ONLY_DATE); //设置时间类型 autoGenerator.setGlobalConfig(gc); //配置数据源 DataSourceConfig dataSourceConfig = new DataSourceConfig(); dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/mybatis-plus?useUnicode=true&useSSL=false&characterEncoding=utf-8&serverTimezone=GMT%2B8"); dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver"); dataSourceConfig.setUsername("root"); dataSourceConfig.setPassword("root"); autoGenerator.setDataSource(dataSourceConfig); //包配置 PackageConfig packageConfig = new PackageConfig(); packageConfig.setParent("com.example.demo"); packageConfig.setMapper("mapper"); packageConfig.setXml("mapper.xml"); packageConfig.setEntity("entity"); packageConfig.setService("service"); packageConfig.setServiceImpl("service.Impl"); packageConfig.setController("controller"); autoGenerator.setPackageInfo(packageConfig); // 策略设置 StrategyConfig strategyConfig = new StrategyConfig(); // 将表名设置为驼峰命名 strategyConfig.setNaming(NamingStrategy.underline_to_camel); // 将实体设置为驼峰命名 strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel); // 实体类是否会自动生成lombok注解 strategyConfig.setEntityLombokModel(true); // 在controller中使用rest风格 strategyConfig.setRestControllerStyle(true); // 设置为true时,controller类中的mapping路径会使用连字符分割 strategyConfig.setControllerMappingHyphenStyle(true); // 指定逻辑删除的字段 strategyConfig.setLogicDeleteFieldName("delete"); // 乐观锁 strategyConfig.setVersionFieldName("version"); //设置表名前缀 strategyConfig.setInclude(scanner("表名, 多个英文逗号隔开").split(",")); //设置自动填充配置 TableFill createTime = new TableFill("create_time", FieldFill.INSERT); TableFill updateTime = new TableFill("update_time", FieldFill.INSERT_UPDATE); ArrayList<TableFill> objects = new ArrayList<>(); objects.add(createTime); objects.add(updateTime); strategyConfig.setTableFillList(objects); autoGenerator.setStrategy(strategyConfig); autoGenerator.execute(); } }
数据库的curd
package com.yixin; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.sun.org.apache.bcel.internal.generic.NEW; import com.yixin.pojo.User; import com.yixin.service.UserService; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.DirtiesContext; import java.util.ArrayList; import java.util.List; @SpringBootTest class Demo1ApplicationTests { @Autowired private UserService userService; // 插入一条数据 @Test void contextLoads() { User user = new User(); user.setAge(12); user.setName("ss"); boolean save = userService.save(user); System.out.println("1111111111:"+save); } // 批量插入 @Test void context(){ ArrayList<User> objects = new ArrayList<>(); User user = new User(); user.setName("lios"); user.setAge(56); User user1 = new User(); user1.setName("s"); user1.setAge(23); objects.add(user); objects.add(user1); boolean b = userService.saveBatch(objects); System.out.println( b ); } // 插入一条数据,如果这条数据在数据库中存在,那么进行更新操作,如果不存在则进行插入操作 @Test void context1(){ ArrayList<User> objects = new ArrayList<>(); User user = new User(); user.setId(1L); user.setName("历来"); user.setAge(2); objects.add(user); boolean b = userService.saveOrUpdateBatch(objects,200); System.out.println(b); } // 删除 @Test void context2(){ // QueryWrapper 这是查询语句,相等于select * from 表名 QueryWrapper<User> user = new QueryWrapper<>(); user.like("name","历"); boolean remove = userService.remove(user); System.out.println(remove); } // 更新 @Test void context3(){ QueryWrapper<User> user = new QueryWrapper<>(); user.eq("name","los"); // getOne 是service中的Iservice中的方法用来返回只有一条数据 User one = userService.getOne(user); one.setName("你是谁"); boolean b = userService.updateById(one); System.out.println(b); } // 查询 @Test void context4(){ QueryWrapper<User> user = new QueryWrapper<>(); user.like("name","ss"); List one = userService.list(user); System.out.println( one ); } }