mybatis简单resultMap使用详解
Mybatis的介绍以及使用:http://www.mybatis.org/mybatis-3/zh/index.html
mybatis是一个半自动的ORM(Object Relational Mapping)框架,需要手动配置一些SQL语句或者注解,相对来说Mybatis留给程序员操作的空间灵活度更高,通常需要手动配置一些东西完成OR映射。当数据库表中的字段 和 POJO实体类不匹配时,这是就需要程序员手动完成字段的映射。
mybatis-config.xml配置文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <properties resource="db.properties"/> <settings> <!-- 使用日志进行帮忙查看 --> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings> <typeAliases> <!-- 取个别名 --> <typeAlias type="com.pojo.User" alias="user"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/dao/UserMapper.xml"/> </mappers> </configuration>
mybatisUtil加载工具类
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.IOException; import java.io.InputStream; public class mybatisUtil { private static SqlSessionFactory sqlSessionFactory = null; static { try { String resource = "mybatis-config.xml"; InputStream in = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(in); } catch (IOException e) { e.printStackTrace(); } } public static SqlSession getSqlsession(){ return sqlSessionFactory.openSession(); } }
POJO实体类User,为了方便简单实用Lombok注解,减少一些代码。
package com.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data //各种get / set方法 Tostring... @AllArgsConstructor //全参构造 @NoArgsConstructor //无参构造 public class User { private int id; //对应数据库中的id private String username; //对应数据库中的name private String password; //对应数据库中的pwd }
接口方法与对应的xml配置文件
package com.dao; import com.pojo.User; import java.util.List; public interface UserMapper { List<User> getUserList(); }
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.dao.UserMapper"> <select id="getUserList" resultType="user"> select *from user; </select> </mapper>
1. POJO实体类 和 数据表字段不匹配
@Test public void test1(){ SqlSession session = mybatisUtil.getSqlsession(); UserMapper mapper = session.getMapper(UserMapper.class); List<User> list = mapper.getUserList(); for (User user : list) { System.out.println(user.toString()); } session.close(); }
POJO实体类中有两个字段和数据库的字段不匹配,最后获得结果的时对于匹配失败的属性会产生null空值。使用输出日志进行帮忙很容易看到区别。
简单的解决方案:就是SQL语句查询时给查询字段使用重命名。
select id, name as username, pwd as password from user
2. resultMap解决属性 - 字段不匹配问题
上面这种解决方案是能够解决问题的,但是有点冗余本身就要查全部的信息用的 * 做通配。这么一改需要每个字段都列出来,然后对极个别的字段进行取别名。试想一下当数据表中有几十个字段呢?而真正需要取别名的字段只有1 - 2个呢?因此mybatis提供了一个强大的机制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="com.dao.UserMapper"> <!-- 1. id可以认为是定义方法名,整个resultMap是一个映射方法,调用这个方法就可以完成这个映射。 2. type是实体类的名称 --> <resultMap id="FieldMap" type="user"> <!-- column 是数据库字段名 property是实体类属性名 --> <result column="name" property="username"/> <result column="pwd" property="password"/> </resultMap> <select id="getUserList" resultMap="FieldMap"> select *from user </select> </mapper>
resultMap标签的解释:
- id可以认为定义方法的名称,下面select中的resultMap传入id的值就相当于使用这个方法完成映射。
- type是实体类名
- column对应数据库中的字段
- property是实体类的属性。
到此这篇关于mybatis简单resultMap使用详解的文章就介绍到这了,更多相关mybatis resultMap使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
剖析Java中在Collection集合中使用contains和remove为什么要重写equals
这篇文章主要介绍了Collection集合的contains和remove方法详解remove以及相关的经验技巧,通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下2021-09-09Java之判断2000~2023年有哪些年份是闰年并打印输出
这篇文章主要介绍了Java之判断2000~2023年有哪些年份是闰年并打印输出,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2023-12-12
最新评论