【Spring in action】Spring、SpringMVC、Mybatis,Mysql使用详解

【Spring in action】Spring、SpringMVC、Mybatis,Mysql使用详解。github源码地址

一、前言:

本来打算先把SSH结合Mysql数据库的文章写一下。但是公司的项目写业务都是通过SSM。所以那就趁此机会学习一下SSM结合使用吧。本文并没有使用maven,而是直接导入jar包,下篇文章再写Maven。

二、准备工作(jar包,可以去我的github下载):

mysql-connector-java-5.1.18-bin.jarspring-aop-4.3.0.RELEASE.jar
aopalliance-1.0.jar spring-aspects-4.3.0.RELEASE.jar
aspectjweaver-1.8.9.jar spring-beans-4.3.0.RELEASE.jar
c3p0-0.9.5.2.jar spring-context-4.3.0.RELEASE.jar
commons-dbutils-1.6.jar spring-core-4.3.0.RELEASE.jar
commons-logging-1.1.1.jar spring-expression-4.3.0.RELEASE.jar
commons-pool2-2.4.2.jar spring-jdbc-4.3.0.RELEASE.jar
fastjson-1.1.38.jar spring-tx-4.3.0.RELEASE.jar
mchange-commons-java-0.2.11.jar spring-web-4.3.0.RELEASE.jar
mybatis-3.3.0.jar spring-webmvc-4.3.0.RELEASE.jar
mybatis-spring-1.1.1.jar

三、搭建一个SSM项目:

1.新建一个web项目:

1)此处为新手准备,所以写的比较详细。可略过。


2)记得勾选此处,如果这个时候忘了,那么也可以通过项目右键见下面的第二张图(除非使用注解模式代替web.xml创建项目,至少目前完全通过注解模式比较少见):


2、结合SpringMVC:

1)在web.xml中配置DispatchSevlet。配置位置在src下的conf文件夹下,比较优雅。

<!-- 创建分发Servlet -->
	<servlet>
		<servlet-name>springmvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:conf/springmvc-servlet.xml</param-value>
		</init-param>
	</servlet>
	<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

2)结合SpringMVC:在位置在src下的conf文件夹下新建SpringMVC配置文件。


springmvc-servlet.xml这个文件名命名并不是随便乱命名的,是通过1)中的servlet-name(springmvc)配置的。当然如果不使用默认位置,而是像我一般指定在src下的conf文件夹下倒是无所谓了。springmvc-servlet.xml代码如下:(其中关注最后一行配置:扫描器的地址com.controller)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
	<!-- 配置handlerMapping -->
	<bean class="org.springframework.web.servlet.mvc.support.ControllerBeanNameHandlerMapping"></bean>
	<!-- 配置视图解析器 -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<!-- 前缀 :说明如果直接放在web-inf下,不需要加前缀-->
		<property name="prefix" value="WEB-INF/views/"></property>
		<!-- 后缀 : -->
		<property name="suffix" value=".jsp"></property>
	</bean>
	
	
	<!-- 加入注解驱动 -->
	<mvc:annotation-driven></mvc:annotation-driven>
	<!-- 扫描器 -->
	<context:component-scan base-package="com.controller"></context:component-scan>
</beans>
3)测试SpringMVC。

新建一个Model对象User:

package com.model;

import java.io.Serializable;

public class User implements Serializable{
	private String name;
	private String addr;
	
	public User() {
		super();
	}
	public User(String name, String addr) {
		super();
		this.name = name;
		this.addr = addr;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddr() {
		return addr;
	}
	public void setAddr(String addr) {
		this.addr = addr;
	}

}
写一个Controller:(此处我是直接通过Controller返回了一个String给app提供一个json,正和我之前一直做android相互配合)

package com.controller;


import java.io.IOException;

import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.alibaba.fastjson.JSONObject;
import com.model.User;

@Controller
public class HelloController {
	//返回到index.jsp	
	@RequestMapping(value="/hello.do")
	public void hello(HttpServletResponse response) throws IOException{
		response.getWriter().write(JSONObject.toJSONString(new User("hbfaith","changsha")).toString());;
	}
}
测试run as /run on server。


3、结合Spring:

1)在web.xml中新增配置:(位置指向src下的conf文件夹下新建Spring配置文件)

<!-- 配置Spring1:配置spring-servlet.xml路劲 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:conf/spring.xml</param-value>
	</context-param>
	<!-- 配置Spring2:配置Spring监听2 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
2)结合Spring:在位置在src下的conf文件夹下新建Spring配置文件。

3)spring.xml代码如下:当前配置为,自动扫描文件夹com下所有

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
	<context:component-scan base-package="com"></context:component-scan>
</beans>

3)测试spring结合。

在com.model中添加接口Addr:

package com.model;

public interface Addr {
	String show();
}
在com.model中添加接口实现AddrImpl:

package com.model;

import org.springframework.stereotype.Component;

@Component
public class AddrImpl implements Addr {
	@Override
	public String show() {
		return new User("hbfaith","changsha").getAddr().toString();
	}
}
在HelloConroller中添加mapping地址等:
package com.controller;


import java.io.IOException;

import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.alibaba.fastjson.JSONObject;
import com.model.Addr;
import com.model.User;

@Controller
public class HelloController {
	@Autowired
	private Addr addr;
	//返回到index.jsp	
	@RequestMapping(value="/hello.do")
	public void hello(HttpServletResponse response) throws IOException{
		response.getWriter().write(JSONObject.toJSONString(new User("hbfaith","changsha")).toString());;
	}
	
	@RequestMapping(value="/spring.do")
	public void addrShow(HttpServletResponse response) throws IOException{
		response.getWriter().write(JSONObject.toJSONString(addr.show()).toString());;
	}
}
测试结果:


4、结合Mybatis:

1)在spring.xml中配置数据库:

首先配置数据库,学习Mybatis就是学习如何使用Mybatis更简单的调用数据库。

<!-- 引入配置文件 -->  
    <bean id="propertyConfigurer"  
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
        <property name="location" value="classpath:conf/jdbc.property" />  
    </bean>  
    <bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp2.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>  

此处我本地的配置文件是jdbc.property位置依然在位置在src下的conf文件夹下。

driver=org.gjt.mm.mysql.Driver
url=jdbc:mysql://localhost:3306/mybatis
username=root
password=haibo1118
initialSize=5

2)结合Mybatis的使用,Mybatis的使用涉及到几个模块:mapping分发,model模型对象,dao链接数据库层。在com文件夹下新建三个包dao,model,mapping;在spring.xml中配置这几个文件夹。

<!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->  
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
        <property name="dataSource" ref="dataSource" />  
        <!-- 自动扫描mapping.xml文件 -->  
        <property name="mapperLocations" value="classpath:com/mapping/*.xml"></property>  
    </bean>  
    
    <!-- DAO接口所在包名,Spring会自动查找其下的类 -->  
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
        <property name="basePackage" value="com.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> 

3)快速生成Mybatis的各种类等。通过eclipse插件可实现。

先新建一个配置文件generatorConfig.xml


<?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>
  <!-- 数据库驱动-->    
    <!-- <classPathEntry  location="mysql-connector-java-5.1.18-bin.jar"/>     -->
    <context id="DB2Tables"  targetRuntime="MyBatis3">    
        <commentGenerator>    
            <property name="suppressDate" value="true"/>    
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->    
            <property name="suppressAllComments" value="true"/>    
        </commentGenerator>    
        <!--数据库链接URL,用户名、密码 -->    
        <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/mybatis" userId="root" password="haibo1118">    
        </jdbcConnection>    
        <javaTypeResolver>    
            <property name="forceBigDecimals" value="false"/>    
        </javaTypeResolver>    
        <!-- 生成模型的包名和位置-->    
        <javaModelGenerator targetPackage="com.model" targetProject="ssmdemo/src">    
            <property name="enableSubPackages" value="true"/>    
            <property name="trimStrings" value="true"/>    
        </javaModelGenerator>    
        <!-- 生成映射文件的包名和位置-->    
        <sqlMapGenerator targetPackage="com.mapping" targetProject="ssmdemo/src">    
            <property name="enableSubPackages" value="true"/>    
        </sqlMapGenerator>    
        <!-- 生成DAO的包名和位置-->    
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.dao" targetProject="ssmdemo/src">    
            <property name="enableSubPackages" value="true"/>    
        </javaClientGenerator>    
        <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->    
        <table tableName="user_t" domainObjectName="UserT" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>  
    </context>    
</generatorConfiguration>

4)右键配置文件,可快速生成以下几个文件。



5)在com下新建一个service文件夹:用来写业务逻辑。提供给controller数据。

package com.service;

import com.model.UserT;

public interface IUserService {
	UserT getUserById(int userId); 
}
写一个实现impl:

package com.service;


import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.dao.UserTMapper;
import com.model.UserT;
@Service("userService")
public class UserServiceImpl implements IUserService{
	@Resource
	private UserTMapper userDao;
	
	@Override
	public UserT getUserById(int userId) {
		// TODO Auto-generated method stub
		return this.userDao.selectByPrimaryKey(userId);
	}
}
5)测试使用:controller中添加访问测试Mybatis是否成功访问。

package com.controller;

import java.io.IOException;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;

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.model.Addr;
import com.model.UserT;
import com.service.IUserService;

@Controller
public class HelloController {
	@Autowired
	private Addr addr;
	
	@Resource  
    private IUserService userService = null; 
	
	@RequestMapping(value="/a.do")
	public void addrShow(HttpServletResponse response) throws IOException{
		response.getWriter().write(addr.show());;
	}
	
	@RequestMapping(value="/getuserbyid.do")
//	@ResponseBody
	public String getUserById(Model model) {
		int userId = 1;  
        UserT user = this.userService.getUserById(userId);  
        model.addAttribute("user", user.toString()); 
//        return JSONObject.toJSONString(user);
        return "index";  
	}
	
}
最后奉上最炫酷的index展示效果:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>${user}</h1>
</body>
</html>
展示如下:




































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值