在使用 MyBatis 的 Mapper
进行数据库操作时,是可以使用 SELECT
语句的 字段 AS xx
这种语法的。下面为你详细介绍不同场景下的使用方式。
基于 XML 映射文件的 Mapper
当使用 XML 映射文件来定义 Mapper
时,可以在 SQL 语句里使用 字段 AS xx
语法。
示例代码
Mapper 接口
import java.util.List;
import java.util.Map;
public interface UserMapper {
List<Map<String, Object>> selectUsersWithAlias();
}
Mapper XML 文件(UserMapper.xml
)
<?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="com.example.mapper.UserMapper">
<select id="selectUsersWithAlias" resultType="java.util.Map">
SELECT user_id AS id, user_name AS name
FROM users
</select>
</mapper>
代码调用示例
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
public class Main {
public static void main(String[] args) throws Exception {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
try (SqlSession session = sqlSessionFactory.openSession()) {
UserMapper userMapper = session.getMapper(UserMapper.class);
List<Map<String, Object>> users = userMapper.selectUsersWithAlias();
for (Map<String, Object> user : users) {
System.out.println("ID: " + user.get("id") + ", Name: " + user.get("name"));
}
}
}
}
代码解释
- 在
UserMapper.xml
文件的select
语句中,使用user_id AS id
和user_name AS name
对字段进行了重命名。 resultType="java.util.Map"
表示查询结果会以Map
的形式返回,其中键为字段名(使用AS
后的别名),值为字段值。
基于注解的 Mapper
若使用注解来定义 Mapper
,同样可以在 SQL 注解里使用 字段 AS xx
语法。
示例代码
import org.apache.ibatis.annotations.Select;
import java.util.List;
import java.util.Map;
public interface UserMapper {
@Select("SELECT user_id AS id, user_name AS name FROM users")
List<Map<String, Object>> selectUsersWithAlias();
}
代码解释
- 在
@Select
注解的 SQL 语句中,使用AS
关键字对字段进行了重命名。 - 方法返回类型为
List<Map<String, Object>>
,查询结果中的字段名会以AS
后的别名存在于Map
中。
映射到实体类
当把查询结果映射到实体类时,AS
后的别名要和实体类的属性名一致,这样 MyBatis 才能正确映射。
示例代码
实体类
public class User {
private Integer id;
private String name;
// Getters and Setters
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Mapper 接口
import java.util.List;
public interface UserMapper {
List<User> selectUsersWithAlias();
}
Mapper XML 文件(UserMapper.xml
)
<?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="com.example.mapper.UserMapper">
<select id="selectUsersWithAlias" resultType="com.example.entity.User">
SELECT user_id AS id, user_name AS name
FROM users
</select>
</mapper>
代码解释
- 在
select
语句中使用AS
关键字将user_id
重命名为id
,user_name
重命名为name
,与User
实体类的属性名一致。 resultType="com.example.entity.User"
表示查询结果会映射到User
实体类。