mybatis使用全注解的方式案例(包含一对多关系映射)

前面我写过ssh:ssh(Spring+Spring mvc+hibernate)简单增删改查案例 和ssm:ssm(Spring+Spring mvc+mybatis)的案例,需要了解的可以去看看,今天我写了一下ssm(spring+springmvc+mybatis)全注解的方式又重新写了一遍两表增删改查的案例,其中别的地方都一样,就是有几个文件不一样,
1.其中:
mybatis-config.xml中:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings><!-- 打印查询语句 --><setting name="logImpl" value="STDOUT_LOGGING" />
</settings>
<typeAliases><typeAlias alias="Emp" type="org.entity.Emp"/><typeAlias alias="Dept" type="org.entity.Dept"/>
</typeAliases><mappers><mapper class="org.dao.IEmpMapper"/><mapper class="org.dao.IDeptMapper"/></mappers>
</configuration>

注意看, ,mapper后面是class,不是resource,一定要注意
2.还有:我们不需要EmpMapper.xml和DeptMapper.xml文件,直接删掉就可以了
3.修改我们的IEmpMapper接口为:

package org.dao;import java.util.List;import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.entity.Emp;public interface IEmpMapper {//根据编号删除.@Delete("delete from emp where eid = #{eid} ")int deleteByPrimaryKey(Integer eid);//添加@Insert("insert into emp (eid, ename, eage,  edate, did) " +"values (#{eid,jdbcType=INTEGER}," +" #{ename,jdbcType=VARCHAR}, " +"#{eage,jdbcType=INTEGER},  " +"#{edate,jdbcType=TIMESTAMP}," +" #{did,jdbcType=INTEGER})")int insert(Emp record);//根据编号查询@Select("select * from emp where eid = #{eid}")@Results({@Result(id=true,property="eid",column="eid"),@Result(property="ename",column="ename"),@Result(property="eage",column="eage"),@Result(property="dept",column="did",javaType=org.entity.Dept.class,one=@One(select="org.dao.IDeptMapper.selectByPrimaryKey"))})Emp selectByPrimaryKey(Integer eid);//修改@Update("pdate emp " +" set ename = #{ename,jdbcType=VARCHAR}, " +" eage = #{eage,jdbcType=INTEGER}, " +" edate = #{edate,jdbcType=TIMESTAMP}, " +"  did = #{did,jdbcType=INTEGER} " +"where eid = #{eid,jdbcType=INTEGER}")int updateByPrimaryKey(Emp record);//查询全部@Select("select * from emp")@Results({@Result(id=true,property="eid",column="eid"),@Result(property="ename",column="ename"),@Result(property="eage",column="eage"),@Result(property="dept",column="did",javaType=org.entity.Dept.class,one=@One(select="org.dao.IDeptMapper.selectByPrimaryKey"))})List<Emp> findEmpAll();//根据部门编号查询员工信息@Select("select * from emp where did = #{dids}")@Results({@Result(id=true,property="eid",column="eid"),@Result(property="ename",column="ename"),@Result(property="eage",column="eage"),@Result(property="dept",column="did",javaType=org.entity.Dept.class,one=@One(select="org.dao.IDeptMapper.selectByPrimaryKey"))})List<Emp> findEmpByDept(int did);}

4.修改我们的IDeptMapper接口为:

package org.dao;import java.util.List;import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Many;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.entity.Dept;public interface IDeptMapper {@Delete("delete from dept where id = #{id}")int deleteByPrimaryKey(Integer id);@Insert("insert into dept (id, name, loc )" +" values (#{id,jdbcType=INTEGER}, " +"#{name,jdbcType=VARCHAR}, " +"#{loc,jdbcType=VARCHAR})")int insert(Dept record);@Select("select * from dept where id  = #{id}")@Results({@Result(id=true,property="id",column="id"),@Result(property="name",column="name"),@Result(property="loc",column="loc"),@Result(property="empList",column="id",javaType=List.class,many=@Many(select="org.dao.IEmpMapper.findEmpByDept"))})Dept selectByPrimaryKey(Integer id);@Update("update dept " +"set name = #{name,jdbcType=VARCHAR}, " +" loc = #{loc,jdbcType=VARCHAR} " +"where id = #{id,jdbcType=INTEGER}")int updateByPrimaryKey(Dept record);@Select("select * from dept")List<Dept> findDeptAll();
}

然后就可以正常的主外键关联,包括查询显示,如图:
显示员工信息

需要注意的是主外键映射,我总结了以下的方法,大家可以进行看一下:

一:
@Select("select * from dept where id  = #{id}")@Results({@Result(id=true,property="id",column="id"),@Result(property="name",column="name"),@Result(property="loc",column="loc"),@Result(property="实体类里面的属性",column="id",javaType=List.class,many=@Many(select="多方的接口.根据一方的编号查询多方的集合"))})Dept selectByPrimaryKey(Integer id);多://根据编号查询@Select("select * from emp where eid = #{eid}")@Results({@Result(id=true,property="eid",column="eid"),@Result(property="ename",column="ename"),@Result(property="eage",column="eage"),@Result(property="实体中的对象",column="外键列",javaType=一方类.class,one=@One(select="一方接口.根据一方编号查询信息"))})Emp selectByPrimaryKey(Integer eid);//查询全部@Select("select * from emp")@Results({@Result(id=true,property="eid",column="eid"),@Result(property="ename",column="ename"),@Result(property="eage",column="eage"),@Result(property="实体中的对象",column="外键列",javaType=一方类.class,one=@One(select="一方接口.根据一方编号查询信息"))})List<Emp> findEmpAll();//根据部门编号查询员工信息@Select("select * from emp where did = #{dids}")@Results({@Result(id=true,property="eid",column="eid"),@Result(property="ename",column="ename"),@Result(property="eage",column="eage"),@Result(property="实体中的对象",column="外键列",javaType=一方类.class,one=@One(select="一方接口.根据一方编号查询信息"))})List<Emp> findEmpByDept(int did);

按照这个方法配置保证阿弥陀佛了!!!
下面就是源码:
控制器:
DeptController
EmpController
Dao层:
IDeptMapper
IEmpMapper
DaoImpl层:
DeptMapperImpl
EmpMapperImpl
实体类层:
Dept
Emp
Service层:
IDeptService
IEmpService
ServiceImpl层:
DeptServiceImpl
EmpServiceImpl
配置文件:
applicationContext-servlet.xml
applicationContext.xml
mybatis-config.xml
web.xml
前台页面:
index.jsp
saveDept.jsp
saveEmp.jsp
showDept.jsp
showEmp.jsp
updateDept.jsp
updateEmp.jsp

微信公众号

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

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

相关文章

Visual Studio 2017全面上市

自从1997年第一版发布的20年以来&#xff0c;微软Visual Studio开发工具一向以易学易用、功能齐全而闻名&#xff0c;帮助开发者以简驭繁&#xff0c;即使面对越来越快速的交付压力&#xff0c;也能大幅提高生产力&#xff0c;好整以暇。对于Visual Studio的使用者而言&#xf…

Visual Studio 2017发布会:黄金时代的家族聚会

美国时间三月七日&#xff08;北京2017年3月8日&#xff09;&#xff0c;微软正式发布了Visual Studio 2017&#xff0c;自己旗舰开发工具的最新版本。同日发布的主要产品还有 .NET Core Tooling 1.0.NET Core 微服务实例Visual Studio for Mac Preview 4Visual Studio Mobile …

java开发可以转什么软件有哪些_转行开发软件Java编程必须会什么

原标题&#xff1a;转行开发软件Java编程必须会什么要想开发软&#xff0c;Java编程必须会什么&#xff1f;最起码的就是逻辑思维要好&#xff0c;只要不是特别差就没有什么问题。数学是相对比较能够体现出一个人的逻辑思维如何。先想想自己以前上学的时候&#xff0c;数学成绩…

2017蓝桥杯省赛---java---B---2(纸牌三角形)

题目描述 纸牌三角形 思路分析 全排列特殊去重 ans/6 代码实现 package com.atguigu.TEST;class Main{public static int[] a{1,2,3,4,5,6,7,8,9};public static int ans;public static void f(int k){if(k9){int x1 a[0] a[1] a[2] a[3];int x2 a[3] a[4] a[5] …

微软开源基于云的生理学研究工具

Bio Model Analyzer是一款微软基于云的生理学研究工具&#xff0c;可以用于对化细胞交互和通信进行建模&#xff0c;现已经在GitHub上开源&#xff0c;在MIT许可之下。 研究人员使用Bio Model Analyzer (BMA) 去创建计算机模型&#xff0c;该模型可以比较健康和不健康细胞内的处…

2017蓝桥杯省赛---java---B---3(承压计算)

题目描述 7 5 8 7 8 8 9 2 7 2 8 1 4 9 1 8 1 8 8 4 1 7 9 6 1 4 5 4 5 6 5 5 6 9 5 6 5 5 4 7 9 3 5 5 1 7 5 7 9 7 4 7 3 3 1 4 6 4 5 5 8 8 3 2 4 3 1 1 3 3 1 6 6 5 5 4 4 2 9 9 9 2 1 9 1 9 2 9 5 7 9 4 3 3 7 7 9 3 6 1 3 8 8 3 7 3 6 8 1 5 3 9 5 8 3 8 1 8 3 3 8 3 2 3…

[C#7] 1.Tuples(元组)

1. 老版本代码 class Program { static void Main(string[] args) { var fullName GetFullName(); Console.WriteLine(fullName.Item1);// Item1,2,3不能忍&#xff0c;&#xff0c;, Console.WriteLine(fullName.Item2); Console.WriteLine(fullName.Item3); } static Tuple&…

mysql 行转列分级输出_MySQL如何实现行转列分级输出?_MySQL

概述好久没写SQL语句&#xff0c;今天看到问答中的一个问题&#xff0c;拿来研究一下。问题链接&#xff1a;关于Mysql 的分级输出问题情景简介学校里面记录成绩&#xff0c;每个人的选课不一样,而且以后会添加课程&#xff0c;所以不需要把所有课程当作列。数据表里面数据如下…

Visual Studio 2017正式版离线安装及介绍

Visual Studio 2017 RTM正式版离线安装及介绍。 首先至官网下载&#xff1a;https://www.visualstudio.com/zh-hans/downloads/ VS 2017 正式版介绍&#xff1a; https://www.visualstudio.com/zh-hans/vs/whatsnew/ VS 2017 离线模式只离线.NET Core部分&#xff1a; Visual S…

Linux下查找命令

转载自 Linux下查找命令 一.Linux查找文件的相关命令 常 用 命 令 简要中文说明 程序所在目录 more 分页显示一个文件或任何输出结果 /bin less 分页显示一个文件并且可以回头 /usr/bin whereis 寻找文件工具 /usr/bin find 寻找文件工具 /usr/bin locate 寻…

Visual Studio 2017 新功能(上)

开发&#xff1a;快速导航、编写并修复代码 新的安装体验 - 降低了最小内存需求量以实现更快、更定制化的安装&#xff0c;并且支持脱机安装。 Visual Studio IDE - 大幅改进了 Visual Studio 2017&#xff0c;包括减少启动和解决方案加载时间、改进登录和标识、改进代码导航以…

2018蓝桥杯省赛---java---B---1(第几天)

题目描述 思路分析 31 29 31 30 4 125 答案 125

java 组件化_(原创)搭建一个组件化的监控平台

最近看到一位同事正在开发一个监控软件&#xff0c;要求就是通过针对服务器现有的一些接口&#xff0c;通过这些接口返回的数据进行分析&#xff0c;如果监控的值到达预先设定的范围则通过短信的方式发送给管理员。从整个开发的功能上来看是一个比较单一也很明确的功能&#xf…

微软发招,苹果发飙,React Native躺枪

这两天苹果和微软互怼&#xff0c;用脚本热更新的朋友要谨慎过 iOS 审核。 早上有Q群里面在讨论最近用 JavaScript 做为脚本层&#xff0c;在苹果商店审核遭拒的情况。 从目前多数信息来看&#xff0c;cocos2d-js 和 creator 这样用 SpiderMonkey JSB 技术栈的游戏情况尚好&am…

2018蓝桥杯省赛---java---B---2(方格计数)

题目描述 思路分析 圆的对称性 代码实现 package com.atguigu.TEST;class Main{public static void main(String[] args) {int ans0;for (int i 1; i < 1000; i) {for (int j 1; j < 1000; j) {if(i*ij*j<1000*1000){ans;}}}System.out.println(ans*4);//向四边发…

Visual Studio 2017 新功能(下)

调试和诊断 运行时单击 只需在调试运行到此行时单击代码行旁边的图标。 无需再设置临时断点&#xff0c;也不必再执行多个步骤来执行代码和在所需行停止。 现在&#xff0c;调试器下停在中断状态时&#xff0c;“运行时单击”图标会在鼠标悬停位置的代码行旁边巧妙显示。 将鼠…

2018蓝桥杯省赛---java---B---3(复数幂)

题目描述 思路分析 代码实现 package com.atguigu.TEST;import java.io.File; import java.io.FileNotFoundException; import java.io.PrintStream; import java.math.BigInteger;class Main{public static void main(String[] args) {BigInteger two BigInteger.valueOf(2)…

聚簇索引和聚簇索引介绍

转载自 聚簇索引和聚簇索引介绍 一. 什么是索引和建立索引的好处 什么是索引 在数据库中&#xff0c;索引的含义与日常意义上的“索引”一词并无多大区别&#xff0c;与书中的索引一样&#xff0c;数据库中的索引使您可以快速找到表中的特定信息。索引包含从表中一个或多个…

admiration音标是什么_英语admiration的意思解释|读音发音|相关词语_英语词典_词林在线词典...

admirationad.mi.ra.tion[ˌdmərєʃən; ˌdməˋrєiʃn]《admire 的名词》名词1 (U) 赞叹,钦佩,赞赏; 憧憬,羡慕[of, for]feel [have] ~ for? 钦佩 [佩服] …in ~ of? 赞赏…with ~赞赏 [钦佩] 地2 [the ~]众人赞赏之对象[of]She is the ~ of her students.她是学生们钦慕…

Visual Studio 20周年软件趋势随想

从2002年开始&#xff0c;.net让开发人员能快速构建和部署应用程序&#xff0c;便捷的开发windows和web服务器应用&#xff0c;同时著名的hacker Miguel de Icaza ,Miguel 为了GNOME项目启动了另一存志高远的项目&#xff1a;Mono&#xff0c;一个Microsoft .NET Framework的自…