以前用着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配置完整版的更多相关文章

  1. SSM(Spring,SpringMVC,Mybatis)框架整合项目

    快速上手SSM(Spring,SpringMVC,Mybatis)框架整合项目 环境要求: IDEA MySQL 8.0.25 Tomcat 9 Maven 3.6 数据库环境: 创建一个存放书籍数据 ...

  2. SSM(Spring+SpringMVC+MyBatis)框架整合开发流程

    回忆了 Spring.SpringMVC.MyBatis 框架整合,完善一个小demo,包括基本的增删改查功能. 开发环境 IDEA MySQL 5.7 Tomcat 9 Maven 3.2.5 需要 ...

  3. SSM(Spring+SpringMVC+Mybatis)框架环境搭建(整合步骤)(一)

    1. 前言 最近在写毕设过程中,重新梳理了一遍SSM框架,特此记录一下. 附上源码:https://gitee.com/niceyoo/jeenotes-ssm 2. 概述 在写代码之前我们先了解一下 ...

  4. SSM(Spring +SpringMVC + Mybatis)框架搭建

    SSM(Spring +SpringMVC + Mybatis)框架的搭建 最近通过学习别人博客发表的SSM搭建Demo,尝试去搭建一个简单的SSMDemo---实现的功能是对用户增删改查的操作 参考 ...

  5. SSM(Spring + Springmvc + Mybatis)框架面试题

    JAVA SSM框架基础面试题https://blog.csdn.net/qq_39031310/article/details/83050192 SSM(Spring + Springmvc + M ...

  6. SSM:spring+springmvc+mybatis框架中的XML配置文件功能详细解释(转)

    原文:https://blog.csdn.net/yijiemamin/article/details/51156189# 这几天一直在整合SSM框架,虽然网上有很多已经整合好的,但是对于里面的配置文 ...

  7. 0927-转载:SSM:spring+springmvc+mybatis框架中的XML配置文件功能详细解释

    这篇文章暂时只对框架中所要用到的配置文件进行解释说明,而且是针对注解形式的,框架运转的具体流程过两天再进行总结. spring+springmvc+mybatis框架中用到了三个XML配置文件:web ...

  8. SSM:spring+springmvc+mybatis框架中的XML配置文件功能详细解释

    这几天一直在整合SSM框架,虽然网上有很多已经整合好的,但是对于里面的配置文件并没有进行过多的说明,很多人知其然不知其所以然,经过几天的搜索和整理,今天总算对其中的XML配置文件有了一定的了解,所以拿 ...

  9. java web,从零开始,一步一步配置ssm(Spring+SpringMVC+MyBatis)框架

    1.安装JDK: 安装之后要配置环境变量,在系统变量里: 新建变量名JAVA_HOME,变量值C:\Program Files\Java\jdk1.8.0_77: 新建变量名CLASSPATH,变量值 ...

随机推荐

  1. Oracle日期范围

    一.SQL语句: select to_date(to_char(to_date('2017-10-01', 'yyyy-mm-dd') + rownum - 1, 'yyyy-mm-dd'), 'yy ...

  2. 11 Vue学习 headtop

    1: HeaderTop.vue : 面包屑:el-breadcrumb 定义面包屑, separator是分隔符.       el-breadcrumb-item: 是面包屑中用 分隔符 分开的多 ...

  3. 【win10激活问题】 从【win10专业工作站版】转为 数字许可证的【win10专业版】

    今天安装了 win10 1903 (10.0.18362 暂缺 Build 18362) 安装时 选的 是[win10 专业工作站版] 却无法激活, (因为当初是从win7升级上win10的,只有关联 ...

  4. js避免命名冲突

    [1]工程师甲编写功能A var a = 1; var b = 2; alert(a+b); [2]工程师乙添加新功能B var a = 2; var b = 1; alert(a-b); [3]上一 ...

  5. 原生JS中unshift与shift

    shift() 方法:shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值:用法:arrayObject.shift()如果数组是空的,那么 shift() 方法将不进行任何操作 ...

  6. putty连接虚拟机注意事项

    1,虚拟机ssh服务要开 2,虚拟机最好把防火墙关掉 3,虚拟机和主机的IP要在同一网段 4,大哥,putty上面那个才是要连接的远程主机IP啊!下面那个是会话名,写什么都行. 5,可以选择UTF8, ...

  7. GitHub上最火爆!码代码不得不知的所有定律法则

    目录 介绍 定律 阿姆达尔定律 (Amdahl's Law) 布鲁克斯法则 (Brooks's Law) 康威定律 (Conway's Law) 侯世达定律 (Hofstadter's Law) 技术 ...

  8. 搭建 Keras

    首先安装ipython ipython安装完成以后出现如下界面 然后安装theano 中途安装因为网络不好,造成超时而停止安装或者停滞不前,则按下Ctrl+C,停止此操作,或者关掉Anaconda P ...

  9. Keras AttributeError 'NoneType' object has no attribute '_inbound_nodes'

    问题说明: 首先呢,报这个错误的代码是这行代码: model = Model(inputs=input, outputs=output) 报错: AttributeError 'NoneType' o ...

  10. css border实现三角形

    实现过程: 正常的border <div class="box"></div> .box { background: #ddd; width: 100px; ...