造一个方形轮子文章目录:造一个方形的轮子
01、解决遗留问题
这一篇没有太多的解决上一篇遗留的问题,静态文件暂时没有处理,继续算做遗留问题,处理了一下Square框架的依赖,修改了mysql数据库驱动的scope配置:
1 | <dependency> |
02、集成Mybatis
集成第三方,找了一个比较常用的框架,持久层的Mybatis,起初觉得这东西用起来很方便,没有太细的考虑过,如果要集成他要怎么做,一上手写还是发现了很多问题。
集成的大体思路是:
1、添加square-mybatis项目,做成依赖,处理Mybatis的相关配置
2、demo项目添加Mybatis和square-mybatis依赖
3、添加mapper的xml配置及对应的接口
4、关联使Mybatis框架生效
这里有几个问题:
1、square-mybatis里的代码如果在square框架里加载(因为有Bean操作)
2、Mybatis的mapper.xml文件放在哪?如何加载?
3、打包后怎么保证Mybatis框架生效
这几个问题其实是做之前有大体思路,但做下来发现有些跟写之前想的确实不一样,下边我会尽量记录一下遇到的问题,及解决过程
03、square框架加载square-mybatis
最开始我在square框架里添加了一个@config
注解及一个SquareConfig.java
,作用就是使用这个注解标记的 类同时继承SquareConfig接口,实现config()
方法,会在square框架加载过程中处理依赖之前,执行这个config()
方法,目的是把配置的Mybatis框架的Mapper注入到Bean容器中,好在接下来的initDI()
方法中使用,保证依赖类的存在,但是写完后发现因为这个类在 square-mybatis项目里,是以依赖的形式提供给demo的,所以demo项目启动过程中扫描不到jar包里的文件。
所以最终将square-mybatis中的Conifg类实现成了静态方法,在demo中添加了InitConfig.java
来实现调用功能,下边看代码:
square-mybatis项目的MybatisConfig.java:
1 | package com.jisuye; |
这个类处理时遇到的问题比较多,首先最开始没找到设置mapper.xml文件的地方,就用了Mybatis默认的mapper.xml跟对应的接口在同一个目录下,结果发现这样需要在pom文件中配置resource引入.xml文件 不然编译后找不到xml文件,而且还要添加一个配置,指定Mybatis扫描的package路径.后来翻看了mybatis-spring的代码找到了遍历加载xml配置文件的方法,又遇到打包后在jar包里加载不到的问题,好在之前处理打包插件,弄过jar文件,直接在做个判断如果在jar里启动的,特殊处理一下,最后就可以了。
04、square项目调整
添加Config相关注解及接口:
1 | package com.jisuye.annotations; |
1 | package com.jisuye.core; |
BeanInitUtil.java添加initConfig()方法:
1 | //... |
DbUtil原来只有自己使用,现在集成Mybatis后获取 DataSource部分可以放在这个类里,于是添加了一个dataSource 参数,及对应的getDataSource()
方法,首次调用如果为空会去初始化:
1 | package com.jisuye.util; |
05、修改square-demo项目,测试集成
首先添加pom依赖:
1 | <dependency> |
添加InitConfig.java配置类,只是用来调用MybatisConfig.init()方法。
1 | package com.jisuye.config; |
添加AbcMapper.java接口
1 | package com.jisuye.mapper; |
在resource下添加mapper目录,添加AbcMapper.xml文件:
1 |
|
application.yml中添加数据库相关配置
1 | server: |
HelloController 添加调用Mapper的方法:
1 | package com.jisuye.controller; |
首先在IDE中启动程序测试,程序启动后访问:http://localhost:8765/square-demo/id?id=1
返回结果:success! name is : ixx
查看日志输出:
1 | 19:42:45.594 [http-nio-8765-exec-1] DEBUG org.apache.ibatis.transaction.jdbc.JdbcTransaction - Setting autocommit to false on JDBC Connection [HikariProxyConnection@2030223697 wrapping com.mysql.cj.jdbc.ConnectionImpl@d088afc] |
ok !本地测试通过,再试一下打包。
在square-demo目录下执行mvn clean package
构建完毕后执行java -jar target/square-demo-1.0-SNAPSHOT.jar
等程序启动成功后访问:http://localhost:8765/square-demo/id?id=1
返回结果:success! name is : ixx
控制台也有上边同样的日志输出,说明打包启动也OK了。
06、遗留问题
集成这篇还算完事吧,至少该实现的都实现了,当然也相当于会对Mybatis插件做了些定制如果集成其它的功能应该还需要做一定的抽象工作。
上一篇遗留的最主要的问题就是静态文件的问题了,不知道下一篇会不会解决。。。
本篇代码地址: https://github.com/iuv/square/tree/square10
spring-mybatis地址: https://github.com/iuv/square-mybatis
演示项目地址: https://github.com/iuv/square-demo
本文链接: http://blog.jisuye.com/2019/09/09/square10/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
![知识共享许可协议](/images/by-nc-sa.png)