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 DISTINCT
tiar.`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>