1.案例详解
首先在Navicat中创建一张表。
创建一个SpringBoot项目,在pom文件中添加相关依赖。
大部分依赖我们都是见过的,因为这里需要使用MP框架中的逆向工程生成代码,所以还需要一个模板引擎依赖。
<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> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> <version>5.1.9</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.0.5</version> </dependency> <!-- 模板引擎 --> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.0</version> </dependency>
在核心配置文件中添加数据库连接的相关信息。
#配置数据库的相关连接信息 spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/springdb?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8 spring.datasource.username=root spring.datasource.password=12345678 #配置对应的日志信息 mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
编写代码生成的核心类。
package com.szh.mybatisplus; import com.baomidou.mybatisplus.annotation.IdType; 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.rules.NamingStrategy; /** * */ public class AutoMapper { public static void main(String[] args) { //创建代码生成器 AutoGenerator ag=new AutoGenerator(); //设置全局配置 GlobalConfig gc=new GlobalConfig(); //设置代码的生成位置(磁盘目录) String path=System.getProperty("user.dir"); gc.setOutputDir(path + "/02-end/src/main/java"); //设置生成的作者 gc.setAuthor("张起灵-小哥"); //设置生成的类名 gc.setMapperName("%sMapper"); gc.setServiceName("%sService"); gc.setServiceImplName("%sServiceImpl"); gc.setControllerName("%sController"); //设置主键id的配置 gc.setIdType(IdType.AUTO); //将全局配置信息提交给代码生成器 ag.setGlobalConfig(gc); //设置数据源DataSource DataSourceConfig ds=new DataSourceConfig(); ds.setDriverName("com.mysql.jdbc.Driver"); ds.setUrl("jdbc:mysql://localhost:3306/springdb?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8"); ds.setUsername("root"); ds.setPassword("12345678"); //将数据源信息提交给代码生成器 ag.setDataSource(ds); //设置Package包 PackageConfig pc=new PackageConfig(); //设置生成的父级包、当前包 pc.setModuleName("exam"); pc.setParent("com.szh.mybatisplus"); //将包信息提交给代码生成器 ag.setPackageInfo(pc); //设置策略信息 StrategyConfig sc=new StrategyConfig(); //设置数据库表的命名规则:支持驼峰命名法 sc.setNaming(NamingStrategy.underline_to_camel); //设置数据库表中字段的命名规则,支持驼峰命名法 sc.setColumnNaming(NamingStrategy.underline_to_camel); //将策略信息提交给代码生成器 ag.setStrategy(sc); //执行代码的生成 ag.execute(); } }
运行上面这个核心主类。即可自动生成如下代码:👇👇👇
这里之所以生成了两个实体类,是因为我连接的数据库是springdb,在这个数据库中有两张表。
在编写测试代码之前,要记着在SpringBoot项目的启动入口类上,添加@MapperScan注解。
package com.szh.mybatisplus; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication @MapperScan(basePackages = "com.szh.mybatisplus.exam") public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
编写几个测试方法,测试一下我们生成的代码是否可以正常运行。(首先将需要用到的mapper接口注入到Spring容器中)
@Resource private StudentMapper studentMapper;
@Test void testInsertStudent() { Student student = new Student(); student.setName("张起灵"); student.setAge(18); student.setEmail("zql@sina.com"); student.setStatus(1); int rows=studentMapper.insert(student); System.out.println("insert的结果:" + rows); }
@Test void testSelectStudentById() { Student student=studentMapper.selectById(7); System.out.println("select的结果:" + student); }
@Test void testSelectStudent() { QueryWrapper<Student> qw=new QueryWrapper<>(); qw.lt("age",25); qw.isNotNull("email"); List<Student> studentList=studentMapper.selectList(qw); for (Student stu : studentList) { System.out.println("select的结果:" + stu); } }