mybatis jdbctype个mysql数据类型映射
时间: 2023-10-01 09:08:49 浏览: 72
MyBatis 中的 JdbcType 是用来指定 Java 对象与数据库中的数据类型之间的映射关系的。下面是 MyBatis 中常用的几种 JdbcType 与 MySQL 数据类型之间的映射关系:
| JdbcType | MySQL 数据类型 |
| --- | --- |
| INTEGER | INT |
| BIGINT | BIGINT |
| DECIMAL | DECIMAL |
| FLOAT | FLOAT |
| DOUBLE | DOUBLE |
| BIT | BIT |
| BOOLEAN | TINYINT |
| CHAR | CHAR |
| VARCHAR | VARCHAR |
| CLOB | TEXT |
| BLOB | BLOB |
| DATE | DATE |
| TIME | TIME |
| TIMESTAMP | TIMESTAMP |
需要注意的是,上面的映射关系只是一种常见情况,实际上还存在很多其他的映射关系。如果需要更加精细的类型映射,可以通过实现 `TypeHandler` 接口来自定义类型映射。
相关问题
datetime mybatis localdatetime 映射
在Mybatis中,可以使用Java.sql.Date,Java.sql.Timestamp,java.util.Date来映射到数据库date,timestamp,datetime。但是这些类的许多方法都已经过时。Java8的API的LocalDate,LocalDateTime,LocalTime,现在比较常用。但是,Mybatis的版本(3.5.3)默认情况下是不支持Java8的日期、时间。因此,需要添加jackson-datatype-jsr310模块来支持Java8的日期、时间类型。具体步骤如下:
1.在pom.xml文件中添加以下依赖:
```xml
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.12.4</version>
</dependency>
```
2.在Mybatis的配置文件中添加以下配置:
```xml
<configuration>
<typeHandlers>
<typeHandler handler="org.apache.ibatis.type.LocalDateTimeTypeHandler"/>
</typeHandlers>
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<property name="helperDialect" value="mysql"/>
<property name="reasonable" value="true"/>
<property name="supportMethodsArguments" value="true"/>
<property name="params" value="count=countSql"/>
</plugin>
</plugins>
</configuration>
```
3.在实体类中使用LocalDateTime类型来映射数据库datetime类型:
```java
public class User {
private Long id;
private String name;
private LocalDateTime createTime;
// 省略getter和setter方法
}
```
4.在Mapper.xml文件中使用#{createTime, jdbcType=TIMESTAMP}来映射数据库datetime类型:
```xml
<insert id="insert" parameterType="User">
insert into user(name, create_time)
values(#{name}, #{createTime, jdbcType=TIMESTAMP})
</insert>
```
使用 JSON 类型字段存储动态数据和mybatis关联操作
使用 JSON 类型字段存储动态数据时,操作该字段的 SQL 语句需要使用 MySQL 中提供的 JSON 函数。在 MyBatis 中,可以使用 XML 映射文件或注解来编写 SQL 语句,具体操作步骤如下:
1. 创建实体类
首先,需要创建一个实体类来表示包含 JSON 类型字段的表。例如,创建一个名为 `MyEntity` 的实体类:
```java
public class MyEntity {
private Integer id;
private String dynamicData;
// getter and setter
}
```
其中,`id` 表示主键字段,`dynamicData` 表示存储动态数据的 JSON 类型字段。
2. 创建 XML 映射文件或注解
使用 XML 映射文件或注解来编写 SQL 语句,操作 `dynamic_data` 字段中的数据。例如,以下是一个使用 XML 映射文件的示例:
```xml
<!-- MyEntityMapper.xml -->
<mapper namespace="com.example.MyEntityMapper">
<resultMap id="myEntityMap" type="com.example.MyEntity">
<id property="id" column="id"/>
<result property="dynamicData" column="dynamic_data" jdbcType="JSON"/>
</resultMap>
<select id="findById" resultMap="myEntityMap">
SELECT * FROM my_table WHERE id = #{id}
</select>
<insert id="insert" parameterType="com.example.MyEntity">
INSERT INTO my_table (id, dynamic_data)
VALUES (#{id}, #{dynamicData, jdbcType=JSON})
</insert>
<update id="update" parameterType="com.example.MyEntity">
UPDATE my_table SET dynamic_data = #{dynamicData, jdbcType=JSON}
WHERE id = #{id}
</update>
</mapper>
```
以上示例中,定义了一个 `resultMap` 来映射查询结果到 `MyEntity` 实体类,使用 `jdbcType=JSON` 来指定 `dynamicData` 字段的数据类型为 JSON。然后,定义了 `findById`、`insert` 和 `update` 三个 SQL 语句,分别用于查询、插入和更新数据。
如果使用注解来编写 SQL 语句,则可以在实体类中添加对应的注解,例如:
```java
public interface MyEntityMapper {
@Select("SELECT * FROM my_table WHERE id = #{id}")
@Results({
@Result(property = "dynamicData", column = "dynamic_data", jdbcType = JdbcType.JSON)
})
MyEntity findById(Integer id);
@Insert("INSERT INTO my_table (id, dynamic_data) VALUES (#{id}, #{dynamicData, jdbcType=JSON})")
int insert(MyEntity entity);
@Update("UPDATE my_table SET dynamic_data = #{dynamicData, jdbcType=JSON} WHERE id = #{id}")
int update(MyEntity entity);
}
```
3. 使用 MyBatis 操作数据
最后,在代码中使用 MyBatis 操作数据。例如,以下是一个查询 `MyEntity` 实体类的示例:
```java
public class MyService {
private final SqlSessionFactory sqlSessionFactory;
public MyService(SqlSessionFactory sqlSessionFactory) {
this.sqlSessionFactory = sqlSessionFactory;
}
public MyEntity findById(Integer id) {
try (SqlSession session = sqlSessionFactory.openSession()) {
MyEntityMapper mapper = session.getMapper(MyEntityMapper.class);
return mapper.findById(id);
}
}
}
```
在以上示例中,首先创建了一个 `SqlSessionFactory` 对象,用于创建 `SqlSession` 对象和 `MyEntityMapper` 接口的实例。然后,使用 `session.getMapper(MyEntityMapper.class)` 方法获取 `MyEntityMapper` 的实例,并使用 `mapper.findById(id)` 方法执行查询操作。