1、Could not autowire. No beans of 'UserMapper' type found.
解:对应的mapper接口写@Repository
@Repository // 代表持久层
public interface UserMapper extends BaseMapper<User> {
// 所有的CRUD操作都已经编写完成了
// 你不需要像以前的配置一大堆文件了!
}
2、Error querying database. Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: The SQL execution time is too large, please optimize !
解:mybatisplus的性能分析拦截器,用于输出每条 SQL 语句及其执行时间,在MyBatisPlusConfig中修改参数:maxTime,它是 SQL 执行最大时长,超过自动停止运行
/**
* SQL执行效率插件
*/
@Bean
@Profile({"dev","test"})// 设置 dev test 环境开启,保证我们的效率
public PerformanceInterceptor performanceInterceptor() {
PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
performanceInterceptor.setMaxTime(800); //ms 设置sql执行的最大时间,如果超过了则不执行
performanceInterceptor.setFormat(true);
return performanceInterceptor;
}
3、Error attempting to get column 'create_time' from result set. Cause: java.sql.SQLException: Zero date value prohibited(0000-00-00 00:00:00)
解:在数据源源配置(application.properties)中的spring.datasource.url末尾添加: &zeroDateTimeBehavior=convertToNull
# 数据库连接配置
spring.datasource.username=root
spring.datasource.password=199829.
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
4、数据库不能设计表的datetime字段的默认值为CURRENT_TIMRSTAMP,可以考虑将datetime改为timestamp,并且可能需要在my.ini配置文件中添加sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
character-set-server=utf8
bind-address = 0.0.0.0
port = 3306
basedir=D:\MySQL\mysql-5.7.29-winx64
datadir=D:\MySQL\mysql-5.7.29-winx64\data
max_connections=2000
default-storage-engine=INNODB
[mysql]
default-character-set=utf8
[mysql.server]
default-character-set=utf8
[client]
default-character-set=utf8
5、@EnableTransactionManagement 这个注解是开启事务管理的,默认开启,可写可不写,相关链接:https://blog.csdn.net/qq_32370913/article/details/105924209
6、lombok的几个注解:
@Data:使用这个注解,就不用再去手写Getter,Setter,equals,canEqual,hasCode,toString等方法了,注解后在编译时会自动加进去。
@AllArgsConstructor:使用后添加一个有参构造函数
@NoArgsConstructor:使用后创建一个无参构造函数
@Builder:作用之一是为了解决在某个类有很多构造函数的情况,也省去写很多构造函数的麻烦,在设计模式中的思想是:用一个内部类去实例化一个对象,避免一个类出现过多构造函数
7、@Autowired与@Resource的区别:
@Autowired只按照byType 注入;
@Resource默认按byName自动注入,也提供按照byType 注入
详细点:
(1)@Autowired:按类型装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它required属性为false。
如果我们想使用按名称装配,可以让它结合@Qualifier注解一起使用。
(2)@Resource有两个中重要的属性:name和type。name属性指定byName,
如果没有指定name属性,当注解标注在字段上,即默认取字段的名称作为bean名称寻找依赖对象,
当注解标注在属性的setter方法上,即默认取属性名作为bean名称寻找依赖对象。
需要注意的是,@Resource如果没有指定name属性,并且按照默认的名称仍然找不到依赖对象时, @Resource注解会回退到按类型装配。但一旦指定了name属性,就只能按名称装配。
(3)@Resource装配顺序
1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
4. 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;
(4)5. 推荐使用@Resource注解在字段上,这样就不用写setter方法了.并且这个注解是属于J2EE的
作者:秦子轩
链接:https://www.zhihu.com/question/39356740/answer/1297401530
来源:知乎
8、Mybatis plus 中数据库中字段有SQL关键字的处理方法
mysql的数据表中有一个字段desc,如果使用mybatis plus来访问数据库,使用继承BaseMapper<>的方法。自己如果不书写xml,自动构成的sql会出错。(特殊字段需要转义,在实体类对应的属性上加@TableField("`属性名`"))
例:
@TableField("`desc`")
private String desc;
9、Mybatis的xml文件不支持注释,没用的代码一定要删掉噢
10、@Param与@RequestParam,形似意不同
@RequestParam 用于controller层
(1)解决前台参数名称与后台接收参数变量名称不一致的问题,等价于request.getParam
(2)可设置value:指定参数名 default:指定变量初始值 require(true默认/false):指定参数是否为必传
@Param 用于dao层
个人理解为修饰参数,使得mapper.xml中的参数与后台的参数对应上,也增强了可读性
如果两者参数名一致得话,spring会自动进行封装,不一致的时候就需要手动去使其对应上。
@Param是mybatis中的注解,用注解来简化xml配置的时候,@Param注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中