Mybatis、TKMybatis对比

文章目录

  • 1.Mybatis
    • (1)配置文件
    • (2)实体类
    • (3)Mapper
    • (4)mybatis-config.xml
  • 2.TKMybatis
    • (1)配置文件
    • (2)实体类
    • (3)Mapper
    • (4)mybatis-config.xml

1.Mybatis

(1)配置文件

  • mybatis.config-location=classpath:mybatis-config.xml,配置mybatis-config.xml路径,mybatis-config.xml中配置MyBatis基础属性,如果项目中配置了mybatis-config.xml文件需要设置该参数。
  • mybatis.mapper-locations=classpath*:mapper/**/*.xml,指定mapper文件夹
  • mybatis.type-handlers-package=geektime.spring.data.mybatisdemo.handler,不用再指定TypeHandler
  • mybatis.configuration.map-underscore-to-camel-case = true,将带有下划线的表字段映射为驼峰格式的实体类属性,省去了在mapper.xml文件中编写表字段列表与表实体类属性的映射关系,即resultMap。

(2)实体类

  • 使用 Mybatis 时,数据库表对应的实体类中,并没有使用任何注解
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Coffee {
    private Long id;
    private String name;
    private Money price;
    private Date createTime;
    private Date updateTime;
}

(3)Mapper

@Mapper
public interface CoffeeMapper {
    @Insert("insert into t_coffee (name, price, create_time, update_time)"
            + "values (#{name}, #{price}, now(), now())")
    // 因为配置了mybatis.type-handlers-package,所以不用指定typeHandler
    // #{price, typeHandler=geektime.spring.data.mybatisdemo.handler.MoneyTypeHandler}
    @Options(useGeneratedKeys = true, keyColumn="id", keyProperty="id")
    int save(Coffee coffee);
	
    @Select("select * from t_coffee where id = #{id}")
    @Results({
            // 默认会根据名字映射
            // map-underscore-to-camel-case = true 可以实现一样的效果
            // 因为配置了mybatis.type-handlers-package,所以不用指定typeHandler
            @Result(id = true, column = "id", property = "id"),
            @Result(column = "create_time", property = "createTime"),
            @Result(column = "update_time", property = "updateTime")
            // 因为配置了mybatis.type-handlers-package,所以不用指定typeHandler
            // @Result(column = "price", property = "price", typeHandler = geektime.spring.data.mybatisdemo.handler.MoneyTypeHandler.class),
    })
    Coffee findById(@Param("id") Long id);
}

(4)mybatis-config.xml


DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	
	<settings>
		
		
		<setting name="cacheEnabled" value="false"/>
		
		<setting name="logImpl" value="LOG4J2"/>
	settings>

	<typeAliases>
	typeAliases>
	
	<plugins>
		<plugin interceptor="com.github.pagehelper.PageInterceptor"> 
			<property name="name" value="mybatis"/> 
		plugin> 
	plugins>
configuration>

2.TKMybatis

(1)配置文件

  • mybatis.config-location=classpath:mybatis-config.xml,配置mybatis-config.xml路径,mybatis-config.xml中配置MyBatis基础属性,如果项目中配置了mybatis-config.xml文件需要设置该参数。
  • mybatis.mapper-locations=classpath*:mapper/**/*.xml,指定mapper文件夹
  • mybatis.type-handlers-package=geektime.spring.data.mybatisdemo.handler,不用再指定TypeHandler

(2)实体类

  • TkMybatis默认使用继承Mapper接口中传入的实体类对象去数据库寻找对应的表,因此如果表名与实体类名不满足对应规则时会报错。这时使用@Table为实体类指定表(这种对应规则为驼峰命名规则)。
@Data
@Table(name = "anc_company")  // 建立实体类和数据库表之间的对应关系
public class Company {
   @Id // 标记和数据库表中主键字段对应的实体类字段
    @Column(name = "company_name")  // 建立实体类字段和数据库表字段之间的对应关系
    @GeneratedValue(strategy = GenerationType.IDENTITY) // 通用Mapper在执行insert操作之后将数据库自动生成的主键值回写到实体类对象中
    private String companyName;

    @Column(name = "company_logo")
    private String companyLogo;

    @Column(name = "company_dec")
    @Transient  // 用于标记不与数据库表字段对应的实体类字段。
    private String companyDec;
}

(3)Mapper

public interface CompanyMapper extends BaseMapper<Company> {
}

(4)mybatis-config.xml


DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	
	<settings>
		
		
		<setting name="cacheEnabled" value="false"/>
		
		<setting name="logImpl" value="LOG4J2"/>
		
		<setting name="mapUnderscoreToCamelCase" value="true"/>
	settings>

	<typeAliases>
	typeAliases>
	
	<plugins>
		<plugin interceptor="com.github.pagehelper.PageInterceptor"> 
			<property name="name" value="mybatis"/> 
		plugin> 
	plugins>
configuration>

你可能感兴趣的:(mybatis,java,数据库)