MyBatis的resultMap
1.大家学习MyBatis时,可能会碰到实体类属性跟数据库字段不同的情况
如:数据库 ------ 实体类
stuname ----> name
即: 数据库中的stuname字段对应的事实体类里的name属性
如果这时,我们要用常规的查询方法时是不能正确查询到stuname的值的,它会显示为null
这时,我们可以使用我们的resultMap来解决这一问题。。。
源码介绍与对比:
1.Student.java (实体类)
package cn.zhang.entity; import java.util.Date; /**
* 学生实体类
*
*/
public class Student { private Integer stuno;
private String name;
private Integer stuage;
private Date studate; @Override
public String toString() {
return "Student [stuno=" + stuno + ", name=" + name + ", stuage="
+ stuage + ", studate=" + studate + "]";
} public Integer getStuno() {
return stuno;
} public void setStuno(Integer stuno) {
this.stuno = stuno;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Integer getStuage() {
return stuage;
} public void setStuage(Integer stuage) {
this.stuage = stuage;
} public Date getStudate() {
return studate;
} public void setStudate(Date studate) {
this.studate = studate;
} }
2.mybatis-config.xml (MyBatis的配置文件)
<?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>
<!-- 配置别名 -->
<typeAliases>
<!--方式一: 按类型名定制别名 -->
<typeAlias type="cn.zhang.entity.Student" alias="Student" />
<!--方式二: 拿当前指定包下的简单类名作为别名 -->
<!-- <package name="cn.zhang.entity"/> -->
</typeAliases>
<environments default="mysql">
<environment id="mysql">
<!-- 使用jdbc的事务 -->
<transactionManager type="JDBC" />
<!-- 使用自带的连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/y2161" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="cn/zhang/dao/StudentDAO.xml" />
</mappers>
</configuration>
3.MybatisUtil.java (获得session的工具类)
package cn.zhang.util; import java.io.IOException;
import java.io.Reader; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; /**
* 获得session的工具类
*
*/
public class MybatisUtil { private static String config = "mybatis-config.xml";
static Reader reader;
static {
try {
reader = Resources.getResourceAsReader(config);
} catch (IOException e) {
e.printStackTrace();
}
}
private static SqlSessionFactory factory = new SqlSessionFactoryBuilder()
.build(reader); // 提供一个可以获取到session的方法
public static SqlSession getSession() throws IOException { SqlSession session = factory.openSession();
return session;
}
}
4.StudentDao.java (定义方法的接口)
package cn.zhang.dao; import java.io.IOException;
import java.util.List; import cn.zhang.entity.Student; public interface StudentDao { /**
* 查询所有记录
* @return
* @throws IOException
*/
public List<Student> findAll() throws IOException; }
5.StudentDaoImpl.java (实现接口方法的实现类)
package cn.zhang.dao.impl; import java.io.IOException;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import cn.zhang.dao.StudentDao;
import cn.zhang.entity.Student;
import cn.zhang.util.MybatisUtil; public class StudentDaoImpl implements StudentDao {
SqlSession session; public StudentDaoImpl() throws IOException {
session = MybatisUtil.getSession();
} /**
* 查询所有
*/
public java.util.List<Student> findAll() throws IOException {
List<Student> list = session.selectList("findAll");
session.close();
return list;
} }
6.StudentDAO.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="cn.zhang.dao"> <!-- 查询所有 -->
<select id="findAll" resultType="Student">
select * from student
</select> </mapper>
用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="cn.zhang.dao"> <!-- 结果映射,指定了数据库和实体类中的对应值 -->
<resultMap type="Student" id="findstudent">
<result property="name" column="stuname" />
</resultMap> <!-- 查询所有 -->
<select id="findAll" resultMap="findstudent">
select * from student
</select> </mapper>
7.log4j.properties
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n ### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c\:mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n ### set log levels - for more verbose logging change 'info' to 'debug' ### log4j.rootLogger=debug, stdout
8..MyTest.java (测试类)
package cn.zhang.test; import java.io.IOException;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import cn.zhang.dao.StudentDao;
import cn.zhang.dao.impl.StudentDaoImpl;
import cn.zhang.entity.Student; public class MyTest { StudentDao dao;
@Before
public void initData() throws IOException{
dao=new StudentDaoImpl();
} /**
* 查询所有学生
* @throws IOException
*/
@Test
public void findAll() throws IOException{
List<Student> list = dao.findAll();
for (Student student : list) {
System.out.println("编号: "+student.getStuno()+"姓名:"+student.getName());
} } }
对应StudentDAO.xml中常规配法的结果:
对应StudentDAO.xml中resultMap配法的结果:
这样就可以成功的拿到值了,这就是resultMap的作用。
是不是很简单,这里只是记录一下。。
MyBatis的resultMap的更多相关文章
- Mybatis的ResultMap的使用
本篇文章通过一个实际工作中遇到的例子开始吧: 工程使用Spring+Mybatis+Mysql开发.具体的业务逻辑很重,对象之间一层一层的嵌套.和数据库表对应的是大量的model类,而和前端交互的是V ...
- 使用MyBatis的resultMap高级查询时常用的方式总结
以下内容已经通过楼主测试, 从pd设计数据库到测试完成, 之前楼主也没有过Mybatis 使用resultMap觉得有点乱,最近抽出时间总结了一下也算对MyBatis的resultMap进行一次系统的 ...
- Mybatis的ResultMap的使用(转)
本篇文章通过一个实际工作中遇到的例子开始吧: 工程使用Spring+Mybatis+Mysql开发.具体的业务逻辑很重,对象之间一层一层的嵌套.和数据库表对应的是大量的model类,而和前端交互的是V ...
- 【MyBatis】ResultMap
[MyBatis]ResultMap 转载:https://www.cnblogs.com/yangchongxing/p/10486854.html 支持的 JDBC 类型为了未来的参考,MyBat ...
- 使用mybatis的resultMap进行复杂查询
记录下mybatis的集合查询中碰到的问题 https://jaychang.iteye.com/blog/2357143 MyBatis ofType和javaType区别 https: ...
- mybatis 使用resultMap实现关联数据的查询(association 和collection )
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "- ...
- mybatis 使用resultMap实现数据库的操作
resultType:直接表示返回类型 resultMap:对外部resultMap的引用 二者不能同时使用 创建一个实体类Role和User public class Role { private ...
- Mybatis之ResultMap一个简短的引论,关联对象
基础部分能够查看我的还有一篇博客http://blog.csdn.net/elim168/article/details/40622491 MyBatis中在查询进行select映射的时候.返回类型能 ...
- SSM框架开发web项目系列(三) MyBatis之resultMap及关联映射
前言 在上篇MyBatis基础篇中我们独立使用MyBatis构建了一个简单的数据库访问程序,可以实现单表的基本增删改查等操作,通过该实例我们可以初步了解MyBatis操作数据库需要的一些组成部分(配置 ...
随机推荐
- 老司机学新平台 - Xamarin Forms开发框架之MvvmCross插件精选
在前两篇老司机学Xamarin系列中,简单介绍了Xamarin开发环境的搭建以及Prism和MvvmCross这两个开发框架.不同的框架,往往不仅仅使用不同的架构风格,同时社区活跃度不同,各种功能模块 ...
- .NET 基础 一步步 一幕幕 [.NET 系列预热]
.NET 系列预热 .NET : 一般指.Net Framework框架.一种平台,一种技术. .NET 下的编程语言有C#,F#,VB:在这里我们主要讲述的C#. .NET 一般都能干什么呢? l ...
- Hello Blog
转眼之间,工作已经快五年了. 五年走的时候不觉得,当真正过来了,一回头,才真正体会到什么叫时间匆匆. 做了五年的技术,算是多有波折.想一想,做技术真的挺需要耐得住寂寞的,毕竟花花世界,压力太大,诱惑太 ...
- 使用hexo搭建github.io博客(一)
使用github.io可以搭建一个自己的博客,把静态文件项目托管到github上,可以写博客,可以使用markdown语法,也可以展示作品.灵活性高.但是有较大的难度. node,git版本变化日新月 ...
- LINQ系列:Linq to Object串联操作符
串联是一个将两个对象联接在一起的过程.在LINQ中,串联操作将两个集合合并成一个集合,通过Concat操作符实现. Concat 1>. 原型定义 public static IQueryabl ...
- 【Win10 应用开发】人脸识别
可能你会认为人脸识别用起来会很复杂,老周当初也这么想,但通过实际操作后,我发现非然. 经过微软封装的东西,向来都是复杂问题简单化,只要用得舒心,代码越少越好,用最少的代码做最多的事情,此为大师境界也. ...
- jQuery 2.0.3 源码分析 回调对象 - Callbacks
源码API:http://api.jquery.com/jQuery.Callbacks/ jQuery.Callbacks()是在版本1.7中新加入的.它是一个多用途的回调函数列表对象,提供了一种强 ...
- Android音频开发之AudioTrack实时播放
前言: 其实在Android中录音可以用MediaRecord录音,操作比较简单.但是不能对音频进行处理.考虑到项目中做的是实时语音只能选择AudioRecord进行录音.然后实时播放也只能采用Aud ...
- AngularJS之Filter(二)
前言 本节我们来讲讲AngularJS中主要的部分之一,那就是过滤器,当从后台获取到的数据呈现到视图上时,此时可能需要对数据进行相应的转换,此时我们可以通过过滤器在不同页面进行不同数据的格式抓换,在A ...
- Web APi之EntityFramework【CRUD】(三)
前言 之前我们系统学习了EntityFramework,个人觉得有些东西不能学了就算完了,必须要学以致用,在Web API上也少不了增(C).删(D).改(U).查(R).鉴于此,我们通过EF来实现W ...