定义

注:这个亿1.x 版本不一样,因为引入了 tk.mybatis.mapper 以后,@Column 将会使用 javax.persistence 中的注解

@Column 注解的作用是对数据库列的一些自定义设置。

  • name: 自定义与db column 列名的映射,默认值为 ""。
  • table: 自定义的列的表明或别名, 主要作用于多表查询指定列来自于哪张表, 默认值为 "“”

name 属性

  • 在基本概览中我们讲到,默认遵循mapUnderscoreToCamelCase 规范。如果你不遵循这个规范,那么你需要使用。
  • 如果这个entity 是多表join 出来的,那么一定要使用这个注解去标注这个属性是从哪个表里面来的。

java code:

Class Student {
    // map to db column "id".
    @Column(name="id")
    private Integer studentId;
    // get/set ...
}

db table:

CREATE TABLE student(
    id    INT PRIMARY KEY,
)

table 属性

当多表join的时候一定要使用这个属性。这个对于筛选特别重要,因为join 的时候是多表,我们必须指定这个列是查询哪个表的列,否则会报错。

举个列子,我们想筛选CategoryName 是Be 开头的,但是我们查询的是一个 Product 和 Category join 出来的view, 所以在最后的 output 中, 是(WHERE category.category_name like ?) 去 指定这个是来自category 表中(当然你也可以使用别名来表示category 表)

db table:

CREATE TABLE category (
  category_id   INT PRIMARY KEY,
  category_name VARCHAR (50) NOT NULL,
  description   VARCHAR (100)
);

CREATE TABLE product (
  product_id    INT PRIMARY KEY,
  category_id   INT NOT NULL,
  product_name  VARCHAR (50) NOT NULL,
  price         DECIMAL
);

Java code:

// ProductView entity.
public class ProductView {
    // these columns from "product" table.
    @Column(name = "product_id", table="product")
    private Long productID;
    @Column(name = "product_name", table="product")
    private String productName;
    @Column(name = "price", table="product")
    private BigDecimal price;

    // these columns from "category" table.
    @Column(name = "category_id", table="category")
    private Long categoryID;
    @Column(name = "category_name", table="category")
    private String categoryName;
    @Column(name = "description", table="category")
    private String description;

    // get/set ...
}

test case:

@Test
public void testStartWith() throws Exception {
        FilterDescriptor nameFilter =
                new FilterDescriptor(FilterCondition.AND, "categoryName", FilterOperator.START_WITH, "Be");
        Map<String, Object> queryParams =
                mybatisQueryProvider.getWhereQueryParamMap(
                        ProductView.class, "whereExpression", nameFilter);
        List<ProductView> productViews = northwindDao.getProductViewsByDynamic(queryParams);
        assertEquals("Beverages", productViews.get(0).getCategoryName());
}

console output:

JDBC Connection [ProxyConnection[PooledConnection[conn9: url=jdbc:h2:mem:default user=SA]]] will not be managed by Spring
==>  Preparing: SELECT * FROM product LEFT JOIN category ON product.category_id = category.category_id WHERE (category.category_name LIKE ?) 
==> Parameters: Be%(String)
<==    Columns: PRODUCT_ID, CATEGORY_ID, PRODUCT_NAME, PRICE, CATEGORY_ID, CATEGORY_NAME, DESCRIPTION
<==        Row: 1, 1, Northwind Traders Chai, 18.0000, 1, Beverages, test
<==      Total: 1

results matching ""

    No results matching ""