---上节课我们讲了Mybatis的单表增删改查,关于代码我注释的比较详细,我相信初学的小伙伴还是多少能有一些收获的.
- 第一集传送门:http://blog.csdn.net/jacxuan/article/details/62040956
-
---经过一段时间的沉寂之后,我们也应该提升一点难度,讲讲现在主流的Spring+Mybatis+Maven框架对数据库的操作了.
---Spring和Mybatis的工作原理在这个我就不多做赘述,在代码中如果有必要,我会解释.
接着上次的项目,我们需要在Maven的pom.xml中添加Spring和tomcat以及ojdbc的依赖.
<properties>
<!-- spring版本号 -->
<spring.version>4.3.4.RELEASE</spring.version>
<!-- mybatis版本号 -->
<mybatis.version>3.4.2</mybatis.version>
<jdk.version>1.8</jdk.version>
</properties>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!--Spring核心包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency> <dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.2</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!-- mybatis/spring包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<!--jsp页面中将会使用jstl表达式-->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!--非必需,如果你报index_jsp.class错误,大部分情况下将这个依赖删除后同步Maven可以解决-->
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-catalina</artifactId>
<version>8.0.32</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.7.4</version>
</dependency> <dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.7.4</version>
</dependency> <dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.7.4</version>
</dependency>
</dependencies>

如果你还不清楚怎么创建Maven项目,在这里讲述可能过于冗长,请参考我的另一篇blog

传送门:http://blog.csdn.net/JacXuan/article/details/63322034

——-普通的增删改查在这里就不多做赘述,我们讲讲级联表的操作怎么实现.

–首先,你得在一方实体中包含你多方的集合,在多方实体中加入一方的对象.并分别提供他们的get set方法

如:

private List emps; —–private Dept dept

之后需要我们在Mybatis中与实体对应的Mapper文件进行配置

<resultMap type="Emp" id="empResultMap">
<!--其他映射字段上一篇文章中已给出-->
<!--property:一方的类型,这里是实体类声明(Dept dept)的字段;column:数据库中这个字段的实际列明,你可以理解为外键的列名,select:通过select里面的方法查询到一方表的数据,这样以后在页面就可以直接读取-->
<association property="dept" column="deptNo" select="com.jacx.mapper.DeptMapper.queryById"></association>
</resultMap>
<!--这是一方对应字段的配置,具体意思和多方差异不大,不多赘述-->
<collection property="emps" ofType="Dept" column="deptNo"
select="com.jacx.mapper.EmpMapper.queryByType"></collection>
```级联操作除了增加的语句有些变化之外,改/查/删并无区别,增加语句也只是把外键字段改为#{实体中的外键名(dept).关联表的ID(deptNo)},如果有多个外键值,同理.
----写完查询语句后,我们就可以像ssh一样写DAO层代码了!
--不知道各位小伙伴有没有想到,Mybatis的Mapper不就是和Dao一样对数据库进行操作吗,那么我们还需不需要DAO层呢?
- - 再想想,Service层需要调用Mapper的方法,但是Mapper是个xml文件,是不能通过service调用里面的业务逻辑的.所以,我们需要一个和Mapper一样的DAO接口,来满足service的要求.这个DAO接口要求我们名称必须要和对应Mapper文件完全一致,除非你在Spring的配置文件中进行声明!
- - - 我们不做过多讲解,直接创建.
-DAO -- `public List<Emp> queryAll(Pager<Emp> pager);`
public void add(Emp emp);
-Service `public void add(Emp emp);`
-serviceImpl <div class="se-preview-section-delimiter"></div>

@Service

public class EmpService implements IEmpService {

@Autowired

private EmpMapper empMapper;

public void add(Emp emp) {

empMapper.add(emp);

}

    action代码(注意action的命名必须是*Action/*Actions)除此之外都会运行报错!

<div class="se-preview-section-delimiter"></div>
@Controller

@RequestMapping(“/emp”)

public class EmpAction {

@Autowired
private IEmpService empService; @RequestMapping("add")
public String add(Emp emp){
empService.add(emp);
return "redirect:/emp/queryAll";
}

“`

这里我们队多表最具代表性的增加操作进行了演示,其他操作同理!小伙伴们自己琢磨琢磨,有不同的可以在blog中私我,或者加我qq:1287538157交流.接下来几天将会实现更复杂的功能.

SSMybatis整合(二) -- 加入SpringMVC进行多表级联操作的更多相关文章

  1. 【EF学习笔记10】----------主从表级联操作

    主从表 级联新增 Console.WriteLine("=========主从表 级联新增=========="); using (var db = new Entities()) ...

  2. hibernate 注释多表 级联操作

    一对多模型(单向) 说明: 一个客户对应多个地址,通过客户可以获得该客户的多个地址的信息.客户和地址是一对多的关系,并且客户与地址是单向关联的关系. 映射策略 # 外键关联:两个表的关系定义在一个表中 ...

  3. mysql数据库:分表、多表关联、外键约束、级联操作

    一.分表.外键.级联.多对一 二.多对多 三.一对一 一.分表.外键.级联.多对一 将部门数据与员工数据放到同一张表中会造成 数据重复 结构混乱 扩展维护性差 需要分表 create table de ...

  4. SpringMVC入门二:SSM整合(spring+springmvc+mybatis)

    一.编程步骤 1.引入依赖 spring.springmvc.mybatis.mybatis-spring.mysql.druid.log4j.servlet-api.jstl.fastjson 2. ...

  5. 第6章—渲染web视图—SpringMVC+Thymeleaf 处理表单提交

    SpringMVC+Thymeleaf 处理表单提交 thymleaf处理表单提交的方式和jsp有些类似,也有点不同之处,这里操作一个小Demo,并说明: 1.demo的结构图如下所示: pom.xm ...

  6. JMS学习之路(一):整合activeMQ到SpringMVC

    JMS的全称是Java Message Service,即Java消息服务.它主要用于在生产者和消费者之间进行消息传递,生产者负责产生消息,而消费者负责接收消息.把它应用到实际的业务需求中的话我们可以 ...

  7. JMS学习之路(一):整合activeMQ到SpringMVC 转载:http://www.cnblogs.com/xiaochangwei/p/5426639.html

    JMS的全称是Java Message Service,即Java消息服务.它主要用于在生产者和消费者之间进行消息传递,生产者负责产生消息,而消费者负责接收消息.把它应用到实际的业务需求中的话我们可以 ...

  8. SSM整合1(springMVC+mybatis)

    整合目标:控制层采用springmvc.持久层使用mybatis实现 整合思路: Dao层: 1.SqlMapConfig.xml,空文件即可,但是需要文件头. 2.applicationContex ...

  9. Java开发学习(二十七)----SpringMVC之Rest风格解析及快速开发

    一.REST简介 REST(Representational State Transfer),表现形式状态转换,它是一种软件架构风格 当我们想表示一个网络资源的时候,可以使用两种方式: 传统风格资源描 ...

随机推荐

  1. 跨域请求方式之Jsonp形式

    在浏览器端才有跨域安全限制一说,而在服务器端是没有跨域安全限制的. 在两个异构系统(开发语言不同)之间达到资源共享就需要发起一个跨域请求. 而浏览器的同源策略却限制了从一个源头的文档资源或脚本资源与来 ...

  2. python链接mysql以及mysql中对表修改的常用语法

    MySQL是一个关系型数据库管理系统 ,其体积小.速度快.总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库.在使用过程中不总是和它打交道,导致使用时候都得 ...

  3. 转:Super Awesome Fuzzing, Part One

    转:https://labsblog.f-secure.com/2017/06/22/super-awesome-fuzzing-part-one/ An informative guide on u ...

  4. 用jquery实现文章自动生成二级目录

    前段时间有个同学问有没有办法在博客园上发一篇文章然后自动生成文章的目录.之前不知道该怎么做这几天看了些jquery之后觉得还是容易的. 一级目录 一级目录的思路很简单,找出作为一级标题的元素,在某个地 ...

  5. 浮生半日:探究Python字节码

    好吧!“人生苦短,请用Python”,作为python爱好者以及安全从业者,而且最近也碰到了一些这方面的问题,懂点python字节码还是很有必要的. Python是一门解释性语言,它的具体工作流程如下 ...

  6. shell 执行结果赋给变量

    #将pwd的执行结果放到变量value中保存, value=$(pwd) 另一种方法: value=`pwd`

  7. 文本转化工具dos2unix

    文本转化工具dos2unix   由于历史原因,各个平台使用的文本编码规范不同,导致了同一文本在不同平台中显示不同.例如,Windows和Linux的换行符号不同,会造成多行文本显示混乱.为了解决这个 ...

  8. 【Trie】MIPT-2016 Pre-Finals Workshop, Taiwan NTU Contest, Sunday, March 27, 2016 Problem B. Be Friends

    题意:一个n个点的完全图,点带权,边权是两端点点权的异或值.问你最小生成树. 一个性质,把所有点按照二进制最高位是否为1划分为2个集合,那么这两个集合间只会有一条边.可以递归处理. 把所有点建成01T ...

  9. 【bfs+优先队列】POJ2049-Finding Nemo

    基本上算是普通但略有些繁琐的广搜.给出的墙面和门的坐标为点,而Nemo位于方格中. [思路] 首先思考一下如何存储下整个坐标系.我们预先约定,用一个方格的左下角顶点坐标来作为这个方格的坐标.map[i ...

  10. CSS3新增

    1 CSS3 的选择器 1.1 基本选择器 tagName .className #idName * slector,selector,selector 1.2 层级选择器 selector1 sel ...