Spring+mybatis环境搭建
- 格式:doc
- 大小:311.00 KB
- 文档页数:21
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⼀分钟搭建完成打开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注解⽅式搭建 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实现简单增删改查功能实现步骤:⼯具: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增删改查内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
《基于SSM框架的网上商城系统的设计与实现》篇一一、引言随着互联网技术的快速发展,电子商务已成为人们购物的主要方式之一。
为了满足用户多样化的购物需求,基于SSM (Spring、SpringMVC、MyBatis)框架的网上商城系统应运而生。
本文将详细介绍该系统的设计思路与实现过程,以期为相关开发人员提供参考。
二、系统需求分析在系统需求分析阶段,我们首先明确了系统的目标用户、业务需求及功能需求。
目标用户主要包括普通消费者、商家及管理员。
业务需求涉及商品管理、购物车管理、订单管理、支付管理、用户管理等模块。
功能需求则根据业务需求细化,如商品展示、商品搜索、购物车添加/删除商品、下单、支付、评价等。
三、系统设计1. 技术架构设计本系统采用SSM框架进行开发,技术架构包括表现层、业务逻辑层及数据访问层。
表现层负责与用户进行交互,业务逻辑层负责处理业务逻辑,数据访问层负责与数据库进行交互。
系统采用B/S架构,支持多终端访问。
2. 数据库设计数据库设计是系统设计的关键环节。
根据系统需求分析,我们设计了商品表、用户表、订单表、购物车表等核心数据表。
同时,为了确保数据的一致性和完整性,我们还设计了相应的约束条件和索引。
四、系统实现1. 开发环境搭建系统开发环境包括JDK、Tomcat服务器、MySQL数据库及开发工具等。
在搭建过程中,我们需要注意版本兼容性和配置的正确性。
2. 模块实现根据系统设计,我们将系统分为商品管理、购物车管理、订单管理、支付管理、用户管理等模块。
每个模块都包含了相应的业务逻辑和操作界面。
在实现过程中,我们采用了SSM框架的优点,将业务逻辑与数据访问分离,提高了系统的可维护性和可扩展性。
五、关键技术实现1. Spring框架的应用Spring框架在系统中扮演了核心角色。
我们通过Spring的依赖注入功能实现了业务逻辑与数据访问的解耦,提高了系统的可维护性。
同时,Spring还提供了事务管理功能,确保了数据的完整性和一致性。
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-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配置失败的问题问题描述在应⽤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本地项⽬的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也可以不要。
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的环境搭建和测试环境全部完成,大家自己下去好好表演吧。