目录
一、如何一步一步创建项目
二、如何解决无效的发源版本17/21
三、每个层之间怎样互相连接
四、如何根据数据库自动生成代码
五、mybatis-plus 分页查询 getTotal和getPages为0的问题解决
六、找不到mapper路径Invalid bound statement (not found): com.mxj.mapper.UserMapper.pageC
七、控制台报错,在分页时SQL自动添加了两个LIMIT
八、学会使用专业建模工具Power Designer
九、对于数据库中DATE类型的数据,使用sql进行置空:
十、使用postaman发送JSON数据,后台一直无法接受到,显示null
十一、RequestBody和ResponseBody有啥区别?
十二、如何将两个List快速合并为一个?
十三、总结:
1.创建
2.修改配置:进入settings -> maven -> maven runner
3.项目模块
请执行第一步的2,3操作
一般都会有四个包:entity(实体类:和数据库对应)
controller:(主要方法,调用service)
service:(调用mapper,先写接口XService,然后写它的实现方法XServiceImpl)
mapper(先在mapper中写接口,然后用mapperXML实现接口,就是具体的sql)
要想自动生成代码,首先需要在pom.xml中导入两个依赖:
com.baomidou
mybatis-plus-boot-starter
3.4.3.1
com.baomidou
mybatis-plus-generator
3.3.2
以下是具体的方法:
public class Main {
public static void main(String[] args) {
//代码生成器
AutoGenerator autoGenerator = new AutoGenerator();
DataSourceConfig dataSourceConfig = new DataSourceConfig();
dataSourceConfig.setDbType(DbType.MYSQL);
dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
dataSourceConfig.setUsername("root");
dataSourceConfig.setPassword("123456");
dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/mmall?useUnicode=true&characterEncoding=UTF-8");
autoGenerator.setDataSource(dataSourceConfig);
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setOpen(false);
globalConfig.setOutputDir(System.getProperty("user.dir")+"/src/main/java");
globalConfig.setAuthor("admin");
globalConfig.setServiceName("%sService");
autoGenerator.setGlobalConfig(globalConfig);
PackageConfig packageConfig = new PackageConfig();
packageConfig.setParent("com.mxj");
//注意:这里写你自己的路径
packageConfig.setEntity("entity");
packageConfig.setMapper("mapper");
packageConfig.setController("controller");
packageConfig.setService("service");
packageConfig.setServiceImpl("service.impl");
autoGenerator.setPackageInfo(packageConfig);
StrategyConfig strategyConfig = new StrategyConfig();
strategyConfig.setEntityLombokModel(true);
strategyConfig.setNaming(NamingStrategy.underline_to_camel);
//下划线转驼峰,用于数据库数据转java
strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);
List list = new ArrayList<>();
TableFill tableFill1 = new TableFill("create_time", FieldFill.INSERT);
TableFill tableFill2 = new TableFill("update_time",FieldFill.INSERT_UPDATE);
list.add(tableFill1);
list.add(tableFill2);
strategyConfig.setTableFillList(list);
autoGenerator.setStrategy(strategyConfig);
autoGenerator.execute();
}
}
自动生成的代码,需要在mapper.java类中添加@Mapper注解,否则核心类会报错,无法成功启动
需要config一下,官网中有具体的讲解,只需要自己新建一个类,将下面的代码粘过去就可以了。
记得写注解。一开始我忘记写注解找了很久,这都是很小的问题
@Configuration
public class MybatisPlusPageConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
//创建拦截器,对执行的sql进行拦截
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
//对Mysql拦截
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
在application.yml中添加注解:
注意:注解中写自己对应的路径
原因是因为springboot配置mysql的连接池太小了 频繁请求处理不了,建议开大连接池和线程处理数
解决:解决不了,
重新配了一个项目后,就好了。有其他的朋友,可以在评论区分享一下。
1.表和表之间有没有关系
关联关系一对多,需要在多个的表中,创建外键
2.需要在页面展示的数据有哪些,不需要显示但是不能少的有哪些(比如商品描述)
**这个挺无语的,没办法修改成空,只能复制插入一遍
1.在数据库中将这个字段的默认值设置为NULL
2.将这条记录查出来,然后插入一遍,插入时不要设置时间,就会使用默认的NULL了
select就不贴图了,我使用了QueyWrapper自带的select语句。
1.给方法的参数加上注解
1.@Responsebody 注解表示该方法的返回的结果直接写入 HTTP 响应正文(ResponseBody)中,一般在异步获取数据时使用;
通常是在使用 @RequestMapping 后,返回值通常解析为跳转路径,加上 @Responsebody 后返回结果不会被解析为跳转路径,而是直接写入HTTP 响应正文中。
2.@RequestBody是作用在形参列表上,用于将前台发送过来固定格式的数据【xml 格式或者 json等】封装为对应的 JavaBean 对象,封装时使用到的一个对象是系统默认配置的 HttpMessageConverter进行解析,然后封装到形参上。
在csdn可以学习其他人的写法,最常见的就是使用Stream流,我尝试这使用这种方法代码如下:
报错提示:类转换异常ClassCastException
解决方法:
使用Map进行数据存储,直接将list数据put进map中
结果:数据返回成功
我现在切实的是为自己学习,可以感受到每次学习到知识的喜悦。每解决一个问题都让我兴奋不已。我开窍太晚了,以前学习很机械,总是不过脑子。现在越来越有兴趣,我相信大家跟我一样,都会越来越好,要相信自己,坚持下去!