报错见标题,但同时,数据表也会丢失,网上查到的方法都是让把数据表主键改成自增,但是问题并没有解决,运行程序后数据表还是会丢失,检查配置文件发现,配置了如下信息:hibernate.hbm2ddl.auto=create-dropcreate-dropcreate-drop百度搜索发现,这玩意其实这个hibernate.hbm2ddl.auto参数的作用主要用于:自动创建|更新|验证数据库表结构。如果不是此方面的需求建议setvalue="none"。create:每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。create-drop:每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。update:最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等应用第一次运行起来后才会。validate:每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。再说点“废话”:当我们把hibernate.hbm2ddl.auto=create时hibernate先用hbm2ddl来生成数据库schema。当我们把hibernate.cfg.xml文件中hbm2ddl属性注释掉,这样我们就取消了在启动时用hbm2ddl来生成数据库schema。通常只有在不断重复进行单元测试的时候才需要打开它,但再次运行hbm2ddl会把你保存的一切都删除掉(drop)----create配置的含义是:“在创建SessionFactory的时候,从scema中drop掉所以的表,再重新创建它们”。注意,很多Hibernate新手在这一步会失败,我们不时看到关于Tablenotfound错误信息的提问。但是,只要你根据上面描述的步骤来执行,就不会有这个问题,因为hbm2ddl会在第一次运行的时候创建数据库schema,后续的应用程序重启后还能继续使用这个schema。假若你修改了映射,或者修改了数据库schema,你必须把hbm2ddl重新打开一次。于是乎,注释掉这玩意就好了。部分转载自https://www.cnblogs.com/feilong3540717/archive/2011/12/19/2293038.html
application类的注解SpringBootApplication相当于下面这一堆注解的效果,其中一个注解就是@Component,在默认情况下只能扫描与控制器在同一个包下以及其子包下的@Component注解,以及能将指定注解的类自动注册为Bean的@Service@Controller和@Repository,至此明白问题所在,之前我将接口与对应实现类放在了与控制器所在包的同一级目录下,这样的注解自然是无法被识别的至此,得出两种解决办法:1.将接口与对应的实现类放在与application启动类的同一个目录或者他的子目录下,这样注解可以被扫描到,这是最省事的办法2.在指定的application类上加上这么一行注解,手动指定application类要扫描哪些包下的注解,见下图@SpringBootApplication@ComponentScan(basePackages={"com.example.demo.Dao"})publicclassDemoApplication{另外如果你看了19年左右的网上的教程可能会让你用@MapperScan这个注解,但是这个注解好像已经被pass了,反正我没找到//////////////////如果你看到了这,证明你可能和我一样没有导入<groupId>org.mybatis.spring.boot</groupId>这个jar包,所以上面的所有操作都是错的,你只需要导入这个jar包即可。