00:01
刚才呢,我们引入了数据库,连接了数据库到我们的环境当中,所以接下来呢,我们在引入我们的持久层开发my plus,并且呢,基于my plus来开发我们查询数据库的第一个接口,也就是商品列表接口,那我们先来引入和数据库和持久层相关的依赖,第一个依赖呢是买SQL驱动。那买circle呢?是被spring boot默认管理的,所以我们可以直接把它引进来。奶口驱动好,然后接下来呢,我们再引入我们的买贝斯plus。那我们引的版本呢,是3.3.1这个版本啊。My beattti。Plus是买bet的增强,也就是说它除了具有买be的功能之外呢,还对买be呢进行了增强,在做持久层的操作,这一方面呢,更为方便一些。
01:16
接下来呢,我们来引入数据库的配置,那么我们打开application email文件,在这个地方呢,定义我们的数据库连接,那数据库连接这块呢,我就不一行一行写了啊,所以呢,我们在spring这个节点下呢,再添加一个data source,那这面我们的数据库驱动,大家注意,因为我们在泡沫文件当中默认连接的是。八这个版本的驱动啊,而且呢,如果我们不写这个版本号的话,我们会发现这一面。其实默认连接的也是八这个版本的驱动,那八这个版本的驱动呢,默认情况下对应CG这样的一个驱动的名字,那如果这边你明确的定义了使用的是五。
02:06
啊,这个系列的版本的话。用的是五系列的版本,那么你要注意这面呢,就不需要用这个。CG啊,中间的这个报名了啊,所以他们是一定要严格对应的,否则的话,我们的应用程序是没有办法运行的。那所以这边我们再回来啊。这边我们把它删掉就可以了。好,这是我们引依赖的时候,大家要注意的地方。那依赖引进来了。配置文件配好了,那配置文件你配的时候呢,需要注意的就是这个数据库的名字,用户名以及密码,另外后面呢,我们是要设置时区的,然后呢要设置编码方案的,这样的话,我们连接数据库的时候呢,才不至于出现更多的问题。
03:02
然后我们就可以定义我们的实体类了,那我们的实体类呢,是针对我们的数据库的,所以呢,在资料里面已经给大家准备好了一些代码,那这些代码呢啊,都是我们基于数据库当中的那四张表,初始化的entity,以及所以呢,我们为了节省时间啊,我们就不一个一个创建了,我们把它整体呢拷贝过来。拷贝过来之后呢,我们来看一下,首先我们看entity entity里面呢,一共有五个类,这五个其中base entity是一个类,因为在我们的数据库当中,所有的表都有这三个字段,我们来看一下我们的数据库。Order info表有ID create time update time。所有的表都有这三个字段,所以那我们就创建一个父类来定义这三个字段,然后其他的类来继承这个父类就可以了。
04:08
另外呢,在我们的数据库当中。有缀能够一的对应,所以呢,我们要一个table来做表的映射。还有就是我们的表当中也有一些下划线字样的列名。这个total fe。和我们的order INF这个表当中的这个total费这一个列,他们两个呢,实际上是一个对应关系,但是你会发现呢,我们在这面并没有写一个类似于这样的注解啊,是因为在my plus当中,属性的名字和这面的这个列名是默认的驼峰和下划线这样的一个转换形式的话,那么这种映射关系呢,My be plus就会帮助我们自动的完成,那刚才我们看到的他们两个之间就不是自动的默认的转换关系,因为这边多一个T啊,如果没有这个T的话,那么他们两个就是默认的映射关系了,那么我们就不用配置这个T内了,所以这个地方呢,需要大家注意。
05:25
那这是我们的实体类,接下来呢,我们来看一下我们实体类当中呢,还有一个属性叫ID属性,那ID属性里面配了一个table ID注解,这个table ID解呢是MY当中给我们提供的,其中呢,后面这个属性定义的就是主策略,那所谓的主策略呢,就是以什么样的一个规则形式来生成我们的实体类的主。这个地方我们实体类的呢,是参考数据库当中的自动生成策略的,也就是说当前的这个类里面的ID要和我们数据库当中的ID采用相同的组件策略。
06:08
那么这个是我们的实体类这个包,接下来呢,我们来看一下map这个包,这个包里面呢,有两部分的内容,第一个呢是order in for。但是我们这个里面的接口呢。它和我们普通的持久层的接口呢,稍微有点不一样,因为它继承了base,而这个base它是来源于我们的已经好一个通,这个通里一的。我先把它都一下重新打开啊,我们来看一下这个。
07:00
这个被map里面呢,它定义了增删改查的方法,所以它会在项目运行的时候有反机制动态的去生成可以被调用的方法,那也就意味着这个地方其实我们只需要定义接口,那么base map里面的所有的增长改查的方法就都可以在运行的时候自动生成了,所以目前为止,虽然这个地方我们有一个XML文件,但是呢,我们XML文件里面呢,没有定义任何的SQL脚本,也就是说如果我们只是想使用基本的增长改查的话,那么甚至呢,一行circle语句的配置都不用写,这个就是MY给我们提供的一个功能哈。然后接下来呢,我们再来看一下。Service也是一样的,你会发现呢,这个里面呢,其实只定义了一个接口的结构而已,并没有定义具体的内容,但是呢,我们的这个service这个接口呢,它继承了一个I,这个I呢,也是买给我们提供的一个预定义的一个,这里面定义了好多抽象的方法,除了基本的增删改查之外呢,还有分页方法,还有一些批量处理方法,但是呢,这个接口里面没有具体的实现,那么它的实现在哪儿呢?
08:17
我们打开我们的包下面的IL这个包,那这个里面呢,就是所有的实现类了,那这个实现类呢,它继承了一个service安,那这个service安呢,它就实现了刚才我们的。这个里面呢,定义了所有刚才我们看到的抽象接口的实现方法,所以在controller层呢,很多情况下,我们直接可以调用这个里面的来完成我们接口的开发,当如果我们啊需要写更复杂的,需要自己定义的话,那么因为这个service呢,还实现了我们刚才写的这个就是这个下面这个,所以我们可以自己定我们法,然后自己对它来做实现,那在通用的service的基础上呢,我们再来进行个性化的业务开发。
09:12
所以这是我们的四层。然后呢,我们来我们的这个配置文件当中,对我们的map层类呢,做一个扫描,我们打开。在这面呢,我们创建一个。My bet。Plus,肯飞个累啊。那么在这个类当中呢?我们启用。Enable启用事务管理。并且呢,这个类呢,我们要扫描所有的麦组件,好,我们来找到我们的麦包。
10:09
在这边拷贝一个报名。而且呢,这个类它是一个配置文件。好,这样的话呢,我们就有了一个买的配置。这是我们的配件。接下来呢,我们定义我们的接口层的方法。在controller里面我们添加一个方法。那么我们直接可以把刚才的引进。然后呢,我们在这面添加一个方法获取商品列表。
11:14
啊,这边我们写list好,然后我们直接可以调用product service的通用service里面的类方法,哎,你会发现呢,我们呃,甚至连service层都不用写,就实现了一个简单的列表查询,OK。点,然后这呢,我们写一个名字list,这个名字呢是未来前端数据的时候需要的,所以它也特别重要,我们前后端联调的过程当中,是不是会出现什么数据绑定不上啊,前端的接口调用不到后端的数据啊,这些问题很有可能呢,就是你这个名字前后端对应不一致哈。所以我们。
12:02
把这个名字呢,要给它明确了啊,后面我们要在前端去绑定它。这是我们的接口方法的一个定义,然后呢,我们把这个项目重新运行一下吧。好,已经启动了,那我们重新刷新一下我们的swa,找到商品管理里面的类似方法,我们点击一下,你会发现呢,我们的商品数据列表就显示出来了。这个就是我们开发的第一个我们在项目当中要用到的一个正式的后端接口。
我来说两句