实体类:
package cn.et.lesson03;
public class Emp {
private String empNo;
private String ename;
public String getEmpNo() {
return empNo;
}
public void setEmpNo(String empNo) {
this.empNo = empNo;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
@Override
public String toString() {
return "Emp [empNo=" + empNo + ", ename=" + ename + "]";
}
}
Mapper接口:
package cn.et.lesson03;
import org.apache.ibatis.annotations.Select;
public interface EmpMapper {
@Select("select * from emp where empno=#{0}")
public Emp selectEmpByEmpNo(String empNo);
}
Test类:
package cn.et.lesson03;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class TestMybatis {
private static SqlSession getSession() {
//因为需要的mybatis.xml文件 不在同一层目录 所以这里才使用 cn.et.lesson01.TestMybatis
InputStream is = TestMybatis.class.getResourceAsStream("mybatis.xml");
SqlSessionFactory session = new SqlSessionFactoryBuilder().build(is);
//openSession()获取操作数据库的类 SqlSession
SqlSession sqlSession = session.openSession();
return sqlSession;
}
public static void main(String[] args) {
SqlSession sqlSession = getSession();
//通过动态代理创建一个实体类 通过接口会自动调用配置文件
EmpMapper dm = sqlSession.getMapper(EmpMapper.class);
Emp emp = dm.selectEmpByEmpNo("7900");
System.out.println(emp);
}
}
Run:
MuBatis中对象映射 不区分大小写 但是列名和实体类的字段名必须一致 才能自动填充,
而当实体类由别人提供的时候,可能会出现 字段名和数据库中列名不一致的情况,这时
秉承开闭原则,我们只能修改自己的代码去适配对方的代码,以下提供两种方式以供参考
一、通过数据库中 as 关键字制造 伪列名 与 字段名匹配
实体类:
package cn.et.lesson03;
public class Emp {
private String empNo;
private String ename1;
public String getEmpNo() {
return empNo;
}
public void setEmpNo(String empNo) {
this.empNo = empNo;
}
public String getEname1() {
return ename1;
}
public void setEname1(String ename1) {
this.ename1 = ename1;
}
@Override
public String toString() {
return "Emp [empNo=" + empNo + ", ename1=" + ename1 + "]";
}
}
接口:
package cn.et.lesson03;
import org.apache.ibatis.annotations.Select;
public interface EmpMapper {
//通过 as 关键字生成伪列名与实体类中的字段名匹配
@Select("select empno,ename as ename1 from emp where empno=#{0}")
public Emp selectEmpByEmpNo(String empNo);
}
Run
二:通过 Results 将列名和字段名建立关系 →推荐方式
实体类:
package cn.et.lesson03;
public class Emp {
private String empId;
private String empName;
public String getEmpId() {
return empId;
}
public void setEmpId(String empId) {
this.empId = empId;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
@Override
public String toString() {
return "Emp [empId=" + empId + ", empName=" + empName + "]";
}
}
接口:
package cn.et.lesson03;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
public interface EmpMapper {
/**
* 将列名和字段名 建立关系
* property指向 java中的实体类字段 区分大小写
* column指向 数据库中的 列名不分区大小写
* @param empNo
* @return
*/
@Results({
@Result(column="empno",property="empId"),
@Result(column="ename",property="empName")
})
@Select("select * from emp where empno=#{0}")
public Emp selectEmpByEmpNo(String empNo);
}
Run: