一. 创建表
员工表:
CREATE TABLE `studymybatis`.`emp` (
`eid` INT NOT NULL AUTO_INCREMENT,
`emp_name` VARCHAR(20),
`age` INT,
`sex` CHAR(1),
`email` VARCHAR(20),
`did` VARCHAR(20),
PRIMARY KEY (`eid`));
INSERT INTO `studymybatis`.`emp` (`emp_name`, `age`, `sex`, `email`, `did`) VALUES ('张三', '21', '男', 'Zhang@163.com', 'D1');
INSERT INTO `studymybatis`.`emp` (`emp_name`, `age`, `sex`, `email`, `did`) VALUES ('李四', '23', '男', 'Lisi@qq.com', 'D2');
INSERT INTO `studymybatis`.`emp` (`emp_name`, `age`, `sex`, `email`, `did`) VALUES ('王二', '22', '男', 'Wang@163.com', 'D2');
INSERT INTO `studymybatis`.`emp` (`emp_name`, `age`, `sex`, `email`, `did`) VALUES ('小红', '20', '女', 'Hong@163.com', 'D1');
INSERT INTO `studymybatis`.`emp` (`emp_name`, `age`, `sex`, `email`, `did`) VALUES ('王梅', '22', '女', 'Mei@qq.com', 'D3');
二. 创建JavaBean
package pojo;
public class Emp {
private Integer eid;
private String empName;
private Integer age;
private Character sex;
private String email;
public Emp() {
}
public Emp(Integer eid, String empName, Integer age, Character sex, String email) {
this.eid = eid;
this.empName = empName;
this.age = age;
this.sex = sex;
this.email = email;
}
@Override
public String toString() {
return "Emp{" +
"eid=" + eid +
", empName='" + empName + '\'' +
", age=" + age +
", sex=" + sex +
", email='" + email + '\'' +
'}';
}
}
三. 创建Mapper接口
package mapper;
import pojo.Emp;
import java.util.List;
public interface EmpMapper {
//查询所有员工集合
List<Emp> queryAllEmp();
}
四. 创建映射文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapper.EmpMapper"> <!--为mapper接口的全类名-->
<select id="queryAllEmp" resultType="Emp">
select * from emp
</select>
</mapper>
五. 测试
import mapper.EmpMapper;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import pojo.Emp;
import utils.SqlSessionUtils;
import java.util.List;
public class MapperTest {
@Test
public void testQueryAllEmp(){
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
List<Emp> list = mapper.queryAllEmp();
System.out.println(list);
}
}
由于表中的字段名emp_name和JavaBean中的属性名empName不同,所以导致输出的empName=null
①解决方式一:给表的字段名emp_name起一个别名empName
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapper.EmpMapper"> <!--为mapper接口的全类名-->
<select id="queryAllEmp" resultType="Emp">
select eid,emp_name empName,age,sex,email from emp
</select>
</mapper>
②在核心配置文件下添加以下内容,将下划线_自动映射为驼峰:emp_name ---> empName
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapper.EmpMapper"> <!--为mapper接口的全类名-->
<select id="queryAllEmp" resultType="Emp">
select * from emp
</select>
</mapper>
③使用resultMap自定义一个映射关系
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapper.EmpMapper"> <!--为mapper接口的全类名-->
<!--resultMap:设置自定义映射关系
id:唯一标识,不能重复(自定义映射关系名)
type:设置映射关系中的实体类类型
-->
<!--id:设置主键的映射关系
result:设置普通字段的映射关系
property:设置映射关系中的属性名,必须是type中所设置的实体类类型中的属性名
column:设置映射关系中的字段名,必须是sql语句查询出的字段名
-->
<resultMap id="empMap" type="Emp">
<id property="eid" column="eid"></id>
<result property="empName" column="emp_name"></result>
<result property="age" column="age"></result>
<result property="sex" column="sex"></result>
<result property="email" column="email"></result>
</resultMap>
<select id="queryAllEmp" resultMap="empMap">
select * from emp
</select>
</mapper>