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