两个问题:
1.数据库中的字段名怎么和对象中的属性对应起来?
2.数据库中字段的类型怎么转换到合适的Java类型,不引起转换失败?
本次演示的数据库如下所示
CREATE TABLE `company` (`id` INT ( 100 ) NOT NULL AUTO_INCREMENT COMMENT '主键id',`company_name` VARCHAR ( 100 ) NOT NULL COMMENT '企业名称',`company_num` CHAR ( 20 ) NOT NULL COMMENT '统一社会信用代码',`company_type` CHAR ( 1 ) NOT NULL COMMENT '企业类型',`company_address` CHAR ( 6 ) NOT NULL COMMENT '所属地市编码',PRIMARY KEY ( `id` ) ) ENGINE = INNODB COMMENT = '公司表';
对应的PO(Persistant Object)Company
public class Company { private int id; private String companyName; private String companyNum; private String companyType; private String companyAddress;}
mybatis接口类和对应的映射文件
@Mapper public interface CompanyMapper { Company getCompanyById(String id); }
<?xml version="1.0" encoding="UTF-8" ?><mapper namespace="com.demo.company.mapper.CompanyMapper"> <select id="getCompanyById" resultType="com.demo.company.pojo.Company" > select id, company_name, company_num, company_type, company_address from company where id = #{id} select>mapper>
在上面的映射文件中,namespace指定了对应接口类的全限定类路径,select代表select语句,id为接口类中方法名,resultType代表该sql返回的期望类型的类的全限定类名或别名(typeAliases)。
针对上面的问题,主要解决有三种方案
驼峰式命名开关指定为true,或者数据库字段名和对象的属性名完全一致
Select时指定As
ResultMap最强大与稳健
一、驼峰式命名开关
一般来说我们的数据库字段名采用下划线分隔,比如这里的字段名company_name与对象属性名companyName。
<settings>