张家界市建设工程造价管理站网站,网站技术解决方案的内容,做一款app要多少钱,整站优化排名MybatisPlus
MybatisPlus是在mybatis基础上的一个增强型工具。它对mybatis的一些操作进行了简化#xff0c;能够提高开发的效率。
springboot整合了mybatis之后#xff0c;其实已经非常方便了#xff0c;只需要导入mybatis的包后#xff0c;在配置文件中编写数据源信息能够提高开发的效率。
springboot整合了mybatis之后其实已经非常方便了只需要导入mybatis的包后在配置文件中编写数据源信息然后在数据层接口上添加Mapper注解。
但是现在还有一个不完美的地方数据层接口需要自己写方法并且需要写注解写sql语句。这些都是增删改查的sql其实重复性很大如果能够让框架负责这部分代码的生成就完美了。
MybatisPlus正是这样的一门技术。
1、MybatisPlus快速入门
去除mybatis的依赖转而导入MybatisPlus的依赖。
dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.5.4/version
/dependency然后将dao接口继承BaseMapper实体类。dao层接口不再需要写任何查询方法已经具有了增删改查的方法。 mp具有动态sql的功能。比方说updateById方法是传入一个实体类这个实体类中要有id信息会根据id去修改对应的记录。但是如果除了id以外其他属性不置任何值那么修改的记录不会有任何改变。如果除了id以外还有一个属性被set了假设总共有10个属性其他九个属性都是空的那么修改的记录只会修改被修改的那个值而不会改变其他属性。
2、标准数据层开发 标准分页功能制作 mp有一个分页拦截器专门用来做分页没有配置这个拦截器就没有分页功能配上了才有分页功能。
//当前页第1页每页条数2条
IPageBrand iPagenew Page(1,2);
brandDao.selectPage(iPage,null);
System.out.println(当前页iPage.getCurrent());
System.out.println(一页条数iPage.getSize());
System.out.println(一共多少页iPage.getPages());
System.out.println(一共多少条数据iPage.getTotal());
System.out.println(具体数据iPage.getRecords());条件查询
需要创建一个容器并填入查询条件然后交给数据层接口的方法进行查询。
QueryWrapperEmp wrapper new QueryWrapper();
wrapper.lambda().eq(Emp::getId, empId).eq(Emp::getEmpStatus, 1);
Emp emp empMapper.getOne(wrapper);动态条件查询
在条件中设置不为空或者不为null才能添加条件即可。
LambdaQueryWrapperEmp wrapper new LambdaQueryWrapperEmp().eq(!.equals(vo.getEmpEmail()), Emp::getEMail, vo.getEmpEmail()).eq(!.equals(vo.getEmpName()), Emp::getName, vo.getEmpName()).eq(!.equals(vo.getEmpPhone()), Emp::getMobilePhone, vo.getEmpPhone()).eq(!.equals(vo.getEmpPosition()), Emp::getPosition, vo.getEmpPosition()).eq(!.equals(vo.getStoreId()), Emp::getStoreId, vo.getStoreId()).eq(Emp::getUserId, userId);逻辑删除
逻辑删除并不是真的删除而是添加了一个表示删除的字段如果这个字段被标记为1就表示被删除如果这个字段被标记为0就表示不被删除。之后进行查询也是通过这个删除字段确定查询内容。 设置完逻辑删除字段以及加上注解之后接下来使用deleteById方法不会将记录删除只会将逻辑删除字段的值置为1。查询时也会默认自动加上逻辑删除字段的条件只会查询逻辑删除为1的内容。
如果有太多实体也可以在springboot的配置文件中添加全局配置将所有实体中的对应字段都设置为逻辑删除字段。实体中就不用加上注解了。 复杂逻辑查询
虽然mp主要是为了简化sql语句但是对于复杂的逻辑还是要写sql语句的。
所以仍然可以使用在接口中定义方法进行注解的方式查询仍然可以使用sql映射文件编写复杂的逻辑。
3、字段映射以及表名映射
这一部分主要是应用于实体类中的。
表名映射
在实体类名上方使用TableName(“数据库中的表名称”)来进行映射。
字段映射
在实体类的属性非主键上方使用TableField(字段名被查询时是否展示在表中是否存在)。
在实体类的属性主键上方使用TableId(字段名,typeid生成方式)。
id生成方式可以自己指定。具体有以下类型 注意选择雪花算法生成id类型要是long。不然存不下。
除了在注解中指定使用id生成策略以外可以使用在springboot的配置文件中设置全局配置 3、代码生成器
import com.baomidou.mybatisplus.annotation.DbType;
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.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.junit.Test;/*** author* since*/
public class CodeGenerator {Testpublic void run() {// 1、创建代码生成器AutoGenerator mpg new AutoGenerator();// 2、全局配置GlobalConfig gc new GlobalConfig();
// String projectPath System.getProperty(user.dir);//生成代码的位置gc.setOutputDir(目录);//gc.setOutputDir(D:\\IDEA2020\\Project\\2023fuchuang\\system\\intelligent_schedule_system-master\\service\\schedule_service /src/main/java);gc.setAuthor(作者名);gc.setOpen(false); //生成后是否打开资源管理器gc.setFileOverride(false); //重新生成时文件是否覆盖gc.setServiceName(%sService); //去掉Service接口的首字母Igc.setIdType(IdType.ID_WORKER_STR); //主键策略gc.setDateType(DateType.ONLY_DATE); //定义生成的实体类中日期类型gc.setSwagger2(true);//开启Swagger2模式mpg.setGlobalConfig(gc);// 3、数据源配置DataSourceConfig dsc new DataSourceConfig();dsc.setUrl(jdbc:mysql://localHost/iss_schedule?useSSLfalseserverTimezoneGMT%2B8characterEncodingutf8);dsc.setDriverName(com.mysql.cj.jdbc.Driver);dsc.setUsername(root);dsc.setPassword(123456);dsc.setDbType(DbType.MYSQL);mpg.setDataSource(dsc);// 4、包配置PackageConfig pc new PackageConfig();pc.setParent(com.iss);//包名pc.setModuleName(schedule); //包名pc.setController(controller);pc.setEntity(entity);pc.setService(service);pc.setMapper(mapper);mpg.setPackageInfo(pc);// 5、策略配置StrategyConfig strategy new StrategyConfig();//要生成的表strategy.setInclude(schedule_search);strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略strategy.setTablePrefix(pc.getModuleName() _); //生成实体时去掉表前缀strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略strategy.setEntityLombokModel(true); // lombok 模型 Accessors(chain true) setter链式操作strategy.setRestControllerStyle(true); //restful api风格控制器strategy.setControllerMappingHyphenStyle(true); //url中驼峰转连字符mpg.setStrategy(strategy);// 6、执行mpg.execute();}
}