mybatis关联配置(一对多配置)

      mybatis框架的关联配置:

    首先假设我们数据库中有两个表,一个表示move,另一个是moveType,move里面有一个字段typeid,与moveType表里面的id相对应。相信大家已经看出来了,一个moveType对应多个move,我们查询move字段的时候,必要的时候得显示moveType的内容,比如我的move的name是:《A计划》,那么对应的我的moveType就是动作片,而不是直接显示的id,有人说这不就是sql的内连接查询么?非也,你用sql的内连接是显示不出来MoveType里面的name的,那么,对于这种情况我们该怎么查询呢?怎么配置呢?

     别急,听我娓娓道来。

为了不让大家迷糊,我还是写全吧,从最基本的实体类开始:

      首先我们创建一个Move的实体类,与数据库中的move表相对应,代码如下:

public class Move {private Long id;               //电影idprivate MoveType type;         //电影类型private String name;           //电影名称private String actor;          //电影主演private String director;       //电影导演private Integer price;         //电影价格
}

      在这里我们省略getter和setter方法,直接在创建一个实体类,MoveType,此类与数据库中的moveType表相对应,代码如下:

public class MoveType {private Integer  	id;private String		typeName;
}

      同样我们省略getter和setter方法,咱们在去建一个dao接口,IMoveDao,与Move类相对应,代码如下:

 

public interface IMoveDao {/*** * @Title: saveMove* @Description: 添加电影* @param @param move* @param @return    设定文件* @return int    返回类型* @throws*/public int  saveMove(Move move);/*** * @Title: queryMoveByTerm* @Description: 动态查询电影* @param @param mt* @param @return    设定文件* @return List<Move>    返回类型* @throws*/public List<Move> queryMoveByTerm(MoveTerm mt);
}

           接着在创建个IMoveTypeDao接口类,与实体类MoveType相对应:

public interface IMoveTypeDao {/*** * @Title: getAllMoveTypes* @Description: 查询全部的电影类型* @param @return    设定文件* @return List<MoveType>    返回类型* @throws*/public List<MoveType>  getAllMoveTypes();
}

        光有了实体类和dao接口还远远不够,正儿八经的配置还没开始呢。

        我们先配置MoveDaoMapper.xml的映射文件,同样,此映射文件对应的是IMoveDao接口,这个比较复杂,咱们慢慢的来,代码如下:

    (1)先把头部拿出来:

<?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">

   (2)映射Move实体类的字段属性

<!-- 映射Move实体类的字段属性 --><!-- type="move" 等价于type="org.entity.Move"--><resultMap type="move" id="moveMapper"><id property="id" column="id"/><result property="name" column="name"/><result property="actor" column="actor"/><result property="director" column="director"/><result property="price" column="price"/>
<!-- 关联MoveType实体类, -->
<!-- type:实体类Move中的type对象 -->
<!-- typeid:数据表Move的typeid -->
<!-- selectMoveType:映射的是实体类MoveType -->
<association property="type" column="typeid"
select="selectMoveType" />
</resultMap>

   (3)映射实体类MoveType

<!-- 映射实体类MoveType --><!-- type="moveType" 等价于type="org.entity.MoveType"一样  --><resultMap id="moveTypeMapper"  type="moveType" ><id property="id" column="id"/><result property="typeName" column="typename"/></resultMap>

   (4)对应的moveType的映射

<!-- selectMoveType与上面MoveType实体类的select相对应 --><!-- moveTypeMapper与上面映射实体类MoveType的id相对应 --><select id="selectMoveType"  resultMap="moveTypeMapper">select * from movetype where id=#{typeid}</select>

   (5)下面就是咱们在Dao层里面方法的sql实现了

	<!-- 添加电影 --><insert id="saveMove" parameterType="move">insert into move(id,typeId,name,actor,director,price)values(#{id},#{type.id},#{name},#{actor},#{director},#{price})</insert><!-- 动态查询电影 --><select id="queryMoveByTerm" parameterType="hashmap" resultMap="moveMapper">select id,typeid,name,actor,director,pricefrom move <where><if test="typeid!=null "> and typeid=#{typeid}</if><if test="name!=null"> and name=#{name}</if><if test="actor!=null"> and actor=#{actor}</if><if test="director!=null"> and director=#{director}</if><if test="smallPrice!=null"> and price between #{smallPrice}  and #{bigPrice}</if></where> </select>

   最后记得用<mapper></mapper>把上面的配置包起来。

到此,我们的MoveDaoMapper.xml的配置就结束了,下面我们来配置一下MoveTypeDaoMapper.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="moveTypeDao"><select id="getAllMoveTypes" resultType="moveType">select * from movetype </select>
</mapper>

      这里面只有一个查询所有电影类型的方法,所以比较简单,重点和难点还是都在MoveDaoMapper.xml里面,最后我在附加一个动态查询的条件类吧:

public class MoveTerm {private Long id;             //电影idprivate MoveType type;      //电影类型private String name;        //电影名称private String actor;       //主演private String director;    //导演private Integer smallPrice; //最低价格private Integer bigPrice;   //最高价格
}

省略getter和setter方法!!

     好了,配置到此结束,有意见的评论区交流,评论区见!!


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/327768.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js模块化历程

转载自 js模块化历程这是一篇关于js模块化历程的长长的流水账&#xff0c;记录js模块化思想的诞生与变迁&#xff0c;展望ES6模块化标准的未来。经历过这段历史的人或许会感到沧桑&#xff0c;没经历过的人也应该知道这段历史。无模块时代在ajax还未提出之前&#xff0c;js还只…

WIN10的IE错误代码inet_e_resource_not_found解决办法

WIN10的IE错误代码inet_e_resource_not_found解决办法 原创 候鸟307183846 最后发布于2019-08-27 13:31:54 阅读数 2413 收藏 展开 解决方案&#xff1a; 1、在Internet选项里&#xff0c;点《连接》标签&#xff0c;按下《局域网设置》按钮&#xff0c;在对话框里&#…

java schema名_关于Schema的名字空间

基本的XML Schema的使用就是这样&#xff0c;下面我们要介绍XML Schema的另外一个核心的部分也是Schema最关键的一个部分&#xff0c;就是关于Schema的名字空间(namespace)的问题。在上面关于XML Schema的介绍中&#xff0c;为了把读者集中到对XML Schema的语法理解上&#xff…

404问题

、配置Tomcat 启动测试&#xff01; 可能遇到的问题&#xff1a;访问出现404&#xff0c;排查步骤&#xff1a; 查看控制台输出&#xff0c;看一下是不是缺少了什么jar包。如果jar包存在&#xff0c;显示无法输出&#xff0c;就在IDEA的项目发布中&#xff0c;添加lib依赖&…

@Valid注解的使用---SpringMvc中的校验框架@valid和@validation的概念及相关使用

https://www.cnblogs.com/charlypage/p/9385146.html 第5章—构建Spring Web应用程序—关于spring中的validate注解后台校验的解析 关于spring中的validate注解后台校验的解析 在后台开发过程中&#xff0c;对参数的校验成为开发环境不可缺少的一个环节。比如参数不能为null&…

如何设计java线程安全类_如何设计线程安全的Java程序

什么是线程安全的(thread-safe)&#xff1f;在java中&#xff0c;线程安全的指的是代码可以在并发的或者多线程的环境下安全的使用或者共享&#xff0c;并且它们都将按照期望的方式运行。任何代码&#xff0c;类或者对象&#xff0c;如果它们在并发的环境中运行表现出的行为与在…

java中的AIO

转载自 java中的AIO简介jdk7中新增了一些与文件(网络)I/O相关的一些api。这些API被称为NIO.2&#xff0c;或称为AIO(Asynchronous I/O)。AIO最大的一个特性就是异步能力&#xff0c;这种能力对socket与文件I/O都起作用。AIO其实是一种在读写操作结束之前允许进行其他操作的I/O…

Mybatis+MySQL动态分页查询数据经典案例(含代码以及测试)

最近在用Mybatis做项目的时候遇到了不少问题&#xff0c;今天我就在这和大家分享一下&#xff0c;稀稀拉拉的研究了两天&#xff0c;终于搞好了&#xff01; 开发人员&#xff1a;1111 开发软件&#xff1a;Myeclipse 用到的框架技术&#xff1a;Mybatis 数据库&#xff1a;MyS…

细说ASP.NET Core静态文件的缓存方式

一、前言 我们在优化Web服务的时候&#xff0c;对于静态的资源文件&#xff0c;通常都是通过客户端缓存、服务器缓存、CDN缓存&#xff0c;这三种方式来缓解客户端对于Web服务器的连接请求压力的。 本文指在这三个方面&#xff0c;在ASP.NET Core中静态文件的实现过程和使用方法…

金田项目的总结

一个搜索框对手机、姓名、内容进行搜索 <select id"list" parameterType"java.lang.String" resultMap"BaseResultMap">select<include refid"Base_Column_List"/>from user_backstagewhere 11 and is_deletedN<if te…

18000 6c java_面向ISO18000-6C协议的无源超高频射频识别标签芯片设计

摘要&#xff1a;This paper presents a new fully integrated wide-range UHF passive RFID tag chip design that is compatible with the ISO18000-6C protocol. In order to reduce the die area, an ultra-low power CMOS voltage regulator without resistors and an are…

Vue异步组件

转载自 Vue异步组件 在大型应用中&#xff0c;我们可能需要将应用分割成小一些的代码块&#xff0c;并且只在需要的时候才从服务器加载一个模块。为了简化&#xff0c;Vue 允许你以一个工厂函数的方式定义你的组件&#xff0c;这个工厂函数会异步解析你的组件定义。Vue 只有在…

文章中文字乱码问题解决办法集合

乱码问题 测试步骤&#xff1a; 1、我们可以在首页编写一个提交的表单 <form action"/e/t" method"post"><input type"text" name"name"><input type"submit"> </form>2、后台编写对应的处理类 …

.NET开源两年之后社区贡献如何

微软在 2014 年开源了 .NET 核心框架&#xff0c;欢迎社区贡献代码。2015 年&#xff0c;一位 .NET 开发者分析了开源一年之后的社区贡献。2016 年年底又到了&#xff0c;这位开发者再次发表文章&#xff0c;分析了 .NET 开源两年之后的情况。 这一次他分析了 15 个 .NET 开源项…

java把控件跑挂了_Java代码动态修改 ConstraintLayout 内控件布局的辅助类

##上图ConstraintUtil.javaimport android.support.annotation.IdRes;import android.support.constraint.ConstraintLayout;import android.support.constraint.ConstraintSet;import android.transition.TransitionManager;/*** Created by xiaolei on 2017/9/8.*/public cla…

json vs obj

var obj {a: Hello, b: World}; //这是一个对象&#xff0c;注意键名也是可以使用引号包裹的 var json {"a": "Hello", "b": "World"}; //这是一个 JSON 字符串&#xff0c;本质是一个字符串在 JavaScript 语言中&#xff0c;一切都…

Vue动态组件

转载自 Vue动态组件 在动态组件上使用 keep-alive 我们之前曾经在一个多标签的界面中使用 is 特性来切换不同的组件&#xff1a; <component v-bind:is"currentTabComponent"></component> 当在这些组件之间切换的时候&#xff0c;你有时会想保持这些组…

ASP.NET Core Kestrel部署HTTPS

ASP.NET Core配置 Kestrel部署HTTPS。现在大部分网站已经部署HTTPS&#xff0c;大家对于安全越来越重视。 今天简单介绍一下ASP.NET Core 部署HTTPS&#xff0c;直接通过配置Kestrel。大家也可以通过前置Nginx来部署HTTPS。 下面直接进入正题。 新建项目并添加引用 新建一个ASP…

Mybatis+mysql动态分页查询数据案例——分页工具类(Page.java)

package cn.bdqn.mhouse.util;import java.util.ArrayList; import java.util.List;import cn.bdqn.mhouse.entity.House;/*** * * 项目名称&#xff1a;mhouse * 类名称&#xff1a;Page * 类描述&#xff1a; 分页的工具类 * 创建人&#xff1a;Mu Xiongxiong …