Spring+mybatis环境搭建
SpringMVC+Spring+Hibernate框架整合原理,作用及使用方法

SpringMVC+Spring+Hibernate框架整合原理,作⽤及使⽤⽅法SSM框架是spring MVC ,spring和mybatis框架的整合,是标准的MVC模式,将整个系统划分为表现层,controller层,service层,DAO层四层使⽤spring MVC负责请求的转发和视图管理spring实现业务对象管理,mybatis作为数据对象的持久化引擎原理:SpringMVC:1.客户端发送请求到DispacherServlet(分发器)2.由DispacherServlet控制器查询HanderMapping,找到处理请求的Controller3.Controller调⽤业务逻辑处理后,返回ModelAndView4.DispacherSerclet查询视图解析器,找到ModelAndView指定的视图5.视图负责将结果显⽰到客户端Spring:我们平时开发接触最多的估计就是IOC容器,它可以装载bean(也就是我们中的类,当然也包括service dao⾥⾯的),有了这个机制,我们就不⽤在每次使⽤这个类的时候为它初始化,很少看到关键字new。
另外spring的aop,事务管理等等都是我们经常⽤到的。
Mybatis:mybatis是对jdbc的封装,它让数据库底层操作变的透明。
mybatis的操作都是围绕⼀个sqlSessionFactory实例展开的。
mybatis通过配置⽂件关联到各实体类的Mapper⽂件,Mapper⽂件中配置了每个类对数据库所需进⾏的sql语句映射。
在每次与数据库交互时,通过sqlSessionFactory拿到⼀个sqlSession,再执⾏sql命令。
使⽤⽅法:要完成⼀个功能:1. 先写实体类entity,定义对象的属性,(可以参照数据库中表的字段来设置,数据库的设计应该在所有编码开始之前)。
2. 写Mapper.xml(Mybatis),其中定义你的功能,对应要对数据库进⾏的那些操作,⽐如 insert、selectAll、selectByKey、delete、update等。
JavaSpringBoot+druid+mybatis+PostgreSQL一分钟搭建完成

JavaSpringBoot+druid+mybatis+PostgreSQL⼀分钟搭建完成打开IDEA 初始化Spring Boot 项⽬,记得钩上 lombok在pom.xml 下添加<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.21</version></dependency><dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.1</version></dependency>在application.properties 下添加,注意数据库名# ⽇志的打印级别.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping=trace# ⼤象数据库spring.datasource.druid.url=jdbc:postgresql://localhost:5432/你的数据库名ername=你的⽤户名spring.datasource.druid.password=你的密码spring.datasource.druid.driver-class-name=org.postgresql.Driver# 配置Druid的连接池spring.datasource.druid.initialSize=10spring.datasource.druid.maxActive=20spring.datasource.druid.maxWait=60000spring.datasource.druid.minIdle=1spring.datasource.druid.timeBetweenEvictionRunsMillis=60000spring.datasource.druid.minEvictableIdleTimeMillis=300000spring.datasource.druid.testWhileIdle=truespring.datasource.druid.testOnBorrow=truespring.datasource.druid.testOnReturn=falsespring.datasource.druid.poolPreparedStatements=truespring.datasource.druid.maxOpenPreparedStatements=20spring.datasource.druid.validationQuery=SELECT 1spring.datasource.druid.validation-query-timeout=500spring.datasource.druid.filters=stat创建⼤象数据库表CREATE TABLE HEXINFO(-- SERIAL ⾃增主键ID SERIAL PRIMARY KEY NOT NULL,-- 摘要HEX TEXT NOT NULL,SPAWNTIME TIMESTAMP NOT NULL,INFO TEXT NOT NULL,NODEID TEXT NOT NULL,CHUNKID INT NOT NULL,);-- 查询最⼤值语句,等下⽤的到select * from hexinfo where id in(select max(id) from hexinfo);-- 插⼊⼀条信息INSERT INTO HEXINFO (HEX,SPAWNTIME,INFO,NODEID) VALUES('000000000001',current_timestamp,'oxoxoxox','123456');在项⽬路径下创建 3 个⽂件第⼀个 Hexinfo.javapackage .zzuli.fabriciec;import lombok.Data;import lombok.NoArgsConstructor;import java.util.Date;@Data@NoArgsConstructorpublic class Hexinfo {private Integer id;private String hex;private Date spawntime;private String info;private String nodeid;private Integer chunkid;}第⼆个 HexinfoMapper.javapackage .zzuli.fabriciec;import org.apache.ibatis.annotations.Mapper;import org.apache.ibatis.annotations.Select;import java.util.List;@Mapperpublic interface HexinfoMapper {@Select("select * from hexinfo where id in(select max(id) from hexinfo);") // 这⾥是使⽤MapperList<Hexinfo> getMax();}第三个 HexinfoController.javapackage .zzuli.fabriciec;import lombok.AllArgsConstructor;import lombok.Data;import org.springframework.web.bind.annotation.CrossOrigin;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;import java.util.List;@CrossOrigin // 跨域请求@Data@AllArgsConstructor@RestControllerpublic class HexinfoController {private HexinfoMapper hexinfoMapper;@GetMapping("/max")public List<Hexinfo> getByMax() {//return hexinfoService.getByMax();return hexinfoMapper.getMax();}}启动项⽬访问端⼝返回和这段类似就是成功id 22hex "fec6d532f885902bf5136588f0ebd52e0b8f13fc365ec65d763c150000000000"spawntime "2020-04-28T04:02:12.420+0000"info "I-Love-Java"nodeid "java-point"chunkid 666可能不理解为什么这么写安利⼀个教程,我是在这⾥学的不过⾃⼰⽤的数据库还是⽐较喜欢⼤象。
SpringBoot+Mybatis框架之@Select注解方式搭建

SpringBoot+Mybatis框架之@Select注解⽅式搭建 1、创建SpringBoot项⽬ 两种⽅式:1、通过idea来New⼀个project项⽬。
pom.xml⽂件的配置(其中mysql的maven配置可能会和你本地的不服,会报数据库连接的错误,如果出现这种问题,改⼀下数据库版本就可以):<?xml version="1.0" encoding="UTF-8"?><project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>demo</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>demo</name><description>Demo project for Spring Boot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.9.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.1</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web-services</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--集成⽇志logback+slf4j --><!-- https:///artifact/org.slf4j/slf4j-api --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.2</version></dependency></dependencies><!--<packaging>jar</packaging>--><build><finalName>demo</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project> application.properties⽂件中的配置项(端⼝、数据库配置、debug、mybatis)#项⽬的启动端⼝server.port=9090#数据库的配置spring.datasource.url=jdbc:mysql://localhost:3306/DBName?useUnicode=true&characterEncoding=utf-8&useSSL=true ername= USERNAMEspring.datasource.password= PASSWORDspring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver#显⽰标准输出.shyroke.mapper=debug#路径是是实体类的路径,和写在所有Mapper⽂件中⽤来扫描Mapper⽂件的@Mapper注解联⽤mybatis.type-aliases-package=com.web.test.test.domain 2、项⽬内部结构 3、项⽬的最⼩功能代码 这个例⼦是实现⼀个简单的查询功能: Controller层:package com.web.test.test.controller;import com.web.test.test.service.TeacherService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class TeacherController {@Autowiredprivate TeacherService teacherService; //Select By Id@RequestMapping("/showTeacher/{id}")public String selectTeacher(@PathVariable int id){return teacherService.selectTeacher(id).toString();}//Select All@RequestMapping("/selectAll")public String selectAll(){return teacherService.selectAll().toString();} * 有的朋友想在return的时候直接跳转界⾯去,看到@RestController了吗,这个是ResponseBody和Controller的集合,意思是return的数据都变成json的格式,返回到前端,不会跳转界⾯。
MybatisPlus实现简单增删改查功能

MybatisPlus实现简单增删改查功能实现步骤:⼯具:IDEA数据库版本:mysql5.7⼀、环境搭建1.创建springboot项⽬pom.xml2.pom.xml : spring web、lombok mysql<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>3.添加mybatisplus依赖<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.3.1.tmp</version></dependency>application.properties4.application.properties配置⽂件:⽤户名、密码、连接驱动、配置⽇志注意:mysql8 需要增加时区的配置 serverTimezone=GMT%2B8 东⼋区#mysql5 驱动不同ername=rootspring.datasource.password=123456spring.datasource.url=jdbc:mysql://localhost:3306/mybatisplus?useSSL=false&useUnicode=true&characterEncoding=utf-8 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver#配置⽇志mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl数据库数据#建表DROP TABLE IF EXISTS user;CREATE TABLE user(id BIGINT(20) NOT NULL COMMENT '主键ID',name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',age INT(11) NULL DEFAULT NULL COMMENT '年龄',email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',PRIMARY KEY (id));#插⼊数据DELETE FROM user;INSERT INTO user (id, name, age, email) VALUES(1, 'Jone', 18, 'test1@'),(2, 'Jack', 20, 'test2@'),(3, 'Tom', 28, 'test3@'),(4, 'Sandy', 21, 'test4@'),(5, 'Billie', 24, 'test5@');代码详解1.新建实体类Userlombok注解详解:@Data:⾃动⽣成get\set⽅法@AllArgsConstructor :有参⽅法@NoArgsConstructor:⽆参⽅法@TableId(value = “id”,type = IdType.AUTO) :给实体设置⾃增package com.sh.entity;import com.baomidou.mybatisplus.annotation.IdType;import com.baomidou.mybatisplus.annotation.TableId;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import org.springframework.context.annotation.Primary;import java.util.Date;@Data@AllArgsConstructor@NoArgsConstructorpublic class User {@TableId(value = "id",type = IdType.AUTO)private Integer id;private String name;private Integer age;private String email;private Date createTime;private Date updateTime;}2. 新建mapper包在mapper包⾥建UserMappe接⼝r 继承BaseMapper<实体类> package com.sh.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;import er;import org.springframework.stereotype.Repository;@Repositorypublic interface UserMapper extends BaseMapper<User> {}3.创建控制层controller:新建UserController类package com.sh.controller;import er;import erMapper;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*;import java.util.ArrayList;import java.util.Arrays;import java.util.List;@RestControllerpublic class UserController {@Autowiredprivate UserMapper userMapper;//查询查询所以 null 就是没有条件@GetMapping("/selectUser")public List<User> getAll(){List<User> user = userMapper.selectList(null);return user;}//根据id查询@GetMapping("/selectById")public User selectUserById(){User user = userMapper.selectById(1);return user;}//根据多个id查询 Arrays.asList集合@GetMapping("/selectByIds")public List<User> selectUserByIds(){List<User> user = userMapper.selectBatchIds(Arrays.asList(1,2,3)); return user;}//添加@PostMapping("/insertUser")public Integer insertUsers(User user){Integer result = userMapper.insert(user);return result;}//修改根据id@PutMapping("/updateUser")public Integer updateUsers(User user){Integer result = userMapper.updateById(user);return result;}//删除根据id@DeleteMapping("/deleteUser")public Integer deleteUsers(Integer id){Integer result = userMapper.deleteById(id);return result;}}项⽬结构注意:添加,修改操作需要数据库和实体设置⾃增到此这篇关于MybatisPlus实现简单增删改查的⽂章就介绍到这了,更多相关MybatisPlus增删改查内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
《JavaEE企业级应用开发》初识MyBatis框架

1.1.3 当前主流框架
Spring Boot 框架
Spring Boot 框架是 Pivotal 团队基于 Spring 开发的全新框架,其设计初衷是为了简化 Spring 的配置,使用户能够构建独立运行的程序,提高开发效率。
Spring Boot 框架本身并不提供 Spring 框架的核心特性及扩展功能,它只是用于快速、敏 捷地开发新一代基于 Spring 框架的应用,同时它还集成了大量的第三方类库(如Jackson、 JDBC、Redis 等),使用户只需少量配置就能完成相应功能。
1.1.1 框架概述
软件框架
软件框架是一种通用的、可复用的软件环境,它提供特定的功能,促进软件应用、产品和解 决方案的开发工作。软件框架会包含支撑程序、编译器、代码、库、工具集以及API,它把所有这 些部件汇集在一起,以支持项目或系统的开发。
软件框架可以形象地比喻成我们在盖楼房时,用梁+柱子+承重墙搭建起来的钢筋混凝土结构 的建筑框架,它是整个建筑的骨架。而实现的软件功能,也就像在这个建筑框架中所要实现的不同 类型、功能的房子,比如健身房、商场、酒店、饭店等。
1.1.3 当前主流框架
Spring MVC框架
Spring MVC是一个Web开发框架,可以将它理解为Servlet。在MVC模式中,Spring MVC 作为控制器(Controller)用于实现模型与视图的数据交互,是结构最清晰的。
Spring MVC框架采用松耦合、可插拔的组件结构,具有高度可配置性,与其他的MVC框架相 比,具有更强的扩展性和灵活性。
目录/Contents
01
初识框架
02
MyBatis介绍
03
MyBatis环境搭建
《2024年基于SSM框架的网上商城系统的设计与实现》范文

《基于SSM框架的网上商城系统的设计与实现》篇一一、引言随着互联网技术的快速发展,电子商务已成为人们购物的主要方式之一。
为了满足用户多样化的购物需求,基于SSM (Spring、SpringMVC、MyBatis)框架的网上商城系统应运而生。
本文将详细介绍该系统的设计思路与实现过程,以期为相关开发人员提供参考。
二、系统需求分析在系统需求分析阶段,我们首先明确了系统的目标用户、业务需求及功能需求。
目标用户主要包括普通消费者、商家及管理员。
业务需求涉及商品管理、购物车管理、订单管理、支付管理、用户管理等模块。
功能需求则根据业务需求细化,如商品展示、商品搜索、购物车添加/删除商品、下单、支付、评价等。
三、系统设计1. 技术架构设计本系统采用SSM框架进行开发,技术架构包括表现层、业务逻辑层及数据访问层。
表现层负责与用户进行交互,业务逻辑层负责处理业务逻辑,数据访问层负责与数据库进行交互。
系统采用B/S架构,支持多终端访问。
2. 数据库设计数据库设计是系统设计的关键环节。
根据系统需求分析,我们设计了商品表、用户表、订单表、购物车表等核心数据表。
同时,为了确保数据的一致性和完整性,我们还设计了相应的约束条件和索引。
四、系统实现1. 开发环境搭建系统开发环境包括JDK、Tomcat服务器、MySQL数据库及开发工具等。
在搭建过程中,我们需要注意版本兼容性和配置的正确性。
2. 模块实现根据系统设计,我们将系统分为商品管理、购物车管理、订单管理、支付管理、用户管理等模块。
每个模块都包含了相应的业务逻辑和操作界面。
在实现过程中,我们采用了SSM框架的优点,将业务逻辑与数据访问分离,提高了系统的可维护性和可扩展性。
五、关键技术实现1. Spring框架的应用Spring框架在系统中扮演了核心角色。
我们通过Spring的依赖注入功能实现了业务逻辑与数据访问的解耦,提高了系统的可维护性。
同时,Spring还提供了事务管理功能,确保了数据的完整性和一致性。
SpringMVC+Spring+Mybatis框架配置详细步骤(eclipse普通版)

SSI框架搭建SpringMVC3.1.2+Spring3.1.2+Mybatis3.2.6编号:SSI-SMVC3-S3-I3版本:V1.0级别:公开编写时间:2016-02-17目录1 导言 (1)1.1 目的 (1)1.2 范围 (1)1.3 说明 (1)2 搭建SpringMVC (2)2.1 搭建所需jar包 (2)2.2 其他依赖包 (3)2.3 搭建步骤 (4)2.3.1 创建项目 (4)2.3.2 导入jar包 (6)2.3.3 配置web.xml (7)2.3.4 配置spring-servlet.xml (9)2.3.5 配置applicationContext.xml (10)2.3.6 配置log4j.properties (10)3 整合mybatis (11)3.1 整合所需jar包 (11)3.2 其他依赖包 (11)3.3 整合步骤 (11)3.3.1 导入jar包 (11)3.3.2 配置config.properties (12)3.3.3 配置spring-dataSource.xml (12)3.3.4 配置applicationContext.xml (15)3.3.5 配置mybatis-config.xml (16)3.3.6 创建实体model (17)3.3.7 创建实例化dao (19)3.3.8 创建业务服务service (21)3.3.9 创建控制层controller (23)3.3.10 页面代码 (28)3.3.11 启动项目 (37)1导言1.1 目的本文档是根据个人的工作经验搭建的轻量级SSI框架,也是实际应用中比较全面的基础框架,用于指导SSI框架初学者学习搭建SSI框架,希望能给各位使用者提供帮助,同时也希望朋友们尽量去帮助其他人。
1.2 范围本次框架搭建的版本是SpringMVC3.1.2+Spring3.1.2+Mybatis3.2.6,数据库采用的是mysql,在eclipse开发工具下搭建直接搭建的web项目,页面采用的是h5,ajax实现数据访问,如果页面为jsp等,则修改controller的返回类型即可。
spring+spring mvc+mybits框架整合

主要介绍三大框架的整合,至于环境的搭建以及项目的创建可以参考其他资料。
这次整合主要用到两个配置文件:spring-mybatis.xm,包含spring和mybatis的配置文件,还有个是spring-mvc.xml的配置文件,此外有两个资源文件:jdbc.propertis和log4j.properties。
完整的目录结构如下图:本框架中用到的所有jar包都在源码中。
本测试项目中用到的是sqlserver数据库,MyEclipse 8.6和apache-tomcat-7.0.41下来逐一介绍配置文件:1、spring-mybatis.xml这个文件就是用来完成spring和mybatis的整合的。
这里面也没多少行配置,主要的就是自动扫描,自动注入,配置数据库,注释也很详细<?xml version="1.0"encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:p="/schema/p"xmlns:context="/schema/context"xmlns:mvc="/schema/mvc"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-3.1.xsd/schema/context/schema/context/spring-context-3.1.xsd/schema/mvc/schema/mvc/spring-mvc-4.0.xsd"><!-- 自动扫描 --><context:component-scan base-package="com.myProcess.study"/><!-- 引入配置文件 --><bean id="propertyConfigurer"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location"value="classpath:jdbc.properties"/> </bean><bean id="dataSource"class="mons.dbcp.BasicDataSource"destroy-method="close"><property name="driverClassName"value="${driver}"/><property name="url"value="${url}"/><property name="username"value="${username}"/><property name="password"value="${password}"/><!-- 初始化连接大小 --><property name="initialSize"value="${initialSize}"></property><!-- 连接池最大数量 --><property name="maxActive"value="${maxActive}"></property><!-- 连接池最大空闲 --><property name="maxIdle"value="${maxIdle}"></property><!-- 连接池最小空闲 --><property name="minIdle"value="${minIdle}"></property><!-- 获取连接最大等待时间 --><property name="maxWait"value="${maxWait}"></property></bean><!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 --><bean id="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource"ref="dataSource"/><!-- 自动扫描mapping.xml文件 --><property name="mapperLocations"value="classpath:com/myProcess/study/mapping/*.xml"></property></bean><!-- DAO接口所在包名,Spring会自动查找其下的类 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage"value=".hnust.dao"/><property name="sqlSessionFactoryBeanName"value="sqlSessionFactory"></property></bean><!-- (事务管理)transaction manager, use JtaTransactionManager for global tx --> <bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource"ref="dataSource"/></bean></beans>2、log4j.propertieslog4j.rootLogger=INFO,Console,File#定义日志输出目的地为控制台log4j.appender.Console=org.apache.log4j.ConsoleAppenderlog4j.appender.Console.Target=System.out#可以灵活地指定日志输出格式,下面一行是指定具体的格式yout = org.apache.log4j.PatternLayoutyout.ConversionPattern=[%c]-%m%n#文件大小到达指定尺寸的时候产生一个新的文件log4j.appender.File = org.apache.log4j.RollingFileAppender#指定输出目录log4j.appender.File.File = logs/ssm.log#定义文件最大大小log4j.appender.File.MaxFileSize = 10MB# 输出所以日志,如果换成DEBUG表示输出DEBUG以上级别日志log4j.appender.File.Threshold = ALLyout = org.apache.log4j.PatternLayoutyout.ConversionPattern =[%p][%d{yyyy-MM-ddHH\:mm\:ss}][%c]%m%n3、spring-mvc.xml主要是自动扫描控制器,视图模式,注解的启动这三个<?xml version="1.0"encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:p="/schema/p"xmlns:context="/schema/context"xmlns:mvc="/schema/mvc"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-3.1.xsd/schema/context/schema/context/spring-context-3.1.xsd/schema/mvc/schema/mvc/spring-mvc-4.0.xsd"><!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 --><context:component-scan base-package="com.myProcess.study.web"/><!--避免IE执行AJAX时,返回JSON出现下载文件 --><bean id="mappingJacksonHttpMessageConverter"class="org.springframework.http.converter.json.MappingJacksonHttpMessageConvert er"><property name="supportedMediaTypes"><list><value>text/html;charset=UTF-8</value></list></property></bean><!-- 启动SpringMVC的注解功能,完成请求和注解POJO的映射 --><beanclass="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAd apter"><property name="messageConverters"><list><ref bean="mappingJacksonHttpMessageConverter"/><!-- JSON转换器 --></list></property></bean><!-- 定义跳转的文件的前后缀,视图模式配置--><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个可用的url地址 --><property name="prefix"value="/WEB-INF/jsp/"/><property name="suffix"value=".jsp"/></bean><!-- 配置文件上传,如果没有使用文件上传可以不用配置,当然如果不配,那么配置文件中也不必引入上传组件包 --><bean id="multipartResolver"class="monsMultipartResolver"> <!-- 默认编码 --><property name="defaultEncoding"value="utf-8"/><!-- 文件大小最大值 --><property name="maxUploadSize"value="10485760000"/><!-- 内存中的最大值 --><property name="maxInMemorySize"value="40960"/></bean></beans>4、web.xml这里面对spring-mybatis.xml的引入以及配置的spring-mvc的Servlet就是为了完成SSM整合,之前2框架整合不需要在此处进行任何配置。
SpringBoot整合Mybatis,解决TypeAliases配置失败的问题

SpringBoot整合Mybatis,解决TypeAliases配置失败的问题问题描述在应⽤MyBatis时,使⽤对象关系映射,将对象和Aliase映射起来。
在Mybatis的⽂档明确写出,如果你没有明确定义实体类的Aliase,框架会⾃动将Class Name⾃动作为别名。
那么问题来了,当使⽤java -jar xxx.jar&启动的时候,会报出以下错误,Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'XXXXX'.Cause: ng.ClassNotFoundException: Cannot find class: XXXXX 从异常信息来看,明显就是⽆法从本地检索到alise对应的类,并最终导致sqlSessionFactory等初始化失败。
⽽且吊轨的是,直接在Idea中启动是没有问题的,启动jar包才会出现这个问题解决⽅法参考博主A_Beaver的⽂章,原来mybatis的facroty需要加载SpringBoot独特的虚拟⽂件系统,才能识别类路径public SpringBootVFS() {this.resourceResolver = new PathMatchingResourcePatternResolver(getClass().getClassLoader());}从以上代码看,其实是通过PathMatchingResourcePatternResolver实现资源的加载修复该问题只需要在mybatis的配置类中,设置⼀下factory即可,@Bean(name = "masterSqlSessionFactory")@Primarypublic SqlSessionFactory sqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource) throws Exception {SqlSessionFactoryBean bean = new SqlSessionFactoryBean();bean.setDataSource(dataSource);bean.setVfs(SpringBootVFS.class);//设置SpringBootVFSbean.setTypeAliasesPackage("com.fulan.domain.red");...}SpringBoot整合Mybatis及遇到的坑1. 搭建项⽬环境1.1 创建项⽬1.2 修改POM⽂件,添加相关依赖修改pom.xml⽂件,在其中添加下⾯依赖。
从零开始搭建springboot+springcloud+mybatis本地项目全过程(图解)

从零开始搭建springboot+springcloud+mybatis本地项⽬全过程(图解)记录⼀下从零开始搭建⼀个springboot+springcloud+mybatis本地项⽬的demo的过程。
纯代码⼩⽩⼀枚,若有不⾜或错误之处,欢迎⼴⼤朋友指出!开发环境准备:IDE:IntelliJ Idea 2019.3数据库:mysql 8.0.2.2SpringBoot版本:2.2.0.RELEASESpringCloud版本:Hoxton.RELEASE⼀、创建⼀个新的Idea项⽬打开Idea,单击New->File->Project,选择Maven,直接下⼀步输⼊我们的项⽬名,我这⾥起名为pam,单击Finish完成创建⼆、右键单击project下的⽗节点->New->Module,创建⼀个注册中⼼服务端的Module,输⼊⼀下名称,我这⾥以pam-server为例,直接选finish;同理再创建⼀个客户端的Module,输⼊⼀下名称,我这⾥以pam-service为例,直接选finish,结构如图所⽰:三、单击File->Settings->Maven,配置⼀下本地的maven,单击OK四、在最外层pom⽂件引⼊⼀下springboot、springcloud及mybatis的依赖。
这⾥引⼊的springboot版本为2.2.0-RELEASE,与之相对应的springcloud版本为Hoxton.RELEASE。
注意⼆者版本需要相适配,否则会启动报错。
这⾥额外引⼊了⼏个常⽤依赖,直接在maven单击⼀下刷新,仓库即可在线将所需依赖下载进去。
<dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.2.0.RELEASE</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Hoxton.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><!--注册中⼼相关依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.0.4.RELEASE</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.10.0</version></dependency><!--mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.16</version></dependency><!--mybatis--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.0.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope></dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka-server</artifactId><version>1.3.1.RELEASE</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-contract-stub-runner</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-contract-verifier</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-stream-test-support</artifactId><scope>test</scope></dependency><dependency><groupId>mons</groupId><artifactId>commons-lang3</artifactId><version>3.5</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.0.1</version></dependency><dependency><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId><version>2.6</version></dependency></dependencies>五、创建如图所⽰的⽬录结构:①编写注册中⼼,注册中⼼⽬录结构:编写WebApplication启动类,添加注解@EnableEurekaServer和@SpringBootApplication,我这⾥想做⼀个纯注册中⼼,不与数据库挂钩,所以增加了⼀个exclude = DataSourceAutoConfiguration.class,启动项⽬时不⾃动与数据库连接,若想让注册中⼼也连接数据库,这个exclude也可以不要。
《Java企业应用开发(SSM)》课程标准

《Java企业应用开发(SSM)》课程标准课程名称:Java企业应用开发(SSM)课程代码:3250620适用专业:软件技术专业(软件开发方向)课程性质:专业核心课程学时:96学时(理论: 48 实践: 48)学分:6学分一、课程性质与任务本课程是软件技术专业(软件开发方向)的核心课程,是基于软件项目开发实际生产过程的“工学结合”课程。
通过课程的学习,使学生掌握SSM(Spring+Spring MVC+MyBatis)的基本知识,能用Spring 框架创建包含松散耦合的应用程序组件,能用MyBatis框架实现数据的存储和访问。
同时在实践教学中,培养学生良好的编程习惯,积累解决实际问题的能力,提高学生的职业综合素质。
本课程与其他课程的关系:前导课程包括《网页设计客户端技术》、《Java编程设计基础》、《Java高级程序设计》、《Java Web应用开发》、《关系数据库》等,后续课程包括《Java Web应用实战》。
二、目标与要求(一)总体目标与要求通过应用情景的学习与分析,要求学生能够掌握SSM(Spring+Spring MVC+MyBatis)三大框架的基本知识,能够正确配置和使用SSM框架的整合技术,适应企业级开发的技术需要,为大型项目开发奠定基础。
同时要求学生掌握需求分析、详细设计、系统实现和系统维护等软件开发的各项能力,培养学生较强的团队合作、沟通表达、工作责任心、职业道德与规范等综合素质,为学生以后从事更专业化的软件开发工作奠定基础。
(二)具体目标与要求1、知识目标与要求本课程为理实一体课程,理论知识的传授和操作技能的培养贯彻教学的始终。
课程的知识目标与要求如下:(1)掌握Spring框架技术,熟悉Spring框架技术的概念,掌握Spring的核心机制:IoC与AOP技术。
(2)熟悉Spring MVC框架技术中基于注解的控制器、视图解析器、数据绑定的处理等,掌握Spring MVC的配置、请求拦截器以及SSM框架的集成。
SpringMVC+Mybatis+extjs4项目配置

SpringMVC+Mybatis+extjs4项目配置1)软件准备:1.Jdk6:这个需要统一一下,如果用高于jdk6得版本开发,到发布到tomcat服务器后可能运行不正常,在ide上的高版本到低版本的话,也可能出现编译错误的问题,这个要跟生产环境统一起来;2.Tomcat6(7):这个好像关系不太大,主要看生产环境,但如果页面使用了el表达式的话,则需要用高一点的tomcat服务器,低版本的tomcat对el表达式不支持;3.springsource-tool-suite:开发的ide,推荐使用zip安装包,版本2.9的吧,现在的3.1不是很稳定,占用内存很高,经常不响应2)springMVC相关库(jar)配置1.jar的引用主要配置在maven的pom.xml文件了,整个项目都是用pom.xml文件来组织的,如下图:实际项目的结果如:有点不同,所有的代码是放在src文件夹里的,main/webapp文件夹则对应于发布到tomcat 应用的文件夹,所有如果要提交svn,则只需要提交src里的代码,如果改动了非*.java代码,也只要更新webapp目录里改动文件至tomcat相应目录就行了;2.配置pom.xml可能用到的jar包:1)Mybatis:数据库持续层;<dependency><groupId>org.mybatis</groupId><version>1.1.1</version></dependency>2)Mysql:数据库的jdbc的jar包;<dependency><version>5.1.21</version></dependency>3)其他可能用得到的jar包:zip(org.apache.ant),json转换(com.alibaba),文件上传组件(commons-fileupload,commons-io)<dependency><groupId>com.alibaba</groupId><version>1.1.22</version></dependency><dependency></dependency><!-- File Upload --><dependency><version>1.2.2</version></dependency><dependency><version>2.0.1</version></dependency><dependency><groupId>org.codehaus.jackson</groupId><version>1.4.2</version></dependency>4)当改动pom.xml文件后,maven会自动更新项目的jar包,并更新至项目里的引用,如下图:3.项目里配置当把需要用到的jar包引用之后,spring框架里可以使用jar包里面的类,但有些jar包时需要spring的运行时自动加载到mvc运行环境中的,比如数据库持续层mybatis1)Mybatis配置:<bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" />rEncoding=UTF-8&useUnicode=true" /><property name="password" value="123456" /></bean><!-- 配置SqlSessionFactoryBean --><bean id="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryB ean"><property name="dataSource"ref="dataSource"/><property name="configLocation"value="classpath:mybatis.xml"/> </bean><!-- 配置事务管理器 --><bean id="transactionManager"class="org.springframework.jdbc.datasource. DataSourceTransactionManager"><property name="dataSource"ref="dataSource"/></bean><!-- 配置事务的传播特性 --><bean id="baseTransactionProxy"class="org.springframework.transaction.in terceptor.TransactionProxyFactoryBean"abstract="true"><property name="transactionManager"ref="transactionManager"/><property name="transactionAttributes"><props><prop key="add*">PROPAGATION_REQUIRED</prop><prop key="edit*">PROPAGATION_REQUIRED</prop><prop key="remove*">PROPAGATION_REQUIRED</prop><prop key="insert*">PROPAGATION_REQUIRED</prop><prop key="update*">PROPAGATION_REQUIRED</prop><prop key="del*">PROPAGATION_REQUIRED</prop><prop key="*">readOnly</prop></props></property></bean><!-- 通过扫描的模式,扫描目录 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage"value="com.spring.wlanmis.data.mapper"/></bean>上面的配置主要是:数据库连接,mybatis.xml,MapperScannerConfigurer(数据库Mapping扫描目录,项目的包结构如下:可以这样看,entity里的类一般要配置在mybatis.xml里,mapper里的文件是成对的,一个是xxx.xml文件,另一个是xxx.java(接口)文件,并mapper必须在配置root-content.xml 里的org.mybatis.spring.mapper.MapperScannerConfigurer中,不然mybatis组件就不能实例化2)其他的配置配置文件上传,详细代码可以查看FileUploadController.java<bean id="multipartResolver"class="monsMultipartResolv er"><property name="maxUploadSize"value="8000000"/></bean>剩下的就只是一些普通的javabean配置了,只是为了配置项目的全局参数,类似于ftpScanRunner3)前端extjs的配置:前端比较简单,只是在页面里设置引用,修改后也不用编译代码,发布时可以直接更新到服务器里相应目录进行覆盖,一般引用如下图项目里文件目录结构如下:具体的extjs4的前端mvc框架,还是参照官网/deploy/ext-4.1.0-gpl/examples/,可以先了解一下它的运行机制,项目的所有视图切换都在menu.json文件里。
SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)

SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)使用SSM(Spring、SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方。
之前没有记录SSM整合的过程,这次刚刚好基于自己的一个小项目重新搭建了一次,而且比项目搭建的要更好一些。
以前解决问题的过程和方法并没有及时记录,以后在自己的小项目中遇到我再整理分享一下。
这次,先说说三大框架整合过程。
个人认为使用框架并不是很难,关键要理解其思想,这对于我们提高编程水平很有帮助。
不过,如果用都不会,谈思想就变成纸上谈兵了!!!先技术,再思想。
实践出真知。
(可通过图片水印查看博客地址)1、基本概念1.1、SpringSpring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。
它是为了解决企业应用开发的复杂性而创建的。
Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。
然而,Spring的用途不仅限于服务器端的开发。
从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
1.2、SpringMVCSpring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。
Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。
1.3、MyBatisMyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。
ssm轻量级框架应用实战课后题答案

ssm轻量级框架应用实战课后题答案什么是框架?框架就是一个提供了可重用的公共结构的半成品。
为构建新的应用程序提供便利,是可以拿来就用的工具,还提供了可重用的设计。
框架的有点1)不用再考虑公共问题,框架已经做好了2)可以专心于业务逻辑,保证核心业务逻辑的开发3)结构统一,便于学习和维护4)框架中集成了前人的经验,可以帮助新手写出稳定,性能优良而且结构优美的高质量程序。
当前主流框架1.Struts2.hibernate框架3.spring 框架什么是数据持有化就是将内存中的数据模型转换成存储模型,以及将存储模型转换为内存中的数据模型统称。
MyBatismybatis是一个开源的数据持有层框架。
主要思想是将程序中的大量SQL语句剥离出来,配置在文件中,实现SQL的灵活配置。
什么是ORM对象/映射是一种数据持久化技术。
他在对象模型和关系型数据库之间建立对应关系,并且提供一种机制,通过JavaBean对象去操作数据库表中的数控。
MyBatis基于ORM,MYBatis在对象模型和关系数据库表之间建立了一座桥梁。
通过Mybatis,可以建立SQL关系映射,便捷地实现数据存储,查询,更改和删除操作。
搭建Mybatis环境①下载jar包——-②部署jar包——-③编写MyBatis核心部署文件——-④创建实体类——-⑤创建DAO接口——-⑥创建SQL映射文件——-⑦编写测试类MyBatis优点①、与JDBC相比,减少50%以上的代码量②、mybatis是简单的持久化框架,小巧简单易学③、mybatis相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML里,从程序代码彻底分离,既降低耦合度,又便于统一管理和优化,还可重用。
④、提供XML标签,支持编写动态SQL语句⑤、提供映射标签,支持对象与数据库的ORM字段关系映射Mybatis框架的缺点①、SQL语句的编写工作量较大,对开发人员编写SQL语句的功底又一定要求②、SQL语句依赖数据库,导致数据库移植性差,不能随意更换数据库Mybatis框架适用场合对性能要求很高的项目,或者需求变化较多的项目。
IDEA创建springboot+mybatis项目全过程(步骤详解)

IDEA创建springboot+mybatis项⽬全过程(步骤详解)鉴于隔很久再在IDEA新建springboot项⽬时,会出现对步骤不确定的情况,因此,写下这篇博客记录创建⼀个可运⾏的springboot+mybatis项⽬的全过程。
步骤如下:1.打开IDEA2.File ==> new ==> project ,如图:3.选择spring Initializr ==> 右边的Project SDK我选的是我已经安装的1.8版本,其他默认 ==> 点击next4.填写Group (⾃⼰随意就⾏,我的是cn + 个⼈英⽂名 + study) ==> 填写 Artifact (也是⾃⼰随意就⾏,这个也是你的项⽬名) ==> 点击next ,如图:5.选择项⽬所需依赖(由于项⽬是springboot+mybatis的Java后台项⽬,因此需要勾上三个依赖) ==> 点击next ,如图:6.选择项⽬路径 ==> 点击finish ,如图:6.最终⽣成的项⽬代码⽬录如图(resources⽬录下的static和templates⽬录⽆⽤,可以删掉):(注:如果DemoprojectApplication类(即启动类)的图标显⽰是 J ⽽不是 C ,则说名该项⽬还没有被初始化为maven项⽬,只需要在项⽬的pom.xml⽂件上右键,再选择 Add as maven 即可)⾄此,springboot项⽬搭建完成⼀半,还需要做mybatis的配置,如下:7.数据库和mybatis的配置7.1 在application.properties填⼊数据库连接参数和mybatis配置信息,application.properties内容如下:#1.项⽬启动的端⼝server.port=18902#2.数据库连接参数#2.1jdbc驱动,⽰数据库⼚商决定,这是mysql的驱动jdbc.driver=com.mysql.cj.jdbc.Driver#2.2数据库连接url,包括ip(127.0.0.1)、端⼝(3306)、数据库名(testdb)jdbc.url=jdbc:mysql://127.0.0.1:3306/testdb?useUnicode=true&characterEncoding=utf-8&useSSL=false#2.3数据库账号名ername=root#2.4数据库密码jdbc.password=mypassword#3.Mybatis配置#3.1 mybatis配置⽂件所在路径mybatis_config_file=mybatis-config.xml#3.2 mapper⽂件所在路径,这样写可匹配mapper⽬录下的所有mapper,包括其⼦⽬录下的mapper_path=/mapper/**/**.xml#3.3 entity所在包entity_package=cn.stephen.study.demoproject.entity⽰例如图:7.2 在resources⽬录下新建 mybatis-config.xml⽂件,⽂件内容如下:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-////DTD Config 3.0//EN""/dtd/mybatis-3-config.dtd"><!-- 配置⽂件的根元素 --><configuration><!--配置全局属性--><settings><!--使⽤jdbc的getGeneratedKeys获取数据库⾃增主键值--><setting name="useGeneratedKeys" value="true"/><!--使⽤列标签替换列别名默认未true--><setting name="useColumnLabel" value="true" /><!--开启驼峰式命名转换:Table{create_time} -> Entity{createTime}--><setting name="mapUnderscoreToCamelCase" value="true" /></settings></configuration>效果如图:7.3 新建 config包,在其中新建配置类。
spring整合mybatis报.UnsatisfiedDependencyException错误

spring整合mybatis报.UnsatisfiedDependencyException错误tomcat启动报org.springframework.beans.factory.UnsatisfiedDependencyException:错误org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'bookController': Unsatisfied dependency expressed through field 'bookService'; nested exception is org.springframework.beans.factory.NoSuchB at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:596)at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:90)at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:374)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1411)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:592)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515)at mbda$doGetBean$0(AbstractBeanFactory.java:320)at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:845)at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:877)at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549)at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:701)at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:667)at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:715)at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:590)at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:529)at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:169)at javax.servlet.GenericServlet.init(GenericServlet.java:158)at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1132)at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1079)at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:973)at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4885)at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5199)at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:743)at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:719)at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:714)at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1720)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at ng.reflect.Method.invoke(Method.java:498)at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:287)at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:483)[2019-08-26 06:45:42,635] Artifact MySSM:war exploded: Artifact is deployed successfully[2019-08-26 06:45:42,635] Artifact MySSM:war exploded: Deploy took 8,803 millisecondsat org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:432)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at ng.reflect.Method.invoke(Method.java:498)at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:287)at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)at com.sun.jmx.remote.security.MBeanServerAccessController.invoke(MBeanServerAccessController.java:468)at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1468)at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76)at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1309)at java.security.AccessController.doPrivileged(Native Method)at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1408)at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:829)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at ng.reflect.Method.invoke(Method.java:498)at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357)at sun.rmi.transport.Transport$1.run(Transport.java:200)at sun.rmi.transport.Transport$1.run(Transport.java:197)at java.security.AccessController.doPrivileged(Native Method)at sun.rmi.transport.Transport.serviceCall(Transport.java:196)at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:573)at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:834)at sun.rmi.transport.tcp.TCPTransport$mbda$run$0(TCPTransport.java:688)at java.security.AccessController.doPrivileged(Native Method)at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:687)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at ng.Thread.run(Thread.java:748)Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.train.ssm.service.BookService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1658)at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1217)at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1171)at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:593)... 69 more原因,web.xml中未添加ContextLoaderListener监听器。
SpringBoot整合MybatisSQL过滤@Intercepts的实现

SpringBoot整合MybatisSQL过滤@Intercepts的实现场景:系统模块查询数据库需要根据⽤户的id去筛选数据。
那么如果在每个sql加user_id的过滤显然不明确。
所以要在查询前将sql拼接上条件,做统⼀管理。
开发环境:spring boot + mybatis只需⼀个拦截类即可搞定(在看代码前需要了解注解@Intercepts()):@Component@Intercepts({ @Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class }) }) public class SqlInterceptor implements Interceptor {private Logger logger = LoggerFactory.getLogger(SqlInterceptor.class);@Overridepublic Object intercept(Invocation invocation) throws Throwable {("Interceptor......");// 获取sqlMappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0];Object parameter = invocation.getArgs()[1];BoundSql boundSql = mappedStatement.getBoundSql(parameter);String oldsql = boundSql.getSql();("old:"+oldsql);// 判断sql是否有where条件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Spring3.0.6 +mybatis 3.0.6搭建Spring:上个星期天开始做老师给的东西,这次打算用上刚学习了得MyBatis,然后就还想要要能上JAVA里面很强大的很好用的Spring框架,但是我以前也没有学过,直接是硬着头皮来做的。
因为我采用的是mybatis-3.0.6-bundle+spring-3.0.6.RELEASE这两个版本的整合,都比较新,所以网上资料还是很少的。
所以遇到了很多问题,故作此次总结,希望以后能帮助到各位。
准备工作:1.的。
2.解压spring-framework-3.0.6.RELEASE-with-docs.zip,找到dist目录,下面的就是spring会用到的jar包了,具体jar包得作用如下:搭建Spring步骤:3.在myeclipse中新建一个web项目,名字叫做T estSpring2,为了省事,直接将上面所有的spring的jar包导入lib文件夹。
具体也可以根据上面有选择性的导入。
4.新建spring的配置文件,名字可以随便起,但是要注意,这个文件的路径是需要在web.xml中配置的,我起名叫做ApplicationContext.xml,放在了web-inf目录下,内容如下:记得如果拷贝这里的内容最好先拷贝到记事本,再拷贝到myeclipse下面去,就不会报错了。
5.按理来上,做好上面的配置,spring就应该配置好了。
但是,如果此时部署到tomcat,在tomcat的config目录中server.xml的最后倒数第三行左右,在</Host>这个结束标签之前加入如下配置:6.此时,启动tomcat,会报如下的错误:7.发生这个错误的原因在于没有导入spring的相关依赖包,现在导入上面罗列的commons-logging-1.1.1.jar包到lib目录。
8.再次启动tomcat,错误消失。
9.测试spring配置正确。
这个不一定是必须的,但是为了初步学习一下spring的用法,我举得还是有必要测试一下。
测试的方法:我们通过浏览器访问http://localhost/course/这个地址,然后后台想数据库插入一条数据,表名为TestT able, 建表语句如下:10.先配置spring的数据源,也就是配置数据库的连接。
11.将mysql的驱动包拷贝进lib文件夹,在新建一个properties文件在web-inf文件夹下面,内容如下:这个里面的value使用了${}表达式,{}中的名称就是上面jdbc.properties文件中对应的字段名称。
但是这个时候需要将Commons-dbcp.jar和Commons-pool.jar导入进lib包下。
到这里,Spring的数据源就配置成功了。
20.在web.xml中配置该servlet,如下:http://localhost/course/,查看出结果和数据库的信息查看以上信息,后台打印正确。
查看数据库,插入成功。
那么spring的环境就配置成功了。
下一讲我将整理出如何将mybatis整合进spring。
配置MybatisMyBatis介绍:首先,说说Mybatis这个东西。
Mybatis就是是以前ibatIS的升级版,正是在今年(2011年)的6月中旬,在apache寄居6年的ibatIS脱离apache了,将代码托管到Google Code,与此同时改名为mybatis。
Mybatis作为一个实现了JPA( Java Persistence API)规范的一门O/R Mapping 框架(对象/关系映射),有着易学易用,轻巧灵活等特点。
尤其是对于擅长SQL的开发人员来说,mybatis对SQL 和存储过程的直接支持能够让他们在获得mybatis封装优势的同时而不丧失SQL调优的手段,这是Hibernate所无法比拟的。
具体来说:1.mybatis封装了绝大多数的JDBC样板代码,使得开发者只需要关注SQL本身而不需要花费精力去处理例如注册驱动,创建Connection,以及确保关闭Connection这样繁琐的代码。
2. 学习成本低,最容易上手和掌握的框架。
上面已经搭建好了Spring,我现在就来写将mybatis整合进spring整合mybatis1.首先我们需要导入mybatis-3.0.6.jar和mybatis-spring的整合包mybatis-spring-1.0.3-SNAPSHOT.jar到lib文件夹中2.编写MyBatis的总配置文件,名字也可以随便取,但是后面也要在spring的配置文件中指定该配置文件的路径。
在WEB-INF目录下新建一个文件SqlMapConfig.xml:3.4.编写在SqlMapConfig.xml文件中vo类对应的DAO类对应的xml文件。
这个xml中定义在这张表上所有进行的CRUD操作的具体SQL语句,也就是实现类在实现所操作的sql 语句都是在这个文件里面所读取的。
说白了就是一个SQL语句集合的文件。
具体模板如下:假如mapper中有如下的语句:INSERT INTO COLLEGETABLE (COLLEGENAME ,COLLEGEDESCRIPTION)VALUES ($(#){collegeName},$(#){collegeDescription})a)$表示取值,那么从mapper文件中读取这个sql语句为:INSERT INTO COLLEGETABLE(COLLEGENAME ,COLLEGEDESCRIPTION) VALUES (aaa,bbbb) 不是问号,而是具体的值这个时候读取的SQL是讲我们的值设置到了sql语句,就没有占位符?b)#表示占位符,那么从mapper文件中读取的该sql语句如:INSERT INTO ANNOUNCEMENT(TITLE,CONTENT) VALUES (?,?)所以搞不好就会报错:Cause: com.my sql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'aaa' in 'field list' 5.重新编写一个IT estTableDAO的实现类ITestT ableDAOImpl2.java,这里,我所有的DAO设计有点问题,但是不影响实现,希望大家以后不要像我这样写。
我懒得从前面改了。
在DAO接口中的时候就把所有方法的参数带上,我这儿没有带上,所以有点难看。
6.7.剩下就是将我们刚刚写的第二个实现类配置到Spring的配置文件中去,让service调用我们刚刚编写的类,而不是前一个。
对ApplicationContext.xml做如下修改:8.9.至此,那么我们的Spring+MyBatis环境就搭建好了,但是,我们还需要配置日志环境,因为如果一旦出错,我们根本不知道错出在哪里,出了什么错。
下一讲我接着写Spring中如何配置log4j.来打印输入日志信息.Spring中Log4j的配置:配置Log4j:1.在src路径下新建一个Log4j.properties文件,注意,这个文件必须放在src路径下,我曾试过,放在其他路径,就算是路径写对了,依然要报错的。
内容如下:2.3.在启动的时候发现打印了很多的debug信息。
具体要输出哪些信息,可以去log4j.properties文件中去配置。
如图所以,打印出了我们所需要的信息。
那么log4j配置成功。
JUnit in Spring为什么要用JUnit spring?在web开发的时候,有很多模块要写,我们不可能让所有的模块都写好了以后放在一起,在浏览器里面再来运行,调试。
而应该是一个模块写完,就测试一个模块,但是问题就来了,如果每次都测试又是重启服务器,刷新浏览器,特别是当项目很大的时候,重启一次得花上几分钟的时间。
这样的调试效率就很低。
为了解决这个问题,spring框架提供了一个测试模块,供我们进行JUnit测试。
下面我就来讲一讲怎么配置JUnit的测试环境来测试我们的模块。
配置JUnit的测试环境:1.添加JUnit的jar包。
在myeclipse中自带了JUnit4的测试jar包,所以我们需要关联到我们的项目。
a)在项目上点击右键,选择Build Path-->Add Libraries--> 选择JUnit-->Next-->选择JUnit4-->finish2.测试最麻烦的是在于得到相关配置文件的路径问题,具体几种方式我写不清楚。
我大致说一下,有可能不对哟。
大家最好自己去查一下。
a)默认的路径是到src目录,也就是WebRoot目录的classes目录下去找。
也就是路中加一个classpath:或者不加,默认的就是采用的这种方式。
但是这种方式需要的是将所有的配置文件都写在src目录下。
b)我没有采用上一种方式,因为我的配置文件都是放在WEB-INF目录下的,classpath是找不到该目录,也就是如果我继续使用上面的项目来进行测试,我就必须采用另一种路径查找方式。
绝对路径:i.路径前面加上一个file:这个时候的路径相对的是网站的根路径。
所以我的项目前面是采用的默认的classpath寻址方式,我现在得做修改。
3.修改所有配置文件的路径:因为我们不会启动tomcat服务器,所以不用修改web.xml中的路径。
修改Spring的配置文件:ApplicationContext.xml文件4.接下来我们需要编写一个测试类:绿条,表明测试结果成功。
在查看数据库,应该有4条记录:(Spring→Mybatis→Log4j→JUnit)所以有四次插入数据库的操作。
只是我的项目当时没有写好,后面又懒得改了。
至此,Spring-3.0.6+mybatis3.0.6的环境搭建和测试环境全部完成,大家自己下去好好表演吧。