在使用 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实体类。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论