长沙教育建设信息网站新产品推广方案策划
1、官方文档
mybatis:mybatis-spring –
jpa:https://springdoc.cn/spring-data-jpa/
应用文档
jpa详解_java菜鸟1的博客-CSDN博客
JPA简介及其使用详解_Tourist-xl的博客-CSDN博客_jpa的作用
2、使用比较
mybatis一般用于互联网性质的项目,后期项目性能调优比较方便,配置输出日志,直接输出sql便于线上排查问题,之前一直被诟病的手写sql,单表的有些组件都封装了,如mybatis-plus、tkmybatis,如果实体和表字段没建立对应关系,实体和表都全了但是对应关系有缺失,缺失的不会返回,还有一种就是由于粗心导致的实体或者表不全,这种就麻烦些,程序运行才能发现。
jpa一般适用于中小型项目,配置输出日志后,输出sql不好排查,直接把表字段转义为不方便查阅的字段,不直观,相比于mybatis,如果实体少了不全,程序启动时就会报错,相当于提前暴露了问题。它提供api封装好了对单表的操作,直接调用即可,不需要额外引进组件。
3、实际使用
日常整合springboot组件三步骤,引依赖--配置配置文件--有需要扩展的可以扩展配置类,使用注解,调用api。
jpa
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency>
<dependency><groupId>org.hibernate</groupId><artifactId>hibernate-jpamodelgen</artifactId>
</dependency>
hibernate-jpamodelgen提供了一个方便获取实体类属性名的方法,当数据库或实体类的属性名改变后,不用去变动其他层代码。
Spring Jpa 自动根据实体类生成资源类_辉呀的博客-CSDN博客_jpamodelgen
实体类使用注解
接口层
接着调用就完事了
条件查询
可参考:SpringDataJPA中使用Specification进行表连接多条件分页动态查询 - 代码先锋网
https://www.cnblogs.com/ydmysm/p/hhb_pageQuery.html
mybatis
<!-- mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>${mybatis.version}</version></dependency><!-- mybatis启动器 --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${mybatis.starter.version}</version></dependency><!--mybatis-plus启动器--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatis.plus.version}</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-core</artifactId><version>${mybatis.plus.version}</version></dependency>
配置xml
<select id="getAmacRegisterSearchResults" resultType="cn.go.dao.irmcenter.result.Asult">SELECT DISTINCTtiar.`id`,tiar.`name`,tiar.`xx_name`,tiar.`xx_num`FROM`ts_xx_xc_rxx` tiar<where><if test="keyword != null">tiar.`name` LIKE #{keyword}OR tiar.`pxe` LIKE #{keyword}OR tiar.`xum` LIKE #{keyword}</if></where></select>
<update id="batchUpdateMs">UPDATE `ts_xia` SET `name` = <foreach collection="me" item="me" separator=" " open="CASE id" close="END">WHEN #{me.id} THEN #{me.name} </foreach>, `fans` = <foreach collection="med" item="me" separator=" " open="CASE id" close="END">WHEN #{me.id} THEN #{me.fans} </foreach>,`le` = <foreach collection="me" item="me" separator=" " open="CASE id" close="END">WHEN #{me.id} THEN #{me.level} </foreach>WHERE `id` IN <foreach collection="me" item="me" separator="," open="(" close=")">#{me.id} </foreach></update>
<update id="updateinfo" parameterType="xxxroupParam">update<include refid="xxx"/><set><if test="oor!=null">oor = #{oor},</if><if test="updateDate!=null">update_date = #{updateDate},</if><if test="status==null">status != -1</if><if test="status!=null">status = #{status}</if><if test="sequence!=null">sequence = #{sequence},</if><if test="mt!=null">mt = #{mt}</if></set>where id = #{mad}</update>
<insert id="bind" parameterType="java.util.List">insert into <include refid="nod"/> (bd,nd,rd,opr,sts)values<foreach collection="list" item="item" index="index" separator=",">(#{item.bd},#{item.nd},#{item.rd},#{item.opr},#{item.st})</foreach></insert>