定义
注:这个亿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