您的位置:首页 > 游戏 > 游戏 > springboot组件使用-mybatis组件使用

springboot组件使用-mybatis组件使用

2024/11/16 7:47:53 来源:https://blog.csdn.net/wendao76/article/details/141910437  浏览:    关键词:springboot组件使用-mybatis组件使用

文章目录

    • springboot使用mybatis组件
      • 1. 添加依赖
      • 2. 配置数据源
      • 3. 创建实体类
      • 4. 创建Mapper接口
      • 5. 创建Mapper XML文件
      • 6. 使用Mapper
      • 7. 启动类配置
    • mybtis sql注解
      • 1. `@Mapper` 注解
      • 2. `@Select` 注解
      • 3. `@Insert` 注解
      • 4. `@Update` 注解
      • 5. `@Delete` 注解
      • 6. `@Results` 注解
      • 7. `@Param` 注解
      • 8. `@CacheNamespace` 注解
      • 9. `@Options` 注解
      • 10. `@ResultMap` 注解
      • 总结
    • mybatis XML标签
      • 1. `<mapper>` 标签
      • 2. `<select>` 标签
      • 3. `<insert>` 标签
      • 4. `<update>` 标签
      • 5. `<delete>` 标签
      • 6. `<resultMap>` 标签
      • 7. `<collection>` 标签
      • 8. `<include>` 标签
      • 9. `<if>` 标签
      • 10. `<choose>`、`<when>` 和 `<otherwise>` 标签
      • 11. `<foreach>` 标签
      • 12. `<trim>` 标签
      • 总结
    • 注意
    • 参考文献

springboot使用mybatis组件

在Spring Boot项目中加入MyBatis组件,可以方便地进行数据库操作。以下是详细的步骤:

1. 添加依赖

首先,在pom.xml文件中添加MyBatis和数据库驱动的依赖。例如,如果你使用的是MySQL数据库,可以添加以下依赖:

<dependencies><!-- Spring Boot Starter Data JPA --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- MySQL Connector --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.23</version></dependency><!-- MyBatis Starter --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.4</version></dependency>
</dependencies>

2. 配置数据源

application.propertiesapplication.yml文件中配置数据源信息。例如,在application.properties文件中添加以下配置:

# 数据源配置
spring.datasource.url=jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC
spring.datasource.username=your_username
spring.datasource.password=your_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver# MyBatis配置
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.type-aliases-package=com.example.demo.entity

3. 创建实体类

创建与数据库表对应的实体类。例如:

package com.example.demo.entity;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax protectedById;@Entity
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;private Integer age;// Getters and Setters
}

4. 创建Mapper接口

创建MyBatis的Mapper接口,并使用@Mapper注解标记。例如:

package com.example.demo.mapper;import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;import java.util.List;@Mapper
public interface UserMapper {@Select("SELECT * FROM user")List<User> findAll();
}

5. 创建Mapper XML文件

src/main/resources/mapper目录下创建Mapper的XML文件。例如,创建UserMapper.xml文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.example.demo.mapper.UserMapper"><select id="findAll" resultType="com.example.demo.entity.User">SELECT * FROM user</select>
</mapper>

6. 使用Mapper

在Service层或Controller层中使用Mapper进行数据库操作。例如,在Service层中:

package com.example.demo.service;import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public List<User> getAllUsers() {return userMapper.findAll();}
}

7. 启动类配置

确保在Spring Boot启动类上添加@MapperScan注解,以扫描Mapper接口。例如:

package com.example.demo;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@MapperScan("com.example.demo.mapper")
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}

通过以上步骤,你就可以在Spring Boot项目中成功加入MyBatis组件,并进行数据库操作了。

mybtis sql注解

在 MyBatis 中,除了使用 XML 映射文件来定义 SQL 语句之外,还可以使用注解(Annotations)的方式来编写 SQL 语句。这种方式可以让 SQL 语句更紧密地与 Java 代码结合,使得代码结构更加清晰。下面是一些常用的 MyBatis 注解及其使用方法。

1. @Mapper 注解

@Mapper 注解用于标记一个接口为 MyBatis 的 Mapper 接口。这个接口将包含一系列的 CRUD 方法。

import org.apache.ibatis.annotations.Mapper;@Mapper
public interface UserMapper {// 方法定义
}

2. @Select 注解

@Select 注解用于定义一个 SELECT 语句。

import org.apache.ibatis.annotations.Select;
import com.example.demo.model.User;@Mapper
public interface UserMapper {@Select("SELECT * FROM user WHERE id = #{id}")User getUserById(Long id);
}

3. @Insert 注解

@Insert 注解用于定义一个 INSERT 语句。如果需要获取自动生成的主键值,可以使用 @Options 注解。

import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Options;@Mapper
public interface UserMapper {@Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})")@Options(useGeneratedKeys = true, keyProperty = "id")void insertUser(User user);
}

4. @Update 注解

@Update 注解用于定义一个 UPDATE 语句。

import org.apache.ibatis.annotations.Update;@Mapper
public interface UserMapper {@Update("UPDATE user SET name=#{name}, age=#{age} WHERE id=#{id}")void updateUser(User user);
}

5. @Delete 注解

@Delete 注解用于定义一个 DELETE 语句。

import org.apache.ibatis.annotations.Delete;@Mapper
public interface UserMapper {@Delete("DELETE FROM user WHERE id=#{id}")void deleteUser(Long id);
}

6. @Results 注解

@Results 注解用于定义结果映射。它可以帮助处理复杂的结果集,比如一对一(One-to-One)或一对多(One-to-Many)的关系。

import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Many;
import org.apache.ibatis.annotations.ResultType;
import org.apache.ibatis.annotations.ResultMap;
import com.example.demo.model.User;
import com.example.demo.model.Address;@Mapper
public interface UserMapper {@Select("SELECT * FROM user WHERE id = #{id}")@Results({@Result(property = "id", column = "id"),@Result(property = "name", column = "name"),@Result(property = "age", column = "age"),@Result(property = "address", column = "address_id",one = @One(select = "com.example.demo.mapper.AddressMapper.getAddressById"))})User getUserById(Long id);
}

7. @Param 注解

@Param 注解用于指定 SQL 语句中的参数名称。

import org.apache.ibatis.annotations.Param;@Mapper
public interface UserMapper {@Select("SELECT * FROM user WHERE name LIKE CONCAT('%', #{name}, '%')")List<User> findUsersByName(@Param("name") String name);
}

8. @CacheNamespace 注解

@CacheNamespace 注解用于定义缓存的命名空间,可以指定缓存的实现类等。

import org.apache.ibatis.annotations.CacheNamespace;
import org.apache.ibatis.cache.decorators.Synchronized;@Mapper
@CacheNamespace(implementation = SynchronizedCache.class)
public interface UserMapper {// 方法定义
}

9. @Options 注解

@Options 注解用于定义 SQL 执行后的一些选项,如获取自动生成的主键等。

import org.apache.ibatis.annotations.Options;@Mapper
public interface UserMapper {@Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})")@Options(useGeneratedKeys = true, keyProperty = "id")void insertUser(User user);
}

10. @ResultMap 注解

@ResultMap 注解用于引用已经定义好的结果映射。

import org.apache.ibatis.annotations.ResultMap;@Mapper
public interface UserMapper {@Select("SELECT * FROM user WHERE id = #{id}")@ResultMap("UserResultMap")User getUserById(Long id);
}

总结

使用 MyBatis 的注解可以让你在 Java 代码中直接定义 SQL 语句,这种方式更加简洁,特别是在一些简单的 CRUD 操作中。然而,对于复杂的 SQL 逻辑或者需要高度定制化的映射关系,XML 映射文件仍然是一种非常好的选择。在实际开发中,可以根据具体情况选择最适合的方式来定义 SQL 语句和结果映射。

mybatis XML标签

MyBatis 是一个优秀的持久层框架,它支持定制化的 SQL、存储过程以及高级映射。在 MyBatis 中,XML 映射文件用于定义 SQL 语句、结果映射以及其他与数据库交互相关的配置。下面是 MyBatis 中常用的一些 XML 标签及其用途。

1. <mapper> 标签

<mapper> 标签用于定义一个映射器接口,它包含一系列 SQL 语句和结果映射。

<mapper namespace="com.example.demo.mapper.UserMapper"><!-- SQL 语句和结果映射定义 -->
</mapper>

2. <select> 标签

<select> 标签用于定义一个 SELECT 语句。

<select id="getUserById" parameterType="long" resultType="com.example.demo.model.User">SELECT * FROM user WHERE id = #{id}
</select>

3. <insert> 标签

<insert> 标签用于定义一个 INSERT 语句。

<insert id="insertUser" parameterType="com.example.demo.model.User">INSERT INTO user(name, age) VALUES(#{name}, #{age})
</insert>

4. <update> 标签

<update> 标签用于定义一个 UPDATE 语句。

<update id="updateUser" parameterType="com.example.demo.model.User">UPDATE user SET name=#{name}, age=#{age} WHERE id=#{id}
</update>

5. <delete> 标签

<delete> 标签用于定义一个 DELETE 语句。

<delete id="deleteUser" parameterType="long">DELETE FROM user WHERE id=#{id}
</delete>

6. <resultMap> 标签

<resultMap> 标签用于定义复杂的结果映射关系,它可以处理一对一(One-to-One)、一对多(One-to-Many)或多对一(Many-to-One)的关系。

<resultMap id="UserResultMap" type="com.example.demo.model.User"><id property="id" column="id"/><result property="name" column="name"/><result property="age" column="age"/><association property="address" javaType="com.example.demo.model.Address" resultMap="AddressResultMap"/>
</resultMap>

7. <collection> 标签

<collection> 标签用于处理一对多关系。

<resultMap id="UserResultMap" type="com.example.demo.model.User"><id property="id" column="id"/><result property="name" column="name"/><collection property="orders" ofType="com.example.demo.model.Order" select="getOrdersById"/>
</resultMap>

8. <include> 标签

<include> 标签用于引用外部 SQL 片段。

<sql id="commonColumns">name, age</sql><select id="getAllUsers" resultType="com.example.demo.model.User">SELECT ${commonColumns} FROM user
</select>

9. <if> 标签

<if> 标签用于条件判断,可以动态地构建 SQL 语句。

<select id="findUsersByName" parameterType="string" resultType="com.example.demo.model.User">SELECT * FROM user WHERE 1=1<if test="name != null">AND name LIKE '%${name}%'</if>
</select>

10. <choose><when><otherwise> 标签

<choose><when><otherwise> 标签用于实现多条件判断。

<select id="findUsers" parameterType="com.example.demo.model.SearchCriteria" resultType="com.example.demo.model.User">SELECT * FROM user WHERE<choose><when test="name != null">name LIKE '%${name}%'</when><when test="age != null">age = ${age}</when><otherwise>1 = 1</otherwise></choose>
</select>

11. <foreach> 标签

<foreach> 标签用于处理集合参数,常用于批量操作。

<insert id="batchInsert" parameterType="java.util.List">INSERT INTO user(name, age) VALUES<foreach item="item" index="index" collection="list" open="(" separator=")," close=")">#{item.name}, #{item.age}</foreach>
</insert>

12. <trim> 标签

<trim> 标签用于动态拼接 SQL 语句,并提供去除前导或尾随空白的功能。

<select id="findUsers" parameterType="com.example.demo.model.SearchCriteria" resultType="com.example.demo.model.User">SELECT * FROM user WHERE<trim prefix="WHERE" prefixOverrides="AND|OR"><if test="name != null">AND name LIKE '%${name}%'</if><if test="age != null">OR age = ${age}</if></trim>
</select>

总结

以上是 MyBatis 中常用的 XML 标签及其用途。通过这些标签,可以灵活地定义 SQL 语句、结果映射以及其他与数据库交互相关的配置。掌握这些标签的使用方法,可以帮助你更好地利用 MyBatis 处理复杂的数据库操作。

注意

  • sql的配置有两种方式:sql注解和xml配置
  • 推荐使用xml配置,原因如下:

某些场景下,可能需要对迁移到其他类型数据,使用xml配置:

  1. 可以不需要改动代码, 而仅需复制一份xml, 针对新的类型的数据库进行兼容性改造。
  2. 新旧数据库切换时,在发生异常时,可以切换回旧的数据库操作,保证业务连续性。

参考文献

官网中文文档

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com