文章目录
- 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.properties
或application.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配置:
- 可以不需要改动代码, 而仅需复制一份xml, 针对新的类型的数据库进行兼容性改造。
- 新旧数据库切换时,在发生异常时,可以切换回旧的数据库操作,保证业务连续性。
参考文献
官网中文文档