- zaiMybatis中Sql执行都是通过MappedStatement来进行
通过Dao层方法调用,是通过拦截方法并拼接Dao层ClassName和方法名作为StatementId查找对应的MappedStatement;
通过SqlSession可以直接通过StatementId获取对应的MappedStatement并执行;
@SpringBootTest
public class UserTest {
private final static Logger log = LoggerFactory.getLogger(UserTest.class);
@Resource
private UserBaseMapper userBaseMapper;
@Resource
private SqlSession sqlSession;
@Test
public void testMapper(){
log.info("query by mapper {}",userBaseMapper.selectByPrimaryKey(1l));
}
@Test
public void testSqlSession(){
log.info("query by sqlSession {}",(UserBase)sqlSession.selectOne("xxx.xxx.xxx.mapper.UserBaseMapper.selectByPrimaryKey",1l));
}
}
- MappedStatement中包含SqlSource为执行的对应Sql语句;
sqlSession.getConfiguration()
.getMappedStatement("xxx.xxx.xxx.mapper.UserBaseMapper.selectByPrimaryKey")
.getSqlSource()
<sql id="Base_Column_List">
id,phone,idcard,
name
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from user_base
where id = #{id,jdbcType=INTEGER}
</select>
- ResultMap为结果映射与Mapper.xml中一一对应
@Test
public void testGetResultMap(){
log.info("resultMaps {}", JSONUtil.toJsonStr(sqlSession.getConfiguration().getMappedStatement("xxx.xxx.xxx.mapper.UserBaseMapper.selectByPrimaryKey").getResultMaps()));
}
[
{
"id": "xxx.xxx.xxx.mapper.UserBaseMapper.BaseResultMap",
"type": "class xxx.xxx.xxx.entity.UserBase",
"resultMappings": [
{
"property": "id",
"column": "id",
"javaType": "class java.lang.Integer",
"jdbcType": "INTEGER",
"typeHandler": {
"rawType": "class java.lang.Integer"
},
"notNullColumns": [],
"flags": [
"ID"
],
"composites": [],
"lazy": false
},
{
"property": "phone",
"column": "phone",
"javaType": "class java.lang.String",
"jdbcType": "VARCHAR",
"typeHandler": {
"rawType": "class java.lang.String"
},
"notNullColumns": [],
"flags": [],
"composites": [],
"lazy": false
},
{
"property": "idcard",
"column": "idcard",
"javaType": "class java.lang.String",
"jdbcType": "VARCHAR",
"typeHandler": {
"rawType": "class java.lang.String"
},
"notNullColumns": [],
"flags": [],
"composites": [],
"lazy": false
},
{
"property": "name",
"column": "name",
"javaType": "class java.lang.String",
"jdbcType": "VARCHAR",
"typeHandler": {
"rawType": "class java.lang.String"
},
"notNullColumns": [],
"flags": [],
"composites": [],
"lazy": false
}
],
"idResultMappings": [
{
"property": "id",
"column": "id",
"javaType": "class java.lang.Integer",
"jdbcType": "INTEGER",
"typeHandler": {
"rawType": "class java.lang.Integer"
},
"notNullColumns": [],
"flags": [
"ID"
],
"composites": [],
"lazy": false
}
],
"constructorResultMappings": [],
"propertyResultMappings": [
{
"property": "id",
"column": "id",
"javaType": "class java.lang.Integer",
"jdbcType": "INTEGER",
"typeHandler": {
"rawType": "class java.lang.Integer"
},
"notNullColumns": [],
"flags": [
"ID"
],
"composites": [],
"lazy": false
},
{
"property": "phone",
"column": "phone",
"javaType": "class java.lang.String",
"jdbcType": "VARCHAR",
"typeHandler": {
"rawType": "class java.lang.String"
},
"notNullColumns": [],
"flags": [],
"composites": [],
"lazy": false
},
{
"property": "idcard",
"column": "idcard",
"javaType": "class java.lang.String",
"jdbcType": "VARCHAR",
"typeHandler": {
"rawType": "class java.lang.String"
},
"notNullColumns": [],
"flags": [],
"composites": [],
"lazy": false
},
{
"property": "name",
"column": "name",
"javaType": "class java.lang.String",
"jdbcType": "VARCHAR",
"typeHandler": {
"rawType": "class java.lang.String"
},
"notNullColumns": [],
"flags": [],
"composites": [],
"lazy": false
}
],
"mappedColumns": [
"IDCARD",
"PHONE",
"ID",
"NAME"
],
"mappedProperties": [
"phone",
"idcard",
"name",
"id"
]
}
]
<resultMap id="BaseResultMap" type="xxx.xxx.xxx.entity.UserBase">
<id property="id" column="id" jdbcType="INTEGER"/>
<result property="phone" column="phone" jdbcType="VARCHAR"/>
<result property="idcard" column="idcard" jdbcType="VARCHAR"/>
<result property="name" column="name" jdbcType="VARCHAR"/>
</resultMap>