15 SSM框架整合
- 搭建Spring、Springmvc框架
- 搭建mybatis的框架程序
- 整合mybaits SQLSEssionFactory,Mapper 交给 IOC容器管理
15.1 创建Springmvc的程序
- 创建web项目
- 添加依赖
- spring-webmvc
- jstl
- lombok
- junit :test
- servlet-api : provide
- jsp-api :provide
- jackson
15.1.1 POM文件如下:
xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.neuedu.ssm</groupId>
<artifactId>p21-ssm</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>p21-ssm Maven Webapp</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<spring.version>5.2.4.RELEASE</spring.version>
<junit.version>4.13.2</junit.version>
<jstl.version>1.2</jstl.version>
<jackson.version>2.9.9.1</jackson.version>
<lombok.version>1.18.16</lombok.version>
<servlet.version>4.0.1</servlet.version>
<jsp.version>2.2</jsp.version>
</properties>
<dependencies>
<!-- 测试框架 start -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<scope>test</scope>
</dependency>
<!-- 测试框架 end -->
<!-- SpringMVC start -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- SpringMVC start -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<!--解析对象为json-->
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<!-- 不想写 setter getter to.....可以使用 lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>${jsp.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
15.1.2 配置前端控制器
在web.xml中配置前端控制器DispatcherServlet
xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--配置前端控制器 -->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/spring-mvc.xml</param-value>
</init-param>
<!-- load-on-startup 正数:启动容器(Tomcat)的时候加载Servlet-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
15.1.3 配置SpringMVC文件
在resources目录中创建ioc的配置文件, spring/spring-mvc.xml
包扫描
mvc:annoation-driver :配置HandlerMapping 、HandlerAdapter、ViewResolver
ViewResolver :配置视图解析器 配置前缀、后缀。
- 日期转换(全局)
配置默认的静态资源处理器
全局的异常处理器
xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--包扫描的形式 注解驱动 -->
<context:component-scan base-package="com.neuedu"/>
<!--mvc的注解启动 -->
<mvc:annotation-driven/>
<!--默认的静态资源处理器 -->
<mvc:default-servlet-handler/>
<!--视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
15.3.4 创建Controller使用MVC
- 创建Controller、service,并添加依赖
- 响应视图的Controller
java
package com.neuedu.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.HashMap;
import java.util.Map;
@Controller
public class HelloController {
/**
* http://localhost:8080/ssm/index
* http://127.0.0.1:8080/ssm/index
* @return
*/
@RequestMapping("index")
String hello(){
return "hello";
}
}
- 响应json的Controller
使用RestController注解注册Controller,所有Controller方法默认响应的是JSON格式数据
java
package com.neuedu.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
//@Controller
@RestController
public class UserController {
/**
* http://localhost:8080/ssm/map
* @return
*/
@RequestMapping("map")
// @ResponseBody
Map map(){
Map map = new HashMap();
map.put("name","jshand");
map.put("address","HLJ");
return map;
}
}
15.2 搭建Mybatis环境
- 准备数据
- 添加依赖
- 创建SqlMapConfig.xml
- 添加Mapper.xml、Mapper.java、实体类
15.2.1准备ssm数据库
脚本如下:
sql
/*
SQLyog Ultimate v12.08 (64 bit)
MySQL - 5.7.18 : Database - ssm-java1
*********************************************************************
*/
/*!40101 SET NAMES utf8 */;
/*!40101 SET SQL_MODE=''*/;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`ssm` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `ssm`;
/*Table structure for table `check_apply` */
DROP TABLE IF EXISTS `check_apply`;
CREATE TABLE `check_apply` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
`register_id` INT(11) DEFAULT NULL COMMENT '病历号',
`item_id` INT(11) DEFAULT NULL COMMENT '项目id',
`item_name` VARCHAR(100) DEFAULT NULL COMMENT '项目名称',
`fee` DECIMAL(8,2) DEFAULT NULL COMMENT '检查费用',
`status` INT(11) DEFAULT NULL COMMENT '状态',
`active` INT(11) DEFAULT '1' COMMENT '是否有效,1 有效,0 失效',
`createtime` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8 COMMENT='检查申请';
/*Data for the table `check_apply` */
INSERT INTO `check_apply`(`id`,`register_id`,`item_id`,`item_name`,`fee`,`status`,`active`,`createtime`) VALUES (4,4,1,'甲状腺超声(小器官)','110.00',1,1,'2021-01-06 10:05:26'),(5,4,2,'腹部超声','140.00',1,1,'2021-01-06 10:05:26'),(6,7,1,'甲状腺超声(小器官)','110.00',1,1,'2021-01-06 10:09:47'),(7,7,2,'腹部超声','140.00',1,1,'2021-01-06 10:09:47'),(14,8,1,'甲状腺超声(小器官)','110.00',1,1,'2021-01-06 10:13:45'),(15,8,2,'腹部超声','140.00',1,1,'2021-01-06 10:13:45'),(16,8,3,'腋窝超声','50.00',1,1,'2021-01-06 10:20:50'),(17,2,1,'甲状腺超声(小器官)','110.00',4,1,'2021-01-06 11:01:06'),(18,2,2,'腹部超声','140.00',4,1,'2021-01-06 11:01:06'),(19,21,1,'甲状腺超声(小器官)','110.00',2,1,'2021-01-07 15:02:16'),(20,21,2,'腹部超声','140.00',4,1,'2021-01-07 15:02:16');
/*Table structure for table `check_item` */
DROP TABLE IF EXISTS `check_item`;
CREATE TABLE `check_item` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
`name` VARCHAR(100) DEFAULT NULL COMMENT '检查名称',
`fee` DECIMAL(8,2) DEFAULT NULL COMMENT '检查费用',
`active` INT(11) DEFAULT '1' COMMENT '是否有效,1 有效,0 失效',
`createtime` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COMMENT='检查项目';
/*Data for the table `check_item` */
INSERT INTO `check_item`(`id`,`name`,`fee`,`active`,`createtime`) VALUES (1,'甲状腺超声(小器官)','110.00',1,'2021-01-05 11:04:44'),(2,'腹部超声','140.00',1,'2021-01-05 13:40:09'),(3,'腋窝超声','50.00',1,'2021-01-05 13:40:27'),(4,'测试待删除','120.00',0,'2021-01-05 13:41:07');
/*Table structure for table `constant_item` */
DROP TABLE IF EXISTS `constant_item`;
CREATE TABLE `constant_item` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
`type_id` INT(11) DEFAULT NULL COMMENT '类别id',
`code` VARCHAR(100) DEFAULT NULL COMMENT '常数项代码',
`name` VARCHAR(100) DEFAULT NULL COMMENT '常数项名称',
`sort` INT(11) DEFAULT NULL COMMENT '排序',
`active` INT(11) DEFAULT '1' COMMENT '是否有效,1 有效,0 失效',
`createtime` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT='常数项表';
/*Data for the table `constant_item` */
INSERT INTO `constant_item`(`id`,`type_id`,`code`,`name`,`sort`,`active`,`createtime`) VALUES (1,1,'1','男',1,1,'2020-12-29 13:40:20'),(2,1,'2','女士',1,1,'2020-12-29 14:05:58'),(3,1,'3','33',333,0,'2020-12-29 14:07:05'),(4,5,'SHOW','展示菜单',0,1,'2021-01-04 11:28:02'),(5,5,'BTN','按钮',0,1,'2021-01-04 11:28:14'),(6,6,'1','是',0,1,'2021-01-04 14:02:59'),(7,6,'2','否',2,1,'2021-01-04 14:03:10'),(8,7,'1','已挂号',0,1,'2021-01-04 14:05:48'),(9,7,'2','已接诊',2,1,'2021-01-04 14:06:05'),(10,7,'3','已退号',3,1,'2021-01-04 14:06:16'),(11,8,'1','待缴费',1,1,'2021-01-06 14:03:27'),(12,8,'2','待检查',2,1,'2021-01-06 14:03:44'),(13,8,'3','已检查',3,1,'2021-01-06 14:03:55'),(14,8,'4','已退费',4,1,'2021-01-06 14:04:04');
/*Table structure for table `constant_type` */
DROP TABLE IF EXISTS `constant_type`;
CREATE TABLE `constant_type` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
`code` VARCHAR(100) DEFAULT NULL COMMENT '代码',
`name` VARCHAR(100) DEFAULT NULL COMMENT '名称',
`active` INT(11) DEFAULT '1' COMMENT '是否有效,1 有效,0 失效',
`createtime` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COMMENT='常数类别';
/*Data for the table `constant_type` */
INSERT INTO `constant_type`(`id`,`code`,`name`,`active`,`createtime`) VALUES (1,'XB','性别',1,'2020-12-29 11:32:19'),(2,'GHZT','挂号状态',1,'2020-12-29 11:51:25'),(3,'JCZT','检查状态',1,'2020-12-29 11:52:26'),(4,'JYZT','检验状态',1,'2020-12-29 14:04:48'),(5,'MENU_TYPE','菜单类型',1,'2021-01-04 11:27:35'),(6,'IS_BOOK','是否需要病历本',1,'2021-01-04 14:02:38'),(7,'REGISTER_STATUS','挂号状态',1,'2021-01-04 14:05:36'),(8,'APPLY_STATUS','申请状态(检查、检验)',1,'2021-01-06 14:02:19');
/*Table structure for table `department` */
DROP TABLE IF EXISTS `department`;
CREATE TABLE `department` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
`name` VARCHAR(100) DEFAULT NULL COMMENT '名称',
`address` VARCHAR(200) DEFAULT NULL COMMENT '办公地址',
`leader` VARCHAR(100) DEFAULT NULL COMMENT '负责人',
`active` INT(11) DEFAULT '1' COMMENT '是否有效,1 有效,0 失效',
`createtime` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='科室';
/*Data for the table `department` */
INSERT INTO `department`(`id`,`name`,`address`,`leader`,`active`,`createtime`) VALUES (1,'神经内科','1111','1',1,'2020-12-23 09:06:58'),(2,'消化科','内科楼101','扁鹊主任',1,'2021-01-04 15:24:31'),(3,'普外科','外科大楼2层','孙医生',1,'2021-01-04 15:41:49');
/*Table structure for table `inspect_apply` */
DROP TABLE IF EXISTS `inspect_apply`;
CREATE TABLE `inspect_apply` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
`item_id` INT(11) DEFAULT NULL COMMENT '项目id',
`item_name` VARCHAR(100) DEFAULT NULL COMMENT '项目名称',
`fee` DECIMAL(8,2) DEFAULT NULL COMMENT '检查费用',
`status` INT(11) DEFAULT NULL COMMENT '状态',
`register_id` INT(11) DEFAULT NULL COMMENT '病历号',
`active` INT(11) DEFAULT '1' COMMENT '是否有效,1 有效,0 失效',
`createtime` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COMMENT='检验申请';
/*Data for the table `inspect_apply` */
INSERT INTO `inspect_apply`(`id`,`item_id`,`item_name`,`fee`,`status`,`register_id`,`active`,`createtime`) VALUES (1,1,'乙肝抗原','200.00',4,2,1,'2021-01-06 11:12:06'),(2,2,'血常规','40.00',4,2,1,'2021-01-06 11:12:06'),(3,1,'乙肝抗原','200.00',2,21,1,'2021-01-07 15:02:25'),(4,2,'血常规','40.00',2,21,1,'2021-01-07 15:02:26');
/*Table structure for table `inspect_item` */
DROP TABLE IF EXISTS `inspect_item`;
CREATE TABLE `inspect_item` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
`name` VARCHAR(100) DEFAULT NULL COMMENT '检查名称',
`fee` DECIMAL(8,2) DEFAULT NULL COMMENT '检查费用',
`active` INT(11) DEFAULT '1' COMMENT '是否有效,1 有效,0 失效',
`createtime` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='检验项目';
/*Data for the table `inspect_item` */
INSERT INTO `inspect_item`(`id`,`name`,`fee`,`active`,`createtime`) VALUES (1,'乙肝抗原','200.00',1,'2021-01-05 10:57:47'),(2,'血常规','40.00',1,'2021-01-05 11:09:10'),(3,'肝功5项','60.00',1,'2021-01-05 11:10:12'),(4,'尿常规','60.00',1,'2021-01-05 13:51:19'),(5,'测试删除项目','10.00',0,'2021-01-05 13:51:46');
/*Table structure for table `menu` */
DROP TABLE IF EXISTS `menu`;
CREATE TABLE `menu` (
`menu_id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '菜单id',
`menu_name` VARCHAR(100) DEFAULT NULL COMMENT '菜单名称',
`url` VARCHAR(100) DEFAULT NULL COMMENT '菜单url',
`parent_id` INT(11) DEFAULT NULL COMMENT '上级菜单id',
`menu_type` INT(10) DEFAULT NULL COMMENT '菜单类型1 展示、2按钮',
`active` INT(11) DEFAULT '1' COMMENT '是否有效,1 有效,0 失效',
`createtime` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`menu_id`)
) ENGINE=INNODB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8 COMMENT='菜单';
/*Data for the table `menu` */
INSERT INTO `menu`(`menu_id`,`menu_name`,`url`,`parent_id`,`menu_type`,`active`,`createtime`) VALUES (1,'系统管理',NULL,NULL,1,1,'2020-12-28 14:13:19'),(2,'用户管理','/user',1,1,1,'2020-12-28 14:54:43'),(4,'角色管理','/role',1,1,1,'2020-12-28 14:55:59'),(5,'挂号收费',NULL,NULL,1,1,'2020-12-28 15:51:32'),(6,'挂号','/regist',5,1,1,'2020-12-28 15:51:47'),(7,'收费','/fee',5,1,1,'2020-12-28 15:52:06'),(8,'退号','unregist',5,1,1,'2020-12-28 15:52:16'),(9,'退费','refund',5,1,1,'2020-12-28 15:52:24'),(10,'用户查询','/user?type=query',2,2,1,'2021-01-04 11:21:55'),(11,'用户添加','/user?type=add',2,2,1,'2021-01-04 11:24:46'),(12,'用户所有操作','/user',2,2,1,'2021-01-04 11:25:14'),(13,'菜单管理','/menu',1,1,1,'2021-01-07 11:38:49'),(14,'门诊医生',NULL,NULL,1,1,'2021-01-07 11:39:57'),(15,'门诊病历','doctor',14,1,1,'2021-01-07 11:41:40'),(16,'基础数据管理',NULL,NULL,1,1,'2021-01-07 11:41:53'),(17,'部门管理','dept',16,1,1,'2021-01-07 11:42:01'),(18,'挂号级别管理','regist_level',16,1,1,'2021-01-07 11:42:11'),(19,'检查项目维护','check_item',16,1,1,'2021-01-07 11:42:15'),(20,'检验项目维护','inspect_item',16,1,1,'2021-01-07 11:42:23'),(21,'常数类别','constant_type',16,1,1,'2021-01-07 11:42:31'),(22,'常数项目管理','constant_item',16,1,1,'2021-01-07 11:42:40'),(23,'角色的处理','/role',4,2,1,'2021-01-07 14:16:38'),(24,'患者的信息','/register',15,2,1,'2021-01-07 14:18:21'),(25,'医生相关的操作','/doctor',24,2,1,'2021-01-07 14:19:24'),(26,'部门的操作','/dept',2,2,1,'2021-01-07 14:51:05'),(27,'挂号级别查询','/regist_level',2,2,1,'2021-01-07 14:51:25');
/*Table structure for table `regist_level` */
DROP TABLE IF EXISTS `regist_level`;
CREATE TABLE `regist_level` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
`name` VARCHAR(100) DEFAULT NULL COMMENT '名称',
`fee` DECIMAL(8,2) DEFAULT NULL COMMENT '费用',
`active` INT(11) DEFAULT '1' COMMENT '是否有效,1 有效,0 失效',
`createtime` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COMMENT='挂号级别';
/*Data for the table `regist_level` */
INSERT INTO `regist_level`(`id`,`name`,`fee`,`active`,`createtime`) VALUES (1,'专家','500.00',1,'2021-01-04 13:58:22'),(2,'教授','400.00',1,'2021-01-04 13:58:40'),(3,'主治','30.00',1,'2021-01-04 13:58:44'),(4,'住院医师','10.00',1,'2021-01-04 13:59:09'),(5,'测试级别','30.50',1,'2021-01-04 14:24:36'),(6,'实习大夫','2.00',1,'2021-01-04 14:55:20');
/*Table structure for table `register` */
DROP TABLE IF EXISTS `register`;
CREATE TABLE `register` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'id病历号',
`name` VARCHAR(100) DEFAULT NULL COMMENT '姓名',
`gender` INT(11) DEFAULT NULL COMMENT '性别',
`idno` VARCHAR(100) DEFAULT NULL COMMENT '身份证号',
`birthday` DATE DEFAULT NULL COMMENT '出生日期',
`age` INT(11) DEFAULT NULL COMMENT '年龄',
`address` VARCHAR(200) DEFAULT NULL COMMENT '家庭住址',
`regsit_level_id` INT(11) DEFAULT NULL COMMENT '挂号级别',
`dept_id` INT(11) DEFAULT NULL COMMENT '挂号科室',
`doctor_id` INT(11) DEFAULT NULL COMMENT '看诊医生',
`book` INT(11) DEFAULT NULL COMMENT '是否要病历本',
`visittime` DATE DEFAULT NULL COMMENT '看诊时间',
`fee` DECIMAL(8,2) DEFAULT NULL COMMENT '挂号费用',
`readme` VARCHAR(500) DEFAULT NULL COMMENT '主诉',
`present` VARCHAR(500) DEFAULT NULL COMMENT '现病史',
`present_treat` VARCHAR(500) DEFAULT NULL COMMENT '现病史治疗情况',
`history` VARCHAR(500) DEFAULT NULL COMMENT '既往史',
`allergy` VARCHAR(500) DEFAULT NULL COMMENT '过敏史',
`disease` VARCHAR(500) DEFAULT NULL COMMENT '确诊疾病',
`suit` VARCHAR(500) DEFAULT NULL COMMENT '处置方案',
`drug` VARCHAR(500) DEFAULT NULL COMMENT '药品清单',
`status` INT(11) DEFAULT NULL COMMENT '状态',
`active` INT(11) DEFAULT '1' COMMENT '是否有效,1 有效,0 失效',
`createtime` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8 COMMENT='诊疗信息';
/*Data for the table `register` */
INSERT INTO `register`(`id`,`name`,`gender`,`idno`,`birthday`,`age`,`address`,`regsit_level_id`,`dept_id`,`doctor_id`,`book`,`visittime`,`fee`,`readme`,`present`,`present_treat`,`history`,`allergy`,`disease`,`suit`,`drug`,`status`,`active`,`createtime`) VALUES (1,'张飞',1,'232323232136546456',NULL,40,NULL,1,25,NULL,1,'2021-01-04','501.00',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,1,'2021-01-04 14:07:05'),(2,'张三',1,'1212121212',NULL,1212,'12121212112',1,1,NULL,1,NULL,'500.00','主诉1','现病史2','现病史治疗情况2','既往史2','过敏史2',NULL,NULL,NULL,2,1,'2021-01-05 09:22:56'),(3,'关羽',1,'1212121221121211','2010-01-04',50,'黑龙江齐齐哈尔',1,1,27,1,NULL,'500.00',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,0,'2021-01-05 09:26:50'),(4,'刘备',1,'1212121221121211',NULL,50,'黑龙江齐齐哈尔',2,1,27,1,NULL,'500.00','主诉12111','现病1211','现病史治疗情221','既往史321','过敏史421',NULL,NULL,NULL,2,1,'2021-01-05 09:27:19'),(5,'孙悟空',1,'1212121221121211','2010-01-04',50,'黑龙江齐齐哈尔',1,1,27,1,NULL,'500.00',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,0,'2021-01-05 09:28:56'),(6,'刘备',1,'1212121221121211','2010-01-04',50,'黑龙江齐齐哈尔',2,1,27,1,'2021-01-07','500.00',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,0,'2021-01-05 09:30:34'),(7,'李逵',1,'1212121221121211',NULL,50,'黑龙江齐齐哈尔',1,1,27,1,'2021-01-07','500.00',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,1,'2021-01-05 09:36:54'),(8,'诸葛亮',1,'1212121221121211',NULL,50,'黑龙江齐齐哈尔',2,1,27,1,'2021-01-07','501.00','122','112','12','12','121212',NULL,NULL,NULL,1,1,'2021-01-05 09:41:52'),(9,'关羽',1,'54654654165464564','2021-01-12',50,'12121212121212',1,1,27,1,'2021-01-06','501.00',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,0,'2021-01-05 09:46:40'),(12,'诸葛亮',1,'1212121','2010-01-04',80,'东吴',2,2,25,1,'2021-01-06','401.00',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,0,'2021-01-05 10:53:19'),(13,'孙尚香',2,'5464854654654','2017-01-03',18,'东吴',2,2,25,1,'2021-01-08','401.00',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,0,'2021-01-05 10:54:23'),(15,'邹兆龙',1,'45651654684651651','2011-01-03',48,'32132132',1,1,27,1,'2021-01-07','501.00',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,1,'2021-01-06 10:29:41'),(16,'邹毅',1,'121212112212','2015-12-28',55,'1212121212',1,2,23,0,'2021-01-07','500.00',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,1,'2021-01-06 10:32:38'),(17,'徐玮辰',1,'12121212121212',NULL,50,'大撒旦法师法',2,1,28,0,'2021-01-13','400.00',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,1,'2021-01-06 10:35:53'),(18,'徐罗成',1,'12121212',NULL,12,'是大是大非',1,1,27,0,'2021-01-06','500.00',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,1,'2021-01-06 10:44:08'),(19,'杨旭',1,'231321321',NULL,50,'1212121212',1,2,23,0,'2021-01-08','500.00',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3,1,'2021-01-07 14:55:43'),(20,'露露',2,'121212121','2016-01-04',50,'1211212',1,2,29,1,'2021-01-08','501.00',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,1,'2021-01-07 14:56:42'),(21,'韦吉亮',1,'121212',NULL,50,'121212',1,2,23,1,'2021-01-07','501.00','主诉','现病史','现病史治疗情况','既往史','过敏史\n',NULL,'尊医嘱,多喝水,多喝热水',NULL,2,1,'2021-01-07 15:01:45');
/*Table structure for table `role` */
DROP TABLE IF EXISTS `role`;
CREATE TABLE `role` (
`role_id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '角色id',
`role_name` VARCHAR(100) DEFAULT NULL COMMENT '角色名称',
`active` INT(11) DEFAULT '1' COMMENT '是否有效,1 有效,0 失效',
`createtime` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`role_id`)
) ENGINE=INNODB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='角色';
/*Data for the table `role` */
INSERT INTO `role`(`role_id`,`role_name`,`active`,`createtime`) VALUES (1,'门诊医生',1,'2020-12-28 13:38:52'),(2,'挂号收费员',1,'2020-12-28 13:39:21'),(3,'系统管理员',1,'2020-12-28 13:39:41'),(4,'测试角色',0,'2020-12-28 13:59:02'),(5,'测试校验',1,'2021-01-07 10:49:23');
/*Table structure for table `role_menu` */
DROP TABLE IF EXISTS `role_menu`;
CREATE TABLE `role_menu` (
`menu_id` INT(11) NOT NULL COMMENT '菜单id',
`role_id` INT(11) NOT NULL COMMENT '角色id',
PRIMARY KEY (`menu_id`,`role_id`),
KEY `FK_Reference_2` (`role_id`),
CONSTRAINT `FK_Reference_1` FOREIGN KEY (`menu_id`) REFERENCES `menu` (`menu_id`),
CONSTRAINT `FK_Reference_2` FOREIGN KEY (`role_id`) REFERENCES `role` (`role_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT='角色菜单信息';
/*Data for the table `role_menu` */
INSERT INTO `role_menu`(`menu_id`,`role_id`) VALUES (5,2),(6,2),(7,2),(8,2),(9,2),(1,3),(2,3),(4,3),(5,3),(6,3),(7,3),(8,3),(9,3),(10,3),(11,3),(12,3),(13,3),(14,3),(15,3),(16,3),(17,3),(18,3),(19,3),(20,3),(21,3),(22,3),(23,3),(24,3),(25,3),(26,3),(27,3);
/*Table structure for table `user` */
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`user_id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '医生id',
`username` VARCHAR(100) DEFAULT NULL COMMENT '用户名',
`password` VARCHAR(100) DEFAULT NULL COMMENT '密码',
`realname` VARCHAR(100) DEFAULT NULL COMMENT '真实姓名',
`telephone` VARCHAR(20) DEFAULT NULL COMMENT '电话号码',
`dept_id` INT(11) DEFAULT NULL COMMENT 'id',
`user_type` INT(11) DEFAULT NULL COMMENT '医生类型',
`regist_level` INT(10) DEFAULT NULL COMMENT '医生级别',
`lastlogin` DATETIME DEFAULT NULL COMMENT '最后登录时间',
`active` INT(11) DEFAULT '1' COMMENT '是否有效,1 有效,0 失效',
`createtime` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`user_id`),
KEY `FK_Reference_5` (`dept_id`),
CONSTRAINT `FK_Reference_5` FOREIGN KEY (`dept_id`) REFERENCES `department` (`id`)
) ENGINE=INNODB AUTO_INCREMENT=60 DEFAULT CHARSET=utf8 COMMENT='医生-用户信息';
/*Data for the table `user` */
INSERT INTO `user`(`user_id`,`username`,`password`,`realname`,`telephone`,`dept_id`,`user_type`,`regist_level`,`lastlogin`,`active`,`createtime`) VALUES (21,'admin','123456','管理员','13888888880',1,1,1,NULL,0,'2020-12-23 09:07:06'),(22,'jshand','123456','姓名1','13888888881',1,1,1,NULL,0,'2020-12-23 09:07:06'),(23,'huatuo','123456','华佗','13888888882',2,1,1,NULL,1,'2020-12-23 09:07:06'),(24,'admin3','1234563','姓名3','13888888883',2,1,2,NULL,1,'2020-12-23 09:07:06'),(25,'bianque','1234564','扁鹊','13888888884',2,1,2,NULL,1,'2020-12-23 09:07:06'),(26,'admin5','1234565','姓名5','13888888885',2,1,2,NULL,1,'2020-12-23 09:07:06'),(27,'admin6','1234566','姓名6','13888888886',1,1,1,NULL,1,'2020-12-23 09:07:06'),(28,'admin7','1234567','姓名7','13888888887',1,1,2,NULL,1,'2020-12-23 09:07:06'),(29,'admin8','1234568','姓名8','13888888888',2,1,1,NULL,1,'2020-12-23 09:07:06'),(30,'admin9','1234569','姓名dddddd','13888888889',2,1,2,NULL,1,'2020-12-23 09:07:06'),(31,'admin10','12345610','姓名10','138888888810',1,1,1,NULL,1,'2020-12-23 09:07:06'),(32,'admin11','12345611','姓名11','138888888811',2,1,2,NULL,1,'2020-12-23 09:07:06'),(33,'admin12','12345612','姓名12','138888888812',1,1,1,NULL,1,'2020-12-23 09:07:06'),(34,'admin13','12345613','姓名13','138888888813',1,1,2,NULL,1,'2020-12-23 09:07:06'),(35,'admin14','12345614','姓名14','138888888814',1,1,1,NULL,1,'2020-12-23 09:07:06'),(36,'admin15','12345615','姓名15','138888888815',1,1,2,NULL,1,'2020-12-23 09:07:06'),(37,'admin16','12345616','姓名16','138888888816',1,1,NULL,NULL,1,'2020-12-23 09:07:06'),(38,'admin17','12345617','姓名17','138888888817',1,1,NULL,NULL,1,'2020-12-23 09:07:06'),(39,'admin18','12345618','姓名18','138888888818',1,1,NULL,NULL,1,'2020-12-23 09:07:06'),(40,'admin19','12345619','姓名19','138888888819',1,1,NULL,NULL,1,'2020-12-23 09:07:06'),(51,'vuejs','123456','张医生','17745125669',2,1,NULL,NULL,1,'2020-12-25 09:19:19'),(52,'aaa','123456','135341','32131321',2,1,NULL,NULL,1,'2020-12-25 09:21:19'),(53,'abcbdb','123456','45646','121212',NULL,1,NULL,NULL,1,'2020-12-25 09:22:19'),(54,'aaaa','11212','121212','1212',2,1,NULL,NULL,1,'2020-12-25 09:23:31'),(55,'abcdef','123456','4564864','321321321',NULL,1,NULL,NULL,1,'2020-12-25 09:24:51'),(56,'lastuser','123456','789789','6541651',NULL,1,NULL,NULL,1,'2020-12-25 09:27:06'),(57,'l22222','12345864646','3213','21321',NULL,1,NULL,NULL,1,'2020-12-25 09:27:50'),(58,'qqq','qqq','qqq','18404075932',NULL,1,NULL,NULL,1,'2020-12-28 08:59:02'),(59,NULL,NULL,NULL,NULL,NULL,1,NULL,NULL,1,'2021-01-04 16:43:10');
/*Table structure for table `user_role` */
DROP TABLE IF EXISTS `user_role`;
CREATE TABLE `user_role` (
`user_id` INT(11) NOT NULL COMMENT '医生id',
`role_id` INT(11) NOT NULL COMMENT '角色id',
PRIMARY KEY (`user_id`,`role_id`),
KEY `FK_Reference_4` (`role_id`),
CONSTRAINT `FK_Reference_3` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`),
CONSTRAINT `FK_Reference_4` FOREIGN KEY (`role_id`) REFERENCES `role` (`role_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT='用户角色';
/*Data for the table `user_role` */
INSERT INTO `user_role`(`user_id`,`role_id`) VALUES (23,1),(25,1),(23,2),(21,3),(23,3),(25,3);
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
15.2.2 添加依赖
- mybaits
- mysql-connector-java
xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>spring-framework</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.neuedu.ssm</groupId>
<artifactId>p21-ssm</artifactId>
<packaging>war</packaging>
<name>p21-ssm Maven Webapp</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<spring.version>5.2.4.RELEASE</spring.version>
<junit.version>4.13.2</junit.version>
<jstl.version>1.2</jstl.version>
<jackson.version>2.9.9.1</jackson.version>
<lombok.version>1.18.16</lombok.version>
<servlet.version>4.0.1</servlet.version>
<jsp.version>2.2</jsp.version>
<mybatis.version>3.5.5</mybatis.version>
<mysql.version>8.0.28</mysql.version>
</properties>
<dependencies>
<!-- 测试框架 start -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<scope>test</scope>
</dependency>
<!-- 测试框架 end -->
<!-- SpringMVC start -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- SpringMVC start -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<!--解析对象为json-->
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<!-- 不想写 setter getter to.....-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>${jsp.version}</version>
<scope>provided</scope>
</dependency>
<!-- 使用 mybatis start -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- 使用 mybatis start -->
</dependencies>
</project>
15.2.3 创建核心配置文件
创建核心配置文件SqlMapConfig.xml和jdbc.properties
- jdbc.properties
properties
jdbc.username=root
jdbc.password=root
jdbc.url=jdbc:mysql://127.0.0.1:3306/ssm
jdbc.driver=com.mysql.cj.jdbc.Driver
- SqlMapConfig.xml
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="mybatis/jdbc.properties"/>
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/>
<setting name="cacheEnabled" value="true"/>
</settings>
<environments default="dev">
<environment id="dev">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="UNPOOLED">
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="url" value="${jdbc.url}"/>
<property name="driver" value="${jdbc.driver}"/>
</dataSource>
</environment>
</environments>
<mappers>
<package name="com.neuedu.ssm.mapper"/>
</mappers>
</configuration>
15.2.4 逆向工程
逆向生成Mapper.xml、Mapper.java、实体(Example)
15.2.5 单元测试
java
package com.neuedu.ssm.mapper;
import com.neuedu.ssm.entity.Menu;
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 org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import static org.junit.Assert.*;
/**
* 项目: spring-framework
* 类名: MenuMapperTest
* 创建时间: 2024/3/22 12:06
* 描述 :
* 作者 : 张金山
* QQ : 314649444
* Site: https://jshand.gitee.io
*/
public class MenuMapperTest {
@Test
public void selectByExample() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis/SqlMapConfig.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = factory.openSession();
MenuMapper mapper = session.getMapper(MenuMapper.class);
List<Menu> menus = mapper.selectByExample(null);
for (Menu menu : menus) {
System.out.println(menu);
}
session.close();
}
}
15.3 将Mybaits整合到 IOC容器
将Mapper 创建的 过程 交给ioc, 在Ioc 中定义Mapper(Bean),Mapper类本身是抽象,在ioc中声明的是 代理对象。使用Factory模式创建Mapper
SqlSession.getMapper(MenuMapper.class)
使用Mybaits-spring提供的 工厂类用于创建 Mapper
使用Mybatis-spring
- 添加依赖
- 在IOC容器中定义SqlSessionFactoryBean
- 定义Mapper
- 在Service中注入Mapper(Dao)
15.3.1添加依赖
添加由mybatis提供的类库,用于整合Spring
- mybaits-spring
- 数据源:druid
- 事务
- aop
xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>spring-framework</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.neuedu.ssm</groupId>
<artifactId>p21-ssm</artifactId>
<packaging>war</packaging>
<name>p21-ssm Maven Webapp</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<spring.version>5.2.4.RELEASE</spring.version>
<junit.version>4.13.2</junit.version>
<jstl.version>1.2</jstl.version>
<jackson.version>2.9.9.1</jackson.version>
<lombok.version>1.18.16</lombok.version>
<servlet.version>4.0.1</servlet.version>
<jsp.version>2.2</jsp.version>
<mybatis.version>3.5.5</mybatis.version>
<mysql.version>8.0.28</mysql.version>
<mybatis-spring.version>2.0.6</mybatis-spring.version>
<druid.version>1.2.21</druid.version>
</properties>
<dependencies>
<!-- 测试框架 start -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<scope>test</scope>
</dependency>
<!-- 测试框架 end -->
<!-- SpringMVC start -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- SpringMVC start -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<!--解析对象为json-->
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<!-- 不想写 setter getter to.....-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>${jsp.version}</version>
<scope>provided</scope>
</dependency>
<!-- 使用 mybatis start -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- 使用 mybatis start -->
<!-- 在Springmvc容器中声明 SqlSessionFactory Mapper mybatis-spring https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis-spring.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
</dependencies>
</project>
15.3.2 定义SqlSessionFactoryBean
在Spring的IOC容器中SqlSessionFactoryBean,主要在IOC容器中管理 DataSource,在SqlMapConfig.xml中去掉了环境的配置(environments)和Mapper的扫描 mappers
xml
<!-- 声明数据源-->
<context:property-placeholder location="classpath:mybatis/jdbc.properties"></context:property-placeholder>
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
</bean>
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml"></property>
<property name="dataSource" ref="dataSource"/>
</bean>
15.3.3 在IOC容器创建Mapper代理对象
xml
<!-- 声明单个Mapper xxx -->
<!-- <bean id="menuMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">-->
<!-- <property name="mapperInterface" value="com.neuedu.ssm.mapper.MenuMapper"/>-->
<!-- <property name="sqlSessionFactory" ref="sqlSessionFactoryBean"></property>-->
<!-- </bean>-->
<!-- 使用包扫描的方式批量注册Mapper basePackage: 扫描那些包的Mapper接口在IOC容器中管理-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"></property>
<property name="basePackage" value="com.neuedu.ssm.mapper"></property>
</bean>
15.3.4 单元测试
java
package com.neuedu.ssm.mapper;
import com.neuedu.ssm.entity.Department;
import com.neuedu.ssm.entity.Menu;
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 org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
/**
* 项目: spring-framework
* 类名: MenuMapperTest
* 创建时间: 2024/3/22 12:06
* 描述 :
* 作者 : 张金山
* QQ : 314649444
* Site: https://jshand.gitee.io
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring/spring-mvc.xml")
public class MenuMapperSpringTest {
@Autowired
MenuMapper menuDao;
@Autowired
DepartmentMapper departmentDao;
@Test
public void selectByExample() throws IOException {
List<Menu> menus = menuDao.selectByExample(null);
List<Department> depts = departmentDao.selectByExample(null);
for (Menu menu : menus) {
System.out.println(menu);
}
for (Department department : depts) {
System.out.println(department);
}
}
}
15.4 添加事务管理器
添加 aspectjweaver
xml
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.6</version>
</dependency>
15.4.1 xml形式声明事务
xml
<!-- 注解驱动,让Service可以直接使用@ @Transactional()注解-->
<tx:annotation-driven transaction-manager="transactionManager"/>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="select*" propagation="SUPPORTS"/>
<tx:method name="save*" propagation="REQUIRED" isolation="DEFAULT"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:advisor advice-ref="txAdvice" pointcut="execution(* com.neuedu.ssm..*.*(..))"></aop:advisor>
</aop:config>
15.4.2 注解驱动声明式事务
在需要加事务的方法上或类上添加 @Transactional注解
java
package com.neuedu.service.impl;
import com.neuedu.mapper.MenuMapper;
import com.neuedu.service.MenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
public class MenuServiceImple implements MenuService {
@Autowired
MenuMapper mapper;
@Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class )
@Override
public List selectAll() {
return mapper.selectByExample(null);
}
}
