标签:prim arraylist spl leo prefix 代码生成器 rgs start 父类
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
使用mysql数据库创建数据,执行脚本如下:
create database test; use test; DROP TABLE IF EXISTS user; CREATE TABLE user ( id BIGINT(20) NOT NULL COMMENT ‘主键ID‘, name VARCHAR(30) NULL DEFAULT NULL COMMENT ‘姓名‘, age INT(11) NULL DEFAULT NULL COMMENT ‘年龄‘, email VARCHAR(50) NULL DEFAULT NULL COMMENT ‘邮箱‘, PRIMARY KEY (id) ); DELETE FROM user; INSERT INTO user (id, name, age, email) VALUES (1, ‘Jone‘, 18, ‘test1@baomidou.com‘), (2, ‘Jack‘, 20, ‘test2@baomidou.com‘), (3, ‘Tom‘, 28, ‘test3@baomidou.com‘), (4, ‘Sandy‘, 21, ‘test4@baomidou.com‘), (5, ‘Billie‘, 24, ‘test5@baomidou.com‘);
1)新建一个SpringBoot的项目,导入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--mysql数据库依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.9</version> </dependency> <!--lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.8</version> </dependency>
2)yml配置
#数据源配置 spring: datasource: #使用阿里巴巴的druid type: com.alibaba.druid.pool.DruidDataSource #配置数据库的路径和用户名密码 url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true username: root password: 123456
2.3引入mybatis-plus开发
1)导入依赖
<!--mybatis-plus--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.3.1.tmp</version> </dependency>
2)创建实体类
package com.zys.mybatisplusdemo.entity; import lombok.Data; @Data public class User { private Long id; private String name; private Integer age; private String email; private String aaa; }
3)创建dao继承BaseMapper
package com.zys.mybatisplusdemo.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.zys.mybatisplusdemo.entity.User; public interface UserDao extends BaseMapper<User> { }
4)在启动类上加mapper扫描
@SpringBootApplication @MapperScan("com.zys.mybatisplusdemo.dao") public class MybatisPlusDemoApplication { public static void main(String[] args) { SpringApplication.run(MybatisPlusDemoApplication.class, args); } }
5)创建controller
package com.zys.mybatisplusdemo.controller; import com.zys.mybatisplusdemo.dao.UserDao; import com.zys.mybatisplusdemo.entity.User; 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.RestController; import java.util.List; /** * @Aauthor yushizhong * @Date 2020/5/17 10:19 * @Dec */ @RestController @RequestMapping("/users") public class UserController { @Autowired private UserDao userDao; @GetMapping("/list") public List<User> userList(){ List<User> users = userDao.selectList(null); return users; } }
6)测试
启动项目,访问http://localhost:8080/users/list即可看到所有的数据。
其用来将实体对象与数据库表名进行对应。当实体名与数据库表名不一致时使用。
其是主键注解,指明是主键,默认把id作为主键。属性type用来指定类型,值为IdType.AUTO是自动增长;IdType.ASSIGN_UUID是uuid,要使用接口IdentifierGenerator
的方法nextUUID.
其是表的其他字段注解。属性exist用来指明是否是数据库的字段,值为false时不映射数据库表字段。
1)首先将数据库中表名改为t_user,然后实体User加上注解@TableName
@Data @TableName(value = "t_user") public class User { ...... }
启动项目,访问http://localhost:8080/users/list可以正常返回数据。
2)将数据库中表t_user的字段id改为t_id,然后修改实体User的属性id并设置自动增长
@Data @TableName(value = "t_user") public class User { //指定自动增长 @TableId(value = "t_id",type = IdType.AUTO) private Long id; ...... }
3)将数据表t_user的字段name改为t_name,然后修改实体User的属性name
@TableField(value = "t_name") private String name;
4)在实体User上添加一个属性,设置不作为数据库的字段
//不映射数据库表字段 @TableField(exist = false) private String aaa;
启动项目,同上进行访问,数据正常返回。在实际开发过程中,可根据需求使用注解。
方法 | 说明 | 示例 |
eq | 等于 |
|
allEq | 全等于 | eq("name", "老王") --->name = ‘老王‘ |
ne | 不等于 | ne("name", "老王") --->name <> ‘老王‘ |
gt | 大于 | gt("age", 18) --->age > 18 |
ge | 大于等于 | ge("age", 18) --->age >= 18 |
lt | 小于 | lt("age", 18) --->age < 18 |
le | 小于等于 | le("age", 18) --->age <= 18 |
between | BETWEEN 值1 AND 值2 | between("age", 18, 30) --->age between 18 and 30 |
notBetween | NOT BETWEEN 值1 AND 值2 | notBetween("age", 18, 30) --->age not between 18 and 30 |
like | LIKE ‘%值%‘ |
|
notLike | NOT LIKE ‘%值%‘ | notLike("name", "王") --->name not like ‘%王%‘ |
likeLeft | LIKE ‘%值‘ | likeLeft("name", "王") --->name like ‘%王‘ |
likeRight | LIKE ‘值%‘ | likeRight("name", "王") --->name like ‘王%‘ |
isNull | 字段为null | isNull("name") --->name is null |
isNotNull | 字段不为null | isNotNull("name") --->name is not null |
in | 同数据库in | in("age",{1,2,3}) --->age in (1,2,3) |
notIn | 同数据库not in | notIn("age",{1,2,3}) --->age not in (1,2,3) |
inSql | 相当于子查询和in |
|
notInSql | 相当于子查询和not in |
|
groupBy | 同数据库group by | groupBy("id", "name") --->group by id,name |
orderBy/orderByDesc | 同数据库order by 字段/order by 字段 desc | orderBy("id") --->order by id ASC |
having | 同数据库having | having("sum(age) > 10") --->having sum(age) > 10 |
or/and | 同数据库or/and | 略 |
netsted | 正常嵌套 不带 AND 或者 OR |
|
apply | 字符串拼接 |
|
last | 拼接在最后,谨慎使用 | last("limit 1")---> limit 1 |
exists/notExists | 拼接sql | exists("select id from table where age = 1") --->exists (select id from table where age = 1) |
select | 指定要查询的字段 |
|
set | 全局修改 | set("name", "") --->数据库字段值变为空字符串 |
只进行简单的介绍,具体需求请自行查看文档。
@PostMapping("/") public String save(User user){ int count = userDao.insert(user); if(count!=0){ return "添加成功"; }else{ return "添加失败"; } }
根据主键删除
@DeleteMapping("/{id}") public String delete(@PathVariable("id")long id){ int count = userDao.deleteById(id); if(count!=0){ return "删除成功"; }else{ return "删除失败"; } }
根据id进行修改
@PutMapping("/") public String update(User user){ int count = userDao.updateById(user); if(count!=0){ return "修改成功"; }else{ return "修改失败"; } }
在入门时,controller中设置的查询条件是null,实际上里面需要传递一个QueryWrapper<T>类型的对象,调用dao的selectList(),此对象中才有上面的那些方法。
1)查询年龄大于等于24的信息
@GetMapping("/list")
public List<User> userList(){
QueryWrapper<User> queryWrapper=new QueryWrapper<>();
//设置查询条件
queryWrapper.ge("age",24);//查询年龄大于等于24的信息
List<User> users = userDao.selectList(queryWrapper);
return users;
}
2)查询名字中含有‘o’的信息
queryWrapper.like("name","o");
根据主键查询
@GetMapping("/{id}")
public User selectById(@PathVariable("id")long id){
return userDao.selectById(id);
}
查询符合条件的条数,一般和selectList结合使用。
@GetMapping("/list")
public Map<String,Object> userList(){
QueryWrapper<User> queryWrapper=new QueryWrapper<>();
//设置查询条件
queryWrapper.like("name","o");
List<User> users = userDao.selectList(queryWrapper);
Integer integer = userDao.selectCount(queryWrapper);
Map<String,Object> map=new HashMap<>();
map.put("data",users);
map.put("total",integer);
return map;
}
目前分页插件仅支持单表查询。
1)分页插件配置
package com.zys.mybatisplusdemo.config; import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.transaction.annotation.EnableTransactionManagement; /** * @Aauthor yushizhong * @Date 2020/5/17 16:19 * @Dec MybatisPlus分页配置 */ @EnableTransactionManagement @Configuration @MapperScan("com.zys.mybatisplusdemo.dao") public class MybatisPlusConfig { @Bean public PaginationInterceptor paginationInterceptor() { PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); return paginationInterceptor; } }
2)接口使用分页
@GetMapping("/list") public IPage<User> userList(Integer curr,Integer limit){ QueryWrapper<User> queryWrapper=new QueryWrapper<>(); //设置分页,默认值是1,10 IPage<User> page=new Page<>(curr,limit); IPage<User> user = userDao.selectPage(page, queryWrapper); return user; }
代码生成器自动生成包及需要的类名,节省开发的时间。前提是数据库中表已经建好,原因是它根据数据库表进行创建的。
首先导入依赖
<!--mybatis-plus代码生成器--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.3.1.tmp</version> </dependency> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.2</version> </dependency>
然后执行main方法
package com.zys.mybatisplusdemo.config; import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.baomidou.mybatisplus.generator.AutoGenerator; import com.baomidou.mybatisplus.generator.InjectionConfig; import com.baomidou.mybatisplus.generator.config.*; import com.baomidou.mybatisplus.generator.config.po.TableInfo; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine; import java.util.ArrayList; import java.util.List; /** * @Aauthor yushizhong * @Date 2020/5/17 16:45 * @Dec 代码生成器 */ public class CodeGenerator { public static void main(String[] args) { // 代码生成器 AutoGenerator map = new AutoGenerator(); // 全局配置 GlobalConfig globalConfig = new GlobalConfig(); //配置生成文件的输出目录 globalConfig.setOutputDir(System.getProperty("user.dir") + "/src/main/java"); //设置开发人员名称 globalConfig.setAuthor("yushizhong"); //是否打开输出目录 globalConfig.setOpen(false); //mapper 命名方式 globalConfig.setMapperName("%sDao"); //service 命名方式 globalConfig.setServiceName("%sService"); map.setGlobalConfig(globalConfig); //数据源配置 DataSourceConfig dataSourceConfig = new DataSourceConfig(); //数据库的路径 dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=CTT"); //数据库驱动名称 dataSourceConfig.setDriverName("com.mysql.jdbc.Driver"); //数据库的登录用户名 dataSourceConfig.setUsername("root"); //数据库的登录密码 dataSourceConfig.setPassword("123456"); map.setDataSource(dataSourceConfig); // 包配置 PackageConfig pc = new PackageConfig(); //设置父包名 pc.setParent("com.zys.mybatisplusdemo"); pc.setMapper("dao"); map.setPackageInfo(pc); // 自定义配置 InjectionConfig cfg = new InjectionConfig() { @Override public void initMap() { } }; String templatePath = "/templates/mapper.xml.vm"; // 自定义输出配置 List<FileOutConfig> focList = new ArrayList<>(); // 自定义配置会被优先输出 focList.add(new FileOutConfig(templatePath) { @Override public String outputFile(TableInfo tableInfo) { //设置xml的输出路径 return System.getProperty("user.dir") + "/src/main/resources/mapper/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML; } }); cfg.setFileOutConfigList(focList); map.setCfg(cfg); // 配置模板 TemplateConfig templateConfig = new TemplateConfig(); //在代码总不生成xml templateConfig.setXml(null); map.setTemplate(templateConfig); // 策略配置 StrategyConfig strategy = new StrategyConfig(); //数据库表映射到实体的命名策略:把下划线变成大写 strategy.setNaming(NamingStrategy.underline_to_camel); //数据库表字段映射到实体的命名策略:把下划线变成大写 strategy.setColumnNaming(NamingStrategy.underline_to_camel); //是否使用lombok strategy.setEntityLombokModel(true); strategy.setRestControllerStyle(true); // 写于父类中的公共字段 strategy.setSuperEntityColumns("id"); strategy.setControllerMappingHyphenStyle(true); //表前缀 strategy.setTablePrefix(pc.getModuleName() + "_"); map.setStrategy(strategy); //执行 map.execute(); } }
标签:prim arraylist spl leo prefix 代码生成器 rgs start 父类
原文地址:https://www.cnblogs.com/zys2019/p/12904848.html