mybatis数据层的三种实现方式(xml、@Select注解、代码实现)
引言
在平常的日常java开发过程中,功能之间的交互,不可避免的要与数据库打交道,这中间就涉及到数据层的实现问题,有xml、@Select注解、Java代码三种实现方式,具体的可以根据自己的业务难易程度来选择某个实现方式,接下来具体看一下每种实现方式的是如何实现的。
1:XML的 方式
XML的方式也是项目开发中应用最多的一种方式,就是建一个Mapper的接口,然后对应建一个名字一样的XML文件,具体的业务Sql都在xml中去实现
2:@Select 注解的方式
就是将具体的业务逻辑Sql直接写在mapper中对应的方法上
@Select("select * from dfcv_vps_plus_crm_order_dfl_vl_gps_01" +
"where 1=1" +
"and if(#{chassisNo} is null,1=1,chassis_no like CONCAT('%',#{chassisNo},'%'))" +
"and if(#{orderNo} is null,1=1,order_no like CONCAT('%',#{orderNo},'%'))")
List<CarStatus> getList(String chassisNo,String orderNo);
然后在ServiceImpl业务实现层直接调用mapper中的方法即可
3:Java代码的方式
就是将具体的业务Sql通过mybatis提供对应的类和方式去进行实现和组装,如and、like、or、等等,其底层原理也是通过实体类上边对应的@TableName注解,找到是需要查询那张表,然后根据业务中的拼接条件,就知道我们是需要and、like、or或是排序分组等等,就能拼接出一条完整的sql了
上边的java代码对应的sql就是
select * from dfcv_vps_plus_api_boxing_unlock_vehicle
where chassis_no like '%chassisNo%' or chassis_new like '%chassisNew%'and order_no like '%orderNo%'
总结:
三种方式各有各的优势和利弊
xml适用于需要多表联合查询的复杂业务场景,sql代码清晰明了,查询逻辑也一清二楚,但是要建xml文件,写大量的代码sql
@Select注解的方式适合业务不是很负责,不想写xml文件的,可以直接在mapper方法上通过注解的方式写sql代码,但是不适合复杂业务,通过编码起来不方便,不直观
Java代码的方式 适合于单表的简单业务,不用写xml了,但是不适合复杂业务,sql的具体实现也不直观,需要执行代码了才知道估计拼接的sql