今天我们来讲解一下SSM整合,感觉整合这个比上一篇整合更费时,原因在于自己不太熟悉MyBatis了,下午的时候恶补了一下,看了一下相关的文档和PDF电子书,知识真的是你不用就会忘记的,以后还是不能懈怠了,把自己不擅长的领域抓一下。

为什么?怎么做?去做?我们今天围绕着三个问题来展开话题的讨论与内容的解说。

1.0我们为什么需要整合呢?

解答:一个良好的框架可以让开发人员减轻重新建立解决复杂问题方案的负担和精力;它可以被扩展以进行内部的定制化;并且有强大的用户社区来支持它。框架通常能很好的解决一个问题。然而,你的应用是分层的,可能每一个层都需要各自的框架。

比如:

Web层,就是MVC模式里面的“C”(controller),负责控制业务逻辑层与表现层的交互,调用业务逻辑层,并将业务数据返回给表现层作组织表现。
       Service层(就是业务逻辑层),负责实现业务逻辑。业务逻辑层以DAO层为基础,通过对DAO组件的正面模式包装,完成系统所要求的业务逻辑。
       DAO层,负责与持久化对象交互。该层封装了数据的增、删、查、改的操作。
       PO,持久化对象。通过实体关系映射工具将关系型数据库的数据映射成对象,很方便地实现以面向对象方式操作数据库。
       Spring的作用贯穿了整个中间层,将Web层、Service层、DAO层及PO无缝整合,其数据服务层用来存放数据。

同时给你们恶补一下,MyBatis的背景:

      MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
      每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。
      用xml文件构建SqlSessionFactory实例是非常简单的事情。推荐在这个配置中使用类路径资源(classpath resource),但你可以使用任何Reader实例,包括用文件路径或file://开头的url创建的实例。MyBatis有一个实用类----Resources,它有很多方法,可以方便地从类路径及其它位置加载资源。
1.2怎么做?
接下来我就讲解一下我的心酸历程。。。
项目完成的功能:实现简单的登录和遍历所有的内容。
前期项目的准备工作,jar包的导入,项目架构的搭建,测试代码,正式部署项目。
整个项目部署在maven下的web项目,所以我们只需要导入节点即可。
这次添加的节点跟上一篇博客文章引用的节点类似,忘了或者第一次看这篇文章的童鞋可以去看一眼
http://www.cnblogs.com/wl0000-03/p/6669835.html
在这里我再粘贴一份:
    <dependencies>

        <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.3</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3..RELEASE</version>
</dependency> <!--spring web jar 包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3..RELEASE</version>
</dependency> <!--spring-tx jar 包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.3..RELEASE</version>
</dependency> <!--spring-ormjar 包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.3..RELEASE</version>
</dependency> <!--spring-jdbcjar 包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3..RELEASE</version>
</dependency> <!--spring mvc jar 包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3..RELEASE</version>
</dependency> <dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.</version>
</dependency> <dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.</version>
</dependency>
<!--commons-dncpjar 包-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.1.</version>
</dependency> <!--c3p0jar 包-->
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency> <!--struts2-spring-plugin jar 包-->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.5.</version>
</dependency> <!--struts2 core 包-->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5.</version>
</dependency> <!--使用注解action-->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-convention-plugin</artifactId>
<version>2.5.</version>
</dependency> <!--hibernate-core jar 包-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.0..Final</version>
</dependency> <!--jtajar 包-->
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
<version>1.1</version>
</dependency> <!--mysql数据库驱动-->
<dependency>
<groupId>org.wisdom-framework</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.34_1</version>
</dependency> <!--oraclejar 包-->
<!--<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.1.</version>
</dependency>--> <!--jstl jar包-->
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-spec</artifactId>
<version>1.2.</version>
</dependency> <dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-impl</artifactId>
<version>1.2.</version>
</dependency> <!--mybatis jar包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.</version>
</dependency> <dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.</version>
</dependency> <!--servlet api包-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency> </dependencies>
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>

项目的架构图:

大致上就是这样的一个层次体系,养好一个好的习惯,你会在以后的日子里轻松许多。

beans:

package cn.mybatis.beans;

import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table; /**
* Created by accp on 2017/4/6.
*/
@Table
public class Stock {
@Id
@GeneratedValue
private Integer sid;
@Column
private String sname;
@Column
private String count; public Stock() {
} public Stock(String sname, String count) {
this.sname = sname;
this.count = count;
} public Integer getSid() {
return sid;
} public void setSid(Integer sid) {
this.sid = sid;
} public String getSname() {
return sname;
} public void setSname(String sname) {
this.sname = sname;
} public String getCount() {
return count;
} public void setCount(String count) {
this.count = count;
}
}

在这里使用注解比较简单一些,不用再创建一个xml文件了,前提是你懂得怎么样使用注解,分情况使用。

实现类:StockDaoImpl

public class StockDaoImpl implements IStockDao {

    private SqlSessionFactory sqlSessionFactory;
@Transactional
public int login(Stock stock) {
return sqlSessionFactory.openSession().getMapper(IStockDao.class).login(stock);
} @Transactional
public List<Stock> selectAll() {
return sqlSessionFactory.openSession().getMapper(IStockDao.class).selectAll();
} public SqlSessionFactory getSqlSessionFactory() {
return sqlSessionFactory;
} public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
this.sqlSessionFactory = sqlSessionFactory;
}
}

dao层:IStockDao

public interface IStockDao {
/*登录*/
int login(Stock stock);
/*查询全部*/
List<Stock> selectAll();
}

biz层:

package cn.mybatis.biz;

import cn.mybatis.beans.Stock;

import java.util.List;

/**
* Created by accp on 2017/4/6.
*/
public interface IStockBiz { /*登录*/
int login(Stock stock); /*查询全部*/ List<Stock> selectAll();
}

biz层的实现类:

package cn.mybatis.biz.impl;

import cn.mybatis.beans.Stock;
import cn.mybatis.biz.IStockBiz;
import cn.mybatis.dao.IStockDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import java.util.List; /**
* Created by accp on 2017/4/6.
*/
public class StockBizImpl implements IStockBiz {
private IStockDao dao;
@Transactional
public int login(Stock stock) {
return dao.login(stock);
}
@Transactional
public List<Stock> selectAll() {
return dao.selectAll();
} public IStockDao getDao() {
return dao;
} public void setDao(IStockDao dao) {
this.dao = dao;
}
}

接下来就是action类:

package cn.mybatis.action;

import cn.mybatis.beans.Stock;
import cn.mybatis.biz.IStockBiz;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.ServletActionContext; import javax.servlet.http.HttpServletRequest;
import java.util.List; public class LoginAction extends ActionSupport {
//植入biz层的对象
private IStockBiz biz;
//植入一个List<Stock>集合保存返回的数据
private List<Stock> list;
@Override
public String execute() throws Exception {
HttpServletRequest request = ServletActionContext.getRequest();
String name = request.getParameter("name");
String count1 = request.getParameter("count");
Stock stock=new Stock(name,count1);
int count = biz.login(stock);
if(count>){
list = biz.selectAll();
return SUCCESS;
}
return INPUT;
} public List<Stock> getList() {
return list;
} public void setList(List<Stock> list) {
this.list = list;
} public IStockBiz getBiz() {
return biz;
} public void setBiz(IStockBiz biz) {
this.biz = biz;
} }

简简单单的几个步骤我们就把分层架构给搭建出来了,这也就进入了我们项目的上升期,开始编写xml文件了。

配置mybatis-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--别名-->
<typeAliases>
<typeAlias type="cn.mybatis.beans.Stock" alias="stock"></typeAlias>
</typeAliases>
<!--映射文件指定-->
<mappers>
<mapper resource="cn/mybatis/dao/IStockDao.xml"></mapper>
</mappers>
</configuration>

配置applicationContextmybatis.xml里面的内容

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
"> <!--配置包扫描器-->
<context:component-scan base-package="cn.mybatis"></context:component-scan> <!--配置数据源-->
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="${jdbc.driver}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean> <!--注入jdbc-->
<context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder> <!--配置sqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
</bean> <!--dao-->
<bean id="stockDao" class="cn.mybatis.dao.impl.StockDaoImpl">
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean> <!--biz-->
<bean id="service" class="cn.mybatis.biz.impl.StockBizImpl">
<property name="dao" ref="stockDao"></property>
</bean> <!--action-->
<bean id="loginAction" class="cn.mybatis.action.LoginAction">
<property name="biz" ref="service"></property>
</bean> <!--事务管理器-->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean> <!--注解驱动-->
<tx:annotation-driven transaction-manager="txManager"></tx:annotation-driven>
</beans>

配置IStockDao.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.mybatis.dao.IStockDao"> <select id="login" resultType="int">
select count(*) from stock where sname=#{sname} and count=#{count}
</select> <select id="selectAll" resultType="stock">
select * from stock
</select>
</mapper>

千万不要忘了配置web.xml文件呦。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <display-name>Archetype Created Web Application</display-name> <!--设置读取路径-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContextmybatis.xml</param-value>
</context-param> <!--配置监听器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> <!--配置filter-->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
</web-app>

struts.xml文件:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd"> <struts>
<constant name="struts.i18n.encoding" value="utf-8"></constant>
<constant name="struts.devMode" value="false"></constant>
<package name="default" extends="struts-default" namespace="/">
<action name="login" class="loginAction">
<result name="success">/success.jsp</result>
<result name="input">/login.jsp</result>
</action>
</package>
</struts>

写到这里,我们先测试一下,防止有什么差错。

测试登录是否成功:

 @Test
public void login(){
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContextmybatis.xml");
IStockBiz biz=(IStockBiz)ctx.getBean("service");
int count = biz.login(new Stock("北大", ""));
System.out.println(count);
}

这就说明你的登录通道没有问题,我们再来测试一下查询的

 @Test
public void select(){
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContextmybatis.xml");
IStockBiz biz=(IStockBiz)ctx.getBean("service");
List<Stock> list = biz.selectAll();
System.out.println(list.size());
}

我们来看一下数据库是否是两条记录:

数据库的数据也是两条,就说明我们得到的结果没错,现在我们的登录和查询全部都没有错误,接下来我们就可以把项目加到Tomcat里了,

看看我们使用页面登录和查询有没有什么错误。

login.jsp页面

<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录页面</title>
</head>
<body>
<form action="login" method="POST">
<input name="name"/>
<input name="count">
<input type="submit" value="登录">
</form>
</body>
</html>

success.jsp

<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>成功页面</title>
</head>
<body>
欢迎登录<br>
以下是查询的内容:
<c:forEach var="item" items="${list}">
${item.sname}
</c:forEach>
</body>
</html>

在这里经常忘了少配置xml文件而出现各种各样的问题,再加上不熟悉mybatis的书写,写这篇文章给我最大感触就是,一定要塌下心来学习,有许多细节上的问题需要我们注意,知识点的熟悉程度也要好,会解决问题。
其实写这个项目过程中一直报着一个空指针的错误,我看了好久,把代码从上到下都看了一遍,可能是觉得自己不会再小问题上犯错误就没看创建实体类中的代码检查的那么仔细,其实最后错误的引发点就是在我创建的一个构造上了,想省时间用快捷键生成的,反而给自己埋下了大坑,这个亏吃的不亏,我是这样觉得的,这样就会给自己提了个醒,小事要认真,我想我会一直记得。

不好意思,啰嗦了一下,接下来让我们把项目给启动起来吧,看看效果。

效果出来了就放心了,这就说明我们配置的没有问题。

-----------------初学者自己的记录

 
 

整合第二次(SSM第一次)------------>spring+struts2+mybatis的更多相关文章

  1. 简单易学的SSM(Spring+SpringMVC+MyBatis)整合

    SSM(Spring+SpringMVC+MyBatis)的整合: 具体执行过程:1.用户在页面向后台发送一个请求 2.请求由DispatcherServlet 前端控制器拦截交给SpringMVC管 ...

  2. Java基础-SSM之Spring和Mybatis以及Spring MVC整合案例

    Java基础-SSM之Spring和Mybatis以及Spring MVC整合案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 能看到这篇文章的小伙伴,详细你已经有一定的Java ...

  3. Java基础-SSM之Spring和Mybatis整合案例

    Java基础-SSM之Spring和Mybatis整合案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   在之前我分享过mybatis和Spring的配置案例,想必大家对它们的 ...

  4. SSM,即Spring+SpringMVC+MyBatis三个开源框架的整合框架集。

    SSM(Spring+SpringMVC+MyBatis)框架集由Spring.SpringMVC.MyBatis三个开源框架整合而成,常作为数据源较简单的web项目的框架. 其中spring是一个轻 ...

  5. 手动配置三大框架整合:Spring+Struts2+mybatis

    如今主流的项目框架中,数据库持久层有可能不是hibernate,而是mybatis或者ibatis,事实上它们都是一样的,以下我来把环境搭建一下: [导入相关jar包]新建web项目projectms ...

  6. 详解intellij idea搭建SSM框架(spring+maven+mybatis+mysql+junit)(上)

    SSM(Spring+SpringMVC+MyBatis)框架集由Spring.SpringMVC.MyBatis三个开源框架整合而成,常作为数据源较简单的web项目的框架. 其中spring是一个轻 ...

  7. 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(三)(错误整理篇)

    使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一) 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(二) 以上两篇已经把流 ...

  8. 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一)

    梳理下使用spring+springMVC+mybatis 整合后的一个简单实例:输入用户的 ID,之后显示用户的信息(此次由于篇幅问题,会分几次进行说明,此次是工程的创建,逆向生成文件以及这个简单查 ...

  9. Maven+SSM框架(Spring+SpringMVC+MyBatis) - Hello World(转发)

    [JSP]Maven+SSM框架(Spring+SpringMVC+MyBatis) - Hello World 来源:http://blog.csdn.net/zhshulin/article/de ...

  10. SSM(Spring+SpringMVC+MyBatis)高并发优化思路

    SSM(Spring+SpringMVC+MyBatis)框架集由Spring.MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容).常作为数据源较简单的web项目的框架 ...

随机推荐

  1. BZOJ ac100题存档

    不知不觉AC100题了,放眼望去好像都是水题.在这里就做一个存档吧(特别感谢各位大神尤其是云神http://hi.baidu.com/greencloud和丽洁姐http://wjmzbmr.com/ ...

  2. [Linux] PHP程序员玩转Linux系列-备份还原MySQL

    1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux系列-搭建FTP代码开发环境 前几天有个新闻,说是g ...

  3. 201521123014 java第一周总结

    201521123014 java第一周总结 1.本周学习总结 刚认识这一门新语言,我就充满了好奇心,想看看Java和学过C语言,C++有什么区别.在这一周的学习中,我认识到,对于初学者而言,Java ...

  4. .Net异步编程知多少

    1. 引言 最近在学习Abp框架,发现Abp框架的很多Api都提供了同步异步两种写法.异步编程说起来,大家可能都会说异步编程性能好.但好在哪里,引入了什么问题,以及如何使用,想必也未必能答的上来. 自 ...

  5. 了解 : angular $rootScope 在 ui-view

    在view 的element 可以直接调用 <p>{{$stateParams.xx}}</p> 要让xx有资料必须注入 app.run["$rootScope&qu ...

  6. 高精度模板 Luogu P1932 A+B & A-B & A*B & A/B Problem

    P1932 A+B & A-B & A*B & A/B Problem 题目背景 这个题目很新颖吧!!! 题目描述 求A.B的和差积商余! 输入输出格式 输入格式: 两个数两行 ...

  7. hadoop使用笔记

    一:hadoop程序添加三方包: 使用hadoop jar 运行时 抛出 java.lang.NoClassDefFoundError 原因:找不到三方包 解决方案: 1.可以将需要使用的包添加进 $ ...

  8. Selenium 显示等待和隐式等待

    1. 设置显示等待 Java代码: 1 2 3 4 5 public static WebElement WaitForElement(WebDriver driver, String locator ...

  9. Bootstrap学习-排版

    1.标题 <h1>~<h6>,所有标题的行高都是1.1(也就是font-size的1.1倍). 2.副标题 <small>,行高都是1,灰色(#999) <h ...

  10. KoaHub平台基于Node.js开发的Koa的skip插件代码详情

    koahub-skip koahub skip middleware koahub skip Conditionally skip a middleware when a condition is m ...