SSM Spring SpringMVC Mybatis框架整合Java配置完整版
以前用着SSH都是老师给配好的,自己直接改就可以。但是公司主流还是SSM,就自己研究了一下Java版本的配置。网上大多是基于xnl的配置,但是越往后越新的项目都开始基于JavaConfig配置了,这也是写此文章的原因。不论是eclipse还是myeclipse 都没有集成mybatis的相关组件,Spring也没有对其进行兼容,所以说我们会用到一些mybatis提供的核心jar包。下面先看一下我们的项目结构,我先自建了一个集成spring4.1的 ssm web项目(红色箭头指向注意删除web.xml配置,因为后期会和我们的java配置冲突而导致项目失败),结构如下图:
(一)介绍Mybatis
当你看到这里说明你并不是很了解mybatis,或者只是有其他框架的开发经验。所以建议你还是看下去。工欲善其事必先利其器,想要用mybatis必须先了解哦我们的mybatis。这里不说mybatis的起因来源,也不说他的深层机理。就简单谈一谈在ssm框架中的位置。以前用的ssh 我一直写的是HQL sq语句,web项目中的mvc框架一直占据了主流,几乎所以的CURD都是遵循这个框架来实现的,开发者通常会建立对应的service,dao,web层进行分层操作。为了代码的健壮性和可修改性,那些分层通常设计为接口类型,然后功能实现再通过相应的接口实现。而mybatis特殊的是,通过数据库逆向工程生成的XXXmapper.java全是接口文件,一个XXXmapper.java对应一个XXXmapper.xml 来实现持久层的操作。
刚刚说到的mybatis逆向工程,熟悉hibernate的知道,hibernate给不一样的ide都适配了逆向工程的专用插件。而mybatis没有,但是官方给出的方法更是简单,使用简单的xml配置搭上相应的java代码一运行,就可以实现数据库的逆向工程。生成我们所需要的l实体,和操作映射。这个时候我们就可以把逆向工程的对应文件路径进行设置,分别对应我们的model和dao层。说了这么多就是这一句分层的思想。下面简单看一下逆向工程代码:
官方给出的java主文件,起名为GeneratorSqlmap:主要修改这一语句:File configFile = new File("./resources/generatorConfig.xml");这里我们的配置xml放在resources资源文件夹下面。
package com.gede.reversedb;
/**
* @author gede
* @version date:2019年6月18日 上午10:10:49
* @description :
*/
import java.io.File;
import java.util.*; import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback; public class GeneratorSqlmap { public void generator() throws Exception {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
// 指定配置文件
File configFile = new File("./resources/generatorConfig.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(null);
}
// 执行main方法以生成代码
public static void main(String[] args) {
try {
GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap();
generatorSqlmap.generator();
} catch (Exception e) {
e.printStackTrace();
}
}
}
再看我们resources下的generatorConfig.xml 文件。主要填写这些信息:
- Mysql数据库连接的信息:驱动类、连接地址、用户名、密码
- 生成POJO类的位置
- mapper映射文件生成的位置
- mapper接口生成的的位置
- 指定数据表
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <generatorConfiguration>
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 是否去除自动生成的注释 -->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!-- Mysql数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/hotel"
userId="root"
password="112233">
</jdbcConnection> <!-- 默认为false,把JDBC DECIMAL 和NUMERIC类型解析为Integer,为true时
把JDBC DECIMAL 和NUMERIC类型解析为java.math.BigDecimal -->
<javaTypeResolver >
<property name="forceBigDecimals" value="false" />
</javaTypeResolver> <!-- targetProject:生成POJO类的位置 -->
<javaModelGenerator targetPackage="com.gede.model" targetProject=".\src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator> <!-- targetProject:mapper映射文件生成的位置 -->
<sqlMapGenerator targetPackage="com.gede.dao" targetProject=".\src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator> <!-- targetProject:mapper接口生成的的位置 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.gede.dao" targetProject=".\src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator> <!-- 指定数据表 -->
<table schema="" tableName="webuser"></table> <!-- 有些表的字段需要指定java类型
<table schema="DB2ADMIN" tableName="ALLTYPES" domainObjectName="Customer" >
<property name="useActualColumnNames" value="true"/>
<generatedKey column="ID" sqlStatement="DB2" identity="true" />
<columnOverride column="DATE_FIELD" property="startDate" />
<ignoreColumn column="FRED" />
<columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" />
</table> -->
</context>
</generatorConfiguration>
配置好以后运行我们的java文件,如果自己已经建好包直接打开就可以,如果之前没有包,记得刷新一下项目。这个时候再看我们的项目结构大致是这样的:你会发现model下面还多了一个xxxExampled的java文件。他的区别用途如下图:
图片原文地址:https://blog.csdn.net/qq_39056805/article/details/80585941
(二)配置spring
到这里我们的mybatis相应的文件已经应有具有,本来按常规思路来说应该是先搭建spring+springMVC然后再整合mybatis,但是这里还是先铺垫了mybatis。下面我们进行项目spring搭建。
首先设置Spring的启动,需要ConfigInit.java、WebConfig.java、RootConfig.java
ConfigInit.java
package com.gede.config; import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; /**
* @author gede
* @version date:2019年6月20日 下午10:09:38
* @description :充当web.xml的作用。
*/
public class ConfigInit extends AbstractAnnotationConfigDispatcherServletInitializer{
/**
* 加载RootConfig配置文件
*/
@Override
protected Class<?>[] getRootConfigClasses() {
// TODO Auto-generated method stub
return new Class<?>[] {RootConfig.class};
}
/**
* 加载网站配置文件
*/
@Override
protected Class<?>[] getServletConfigClasses() {
// TODO Auto-generated method stub
return new Class<?>[] {WebConfig.class};
}
/**
* 设置项目起始目录路径为/
*/
@Override
protected String[] getServletMappings() {
// TODO Auto-generated method stub
return new String[]{"/"};
} }
WebConfig.java
package com.gede.config; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
import org.springframework.web.servlet.view.InternalResourceViewResolver; /**
* @author gede
* @version date:2019年6月20日 下午10:09:49
* @description :
*/
@Configuration
@ComponentScan("com.gede.controller")
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter{
/**
* 配置试图控制器
* 统一解析/WEB-INF/view/下的jsp文件
* @return
*/
@Bean
public ViewResolver viewResolver()
{
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/view/");
resolver.setSuffix(".jsp");
return resolver;
}
/**
* 允许静态资源解析
*/
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer)
{
configurer.enable();
}
}
RootConfig.java
package com.gede.config; import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc; /**
* @author gede
* @version date:2019年6月20日 下午10:10:01
* @description :
*/
@Configuration
@EnableWebMvc
public class RootConfig { }
到这一步我们已经把Spring以及SpringMVC启动配置类做完了,我们需要一个index.jsp和控制器IndexController.java来实现一个最简单mvc;
IndexController.java
package com.gede.controller; import static org.springframework.web.bind.annotation.RequestMethod.GET; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; /**
* @author gede
* @version date:2019年6月20日 下午10:18:20
* @description :
*/
@Controller
public class IndexController {
@RequestMapping(value="/",method=GET)
public String index(){
return "index";
}
}
(三)整合mybatis
这是我们需要导入的jar包:mybatis基础包,mybatis逆向工程的三个核心包,mybatis-spring的集成包和我们的mysql驱动jar包,下面开始整合。
我们采用数据库连接处的DataSource方式,在这里有两种选择,一可以选择新建DataConfig.java的配置文件,也可以直接配在我们的RootConfig.java 里面。在这里我们选择配在RootConfig中:
配置数据源连接池:
@Bean
public BasicDataSource dataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/hotel?useUnicode=true&characterEncoding=UTF-8");
dataSource.setUsername("root");
dataSource.setPassword("112233");
return dataSource;
}
创建sqlSessionFactoryBean工厂
@Bean
public SqlSessionFactoryBean sqlSessionFactoryBean() {
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource());
try {
sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath:com/gede/dao/*.xml"));
} catch (IOException e) {
e.printStackTrace();
}
return sqlSessionFactoryBean;
}
设置mybatis基础扫描包和加载sql工厂
@Bean
public MapperScannerConfigurer mapperScannerConfigurer() {
MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
mapperScannerConfigurer.setBasePackage("com.gede.dao");
mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactoryBean");
return mapperScannerConfigurer;
}
这里的基础包扫描也可以使用@MapperScan()注释来实现,最后的RootConfig.java大致长这个样子:
package com.gede.config; import java.io.IOException; import org.apache.commons.dbcp.BasicDataSource;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc; /**
* @author gede
* @version date:2019年6月20日 下午10:10:01
* @description :
*/
@Configuration
@EnableWebMvc
//@MapperScan()
public class RootConfig {
/**
* 数据资源配置
* @return
*/
@Bean
public BasicDataSource dataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/hotel?useUnicode=true&characterEncoding=UTF-8");
dataSource.setUsername("root");
dataSource.setPassword("112233");
return dataSource;
}
/**
* mybatis配置
* @return
*/
@Bean
public SqlSessionFactoryBean sqlSessionFactoryBean() {
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource());
try {
sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath:com/gede/dao/*.xml"));
} catch (IOException e) {
e.printStackTrace();
}
return sqlSessionFactoryBean;
} /**
* mybatis配置
* @return
*/
@Bean
public MapperScannerConfigurer mapperScannerConfigurer() {
MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
mapperScannerConfigurer.setBasePackage("com.gede.dao");
mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactoryBean");
return mapperScannerConfigurer;
} }
这个时候运行我们的项目发小项目报错了:
org/springframework/dao/support/DaoSupport。。。。。。。。。。。。。
查了一下缺少jar包,网上的都是关于maven的添加依赖,最后我这里添加了hibernate的框架解决了。启动成功,到这里我们的SSM框架就整合完成了。
(四)测试
添加了hibernate的框架后,我们运行成功,开始写一些简单的测试。在这里我们写了一个user.jsp来显示从数据库中查到的用户信息,还有与其对应的SelectController 。
user.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<title>User</title>
<body>
<div >
<div><span>id:<c:out value="${user.id}" /></span></div>
<div><span>username:<c:out value="${user.username}" /></span></div>
<div><span>password:<c:out value="${user.password}" /></span></div>
<div><span>sex:<c:out value="${user.sex}" /></span></div>
<div><span>tele:<c:out value="${user.tele}" /></span></div>
<div><span>qq:<c:out value="${user.qq}" /></span></div>
<div><span>enabled:<c:out value="${user.enabled}" /></span></div>
<div><span>authority:<c:out value="${user.authority}" /></span></div>
</div>
</body>
</html>
SelectController 。通过调用相应的查询操作,然后我们让查询结果随model一起返回界面。这个时候我们的jsp上就可以用jstl来获取我们的值了。
package com.gede.controller; import static org.springframework.web.bind.annotation.RequestMethod.GET; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping; import com.gede.model.Webuser;
import com.gede.service.GetUserService; /**
* @author gede
* @version date:2019年6月20日 下午10:57:46
* @description :
*/
@Controller
public class SelectController {
private GetUserService getUserService; @Autowired
public SelectController(GetUserService getUserService) {
super();
this.getUserService = getUserService;
}
@RequestMapping(value="/select",method=GET)
public String index(Model model){
Webuser user=getUserService.select();
model.addAttribute("user", user);
return "user";
}
}
GetUserServiceImpl这是我们的service层代码,负责调用mybatis逆向生成的mapper接口。
package com.gede.service.impl; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import com.gede.dao.WebuserMapper;
import com.gede.model.Webuser;
import com.gede.service.GetUserService; /**
* @author gede
* @version date:2019年6月20日 下午10:54:29
* @description :
*/
@Component
public class GetUserServiceImpl implements GetUserService { private WebuserMapper webuserMapper; @Autowired
public GetUserServiceImpl(WebuserMapper webuserMapper) {
super();
this.webuserMapper = webuserMapper;
}
@Override
public Webuser select() {
Webuser webuser=webuserMapper.selectByPrimaryKey(1);
return webuser;
} }
到这里我们的项目大致如下,运行项目访问http://localhost:8080/ssm//select:
感谢大家的观看,如有疑问请联系g376482a@163.com。附相关jar包:地址 密码:i6s7
项目gitub地址:https://github.com/376482000/ssm-
SSM Spring SpringMVC Mybatis框架整合Java配置完整版的更多相关文章
- SSM(Spring,SpringMVC,Mybatis)框架整合项目
快速上手SSM(Spring,SpringMVC,Mybatis)框架整合项目 环境要求: IDEA MySQL 8.0.25 Tomcat 9 Maven 3.6 数据库环境: 创建一个存放书籍数据 ...
- SSM(Spring+SpringMVC+MyBatis)框架整合开发流程
回忆了 Spring.SpringMVC.MyBatis 框架整合,完善一个小demo,包括基本的增删改查功能. 开发环境 IDEA MySQL 5.7 Tomcat 9 Maven 3.2.5 需要 ...
- SSM(Spring+SpringMVC+Mybatis)框架环境搭建(整合步骤)(一)
1. 前言 最近在写毕设过程中,重新梳理了一遍SSM框架,特此记录一下. 附上源码:https://gitee.com/niceyoo/jeenotes-ssm 2. 概述 在写代码之前我们先了解一下 ...
- SSM(Spring +SpringMVC + Mybatis)框架搭建
SSM(Spring +SpringMVC + Mybatis)框架的搭建 最近通过学习别人博客发表的SSM搭建Demo,尝试去搭建一个简单的SSMDemo---实现的功能是对用户增删改查的操作 参考 ...
- SSM(Spring + Springmvc + Mybatis)框架面试题
JAVA SSM框架基础面试题https://blog.csdn.net/qq_39031310/article/details/83050192 SSM(Spring + Springmvc + M ...
- SSM:spring+springmvc+mybatis框架中的XML配置文件功能详细解释(转)
原文:https://blog.csdn.net/yijiemamin/article/details/51156189# 这几天一直在整合SSM框架,虽然网上有很多已经整合好的,但是对于里面的配置文 ...
- 0927-转载:SSM:spring+springmvc+mybatis框架中的XML配置文件功能详细解释
这篇文章暂时只对框架中所要用到的配置文件进行解释说明,而且是针对注解形式的,框架运转的具体流程过两天再进行总结. spring+springmvc+mybatis框架中用到了三个XML配置文件:web ...
- SSM:spring+springmvc+mybatis框架中的XML配置文件功能详细解释
这几天一直在整合SSM框架,虽然网上有很多已经整合好的,但是对于里面的配置文件并没有进行过多的说明,很多人知其然不知其所以然,经过几天的搜索和整理,今天总算对其中的XML配置文件有了一定的了解,所以拿 ...
- java web,从零开始,一步一步配置ssm(Spring+SpringMVC+MyBatis)框架
1.安装JDK: 安装之后要配置环境变量,在系统变量里: 新建变量名JAVA_HOME,变量值C:\Program Files\Java\jdk1.8.0_77: 新建变量名CLASSPATH,变量值 ...
随机推荐
- Oracle日期范围
一.SQL语句: select to_date(to_char(to_date('2017-10-01', 'yyyy-mm-dd') + rownum - 1, 'yyyy-mm-dd'), 'yy ...
- 11 Vue学习 headtop
1: HeaderTop.vue : 面包屑:el-breadcrumb 定义面包屑, separator是分隔符. el-breadcrumb-item: 是面包屑中用 分隔符 分开的多 ...
- 【win10激活问题】 从【win10专业工作站版】转为 数字许可证的【win10专业版】
今天安装了 win10 1903 (10.0.18362 暂缺 Build 18362) 安装时 选的 是[win10 专业工作站版] 却无法激活, (因为当初是从win7升级上win10的,只有关联 ...
- js避免命名冲突
[1]工程师甲编写功能A var a = 1; var b = 2; alert(a+b); [2]工程师乙添加新功能B var a = 2; var b = 1; alert(a-b); [3]上一 ...
- 原生JS中unshift与shift
shift() 方法:shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值:用法:arrayObject.shift()如果数组是空的,那么 shift() 方法将不进行任何操作 ...
- putty连接虚拟机注意事项
1,虚拟机ssh服务要开 2,虚拟机最好把防火墙关掉 3,虚拟机和主机的IP要在同一网段 4,大哥,putty上面那个才是要连接的远程主机IP啊!下面那个是会话名,写什么都行. 5,可以选择UTF8, ...
- GitHub上最火爆!码代码不得不知的所有定律法则
目录 介绍 定律 阿姆达尔定律 (Amdahl's Law) 布鲁克斯法则 (Brooks's Law) 康威定律 (Conway's Law) 侯世达定律 (Hofstadter's Law) 技术 ...
- 搭建 Keras
首先安装ipython ipython安装完成以后出现如下界面 然后安装theano 中途安装因为网络不好,造成超时而停止安装或者停滞不前,则按下Ctrl+C,停止此操作,或者关掉Anaconda P ...
- Keras AttributeError 'NoneType' object has no attribute '_inbound_nodes'
问题说明: 首先呢,报这个错误的代码是这行代码: model = Model(inputs=input, outputs=output) 报错: AttributeError 'NoneType' o ...
- css border实现三角形
实现过程: 正常的border <div class="box"></div> .box { background: #ddd; width: 100px; ...