mybatis resultMap使用 mybatis简单resultMap使用详解
Splay_Tree 人气:0想了解mybatis简单resultMap使用详解的相关内容吗,Splay_Tree在本文为您仔细讲解mybatis resultMap使用的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:mybatis,resultMap使用,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是实体类的属性。
加载全部内容