数据访问:JPA关联与MyBatis

#哪个编程工具让你的工作效率翻倍?#

在Spring Boot的应用程序开发中,数据访问是不可或缺的一部分。Spring Boot通过整合多种数据访问技术,如JPA(Java Persistence API)和MyBatis,为开发者提供了灵活而强大的数据库操作能力。本文将对Spring Boot中JPA关联映射与MyBatis的使用进行总结,探讨它们的特点、优势、应用场景及在Spring Boot中的整合方式。

JPA关联映射

1. JPA简介

JPA是一种Java ORM技术标准,旨在简化数据库访问,减少开发者直接编写SQL语句的需要。它通过注解将Java对象映射到数据库表,并管理对象之间的关系。在Spring Boot中,JPA的实现通常依赖于Hibernate等ORM框架。

2. 关联映射

JPA的关联映射是ORM技术的重要组成部分,它允许开发者在Java对象中定义实体间的关系,并自动映射到数据库表之间的关系。常见的关联类型包括一对一、一对多/多对一和多对多。关联映射的实现主要通过注解来完成,如@OneToOne@OneToMany@ManyToOne@ManyToMany

在Spring Boot中,通过定义实体类并使用这些注解,可以轻松地实现实体间的关联。例如,一个用户(User)可以拥有多个角色(Role),这种一对多的关系可以通过在User实体中使用@OneToMany注解,并在Role实体中使用@ManyToOne注解来定义。

3. JPA在Spring Boot中的优势
  • 简化开发:JPA的ORM特性使得开发者可以使用Java对象来操作数据库,减少了SQL语句的编写量。
  • 标准化:JPA是Java EE的一部分,遵循Java标准,具有良好的跨平台性和可移植性。
  • 集成简便:Spring Boot提供了对JPA的自动配置支持,使得集成JPA变得非常简便。

MyBatis

1. MyBatis简介

MyBatis是一个支持普通SQL查询、存储过程和高级映射的持久层框架。它消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索,通过使用简单的XML或注解将接口和Java的POJOs映射成数据库中的记录。

2. MyBatis在Spring Boot中的使用

在Spring Boot中,MyBatis的使用通常通过引入mybatis-spring-boot-starter依赖来实现。该依赖提供了对MyBatis的自动配置支持,使得开发者可以更加方便地集成MyBatis。

MyBatis在Spring Boot中的应用主要分为以下几个步骤:

  1. 引入依赖:在pom.xmlbuild.gradle中添加mybatis-spring-boot-starter依赖。
  2. 配置Mapper:编写Mapper接口,并通过XML文件或注解定义SQL语句的映射关系。
  3. 配置application.properties或application.yml:指定Mapper文件的位置和其他MyBatis相关配置。
  4. 使用Mapper:在Service层中注入Mapper接口,并调用其方法来执行数据库操作。
3. MyBatis的优势
  • 灵活性高:MyBatis允许开发者直接编写SQL语句,提供了对数据库操作的完全控制权。
  • 动态SQL:MyBatis提供了强大的动态SQL功能,可以根据不同的条件动态构建SQL语句。
  • 性能优越:在需要执行复杂查询或优化性能的场合,MyBatis通常比JPA表现更好。

JPA关联与MyBatis的对比

  • 开发效率:JPA通过ORM技术简化了数据库操作,提高了开发效率;而MyBatis则需要开发者编写更多的SQL语句和映射配置,但提供了更高的灵活性。
  • 性能:在大多数情况下,JPA的性能足够满足需求;但在执行复杂查询或大量数据操作时,MyBatis可能表现更优。
  • 适用场景:JPA适用于快速开发和标准化ORM支持的场景;MyBatis则更适用于需要高性能和灵活SQL控制的场景。

spring.application.name=SpringBoot3
mybatis.type-aliases-package=com.ty.springboot3.crm.pojo
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/crm?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=sasa
mybatis.config-location=classpath:mybatis/mybatis-config.xml
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
logging.level.root=warn
logging.level.com.ty.springboot3.crm.mapper=trace
logging.pattern.console=%p%m%n
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ty.springboot3.crm.mapper.UserMapper">
<resultMap id="userResultMap" type="User">
    <id column="usr_id" property="usrId"/>
    <result column="usr_name" property="usrName"/>
    <result column="usr_password" property="usrPassword"/>
    <result column="usr_role_id" property="usrRoleId"/>
    <result column="usr_flag" property="usrFlag"/>
</resultMap>

    <sql id="columns">
        usr_id,usr_name,usr_password,usr_role_id,usr_flag
    </sql>

    <insert id="insert">
        insert into sys_user(usr_name,usr_password,usr_role_id,usr_flag)
        values
            (#{usrName},#{usrPassword},#{usrRoleId},#{usrFlag})
    </insert>
    <!--<update id="update">
        update sys_user
        <set>
            <if test="usrName != null">usr_name=#{usrName},</if>
            <if test="usrPassword != null">usr_password=#{usrPassword},</if>
            <if test="usrRoleId != null">usr_role_id=#{usrRoleId},</if>
            <if test="usrFlag != null">usr_flag=#{usrFlag},</if>
        </set>
            where usr_id=#{usrId}
    </update>-->
    <delete id="delete" parameterType="java.lang.Long">
        delete from
                   sys_user
        where usr_id=#{usrId}
    </delete>
    <select id="get" parameterType="java.lang.Long" resultMap="userResultMap">
        select <include refid="columns"/>
            from sys_user
        where usr_id=#{id}
    </select>
    <!--<select id="finAll" resultType="User">
        select <include refid="columns"/>
        from sys_user
    </select>-->


</mapper>

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
        <setting name="cacheEnabled" value="true"/>
        <setting name="lazyLoadingEnabled" value="true"/>
        <setting name="autoMappingBehavior" value="FULL"/>
    </settings>

</configuration>
@SpringBootTest
@MapperScan("com.ty.springboot3.crm.mapper")
class SpringBoot3ApplicationTests {

   @Autowired
    private UserMapper userMapper;
   @Test
   public void testInsert() throws Exception{
       userMapper.insert(new User("kt","123456",9L,1L));
       System.out.println("插入成功");
   }
@Test
   public void testGet(){
       User user = userMapper.get(2L);
    System.out.println("usrName:"+user.getUsrName());
}
@Test
public void testFindAll(){
    List<User> users = userMapper.finAll();
    for (User user : users) {
        System.out.println(user);
    }
}
@Test
public void testUpdate(){
    User user = new User();
    user.setUsrId(2L);
    user.setUsrName("ktjy");
    userMapper.update(user);
        System.out.println("更新成功");
}
@Test
public void testDelete(){
        userMapper.delete(86L);
        System.out.println("删除成功");
}

结论

在Spring Boot中,JPA和MyBatis都是优秀的数据访问技术。选择哪种技术取决于项目的具体需求、团队的技术栈以及开发者的偏好。对于需要快速开发和标准化ORM支持的场景,JPA是一个不错的选择;而对于需要高性能和灵活SQL控制的场景,MyBatis则更加适合。在实际应用中,也可以根据项目的具体情况将JPA和MyBatis结合使用,以达到最佳的开发效率和系统性能。

  • 11
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值