好,废话不多说,直接开篇。
这次的框架整合是根据自己转载的一篇博客经过自己加工缩编而成的,除了三大框架加一个日志输出外没有别的东西,是非常基础的一篇框架搭配示例,所以称为1.0版,之后可能会在这篇基础上增加其他非常实用的功能,来完善这个框架,争取能达到类似正式项目开发中所用到的那样。
这里就不介绍这三个框架各自的相关知识了,不熟悉的可以查找相关资料自行查阅,咱们这就开始。
实际上,因为后边经历了几次完善,以下代码或许会有些许变更,每次变更,源代码下载地址也会同时更新。如果大家发现下载的代码和下面贴的不一致,无需奇怪。功能都能实现,贴出来的只是最简单,最初的版本。
1、用myeclipse创建web工程,目录如下,引入jar包
2、建表,表结构如下
3、创建实体类Count.java
package com.panda.entity;
public class Count {
private int id;
private String user_name;
private String user_id;
private int user_count;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUser_name() {
return user_name;
}
public void setUser_name(String user_name) {
this.user_name = user_name;
}
public String getUser_id() {
return user_id;
}
public void setUser_id(String user_id) {
this.user_id = user_id;
}
public int getUser_count() {
return user_count;
}
public void setUser_count(int user_count) {
this.user_count = user_count;
}
public Count() {
super();
// TODO Auto-generated constructor stub
}
public Count(int id, String user_name, String user_id, int user_count) {
super();
this.id = id;
this.user_name = user_name;
this.user_id = user_id;
this.user_count = user_count;
}
public Count(String user_name, String user_id, int user_count) {
super();
this.user_name = user_name;
this.user_id = user_id;
this.user_count = user_count;
}
@Override
public String toString() {
return "Count [id=" + id + ", user_name=" + user_name + ", user_id="
+ user_id + ", count=" + user_count + "]";
}
}
4、接口
CountMapper.java
package com.panda.dao;
import com.panda.entity.Count;
public interface CountMapper {
void addInfo(Count count);
Count serchOne(int id);
}
5、mapper文件
CountMapper.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="com.panda.dao.CountMapper">
<insert id="addInfo" parameterType="Count" >
insert into count_money values((select nvl(max(id),0)+1 from count_money),#{user_id},#{user_name},#{user_count})
</insert>
<select id="serchOne" parameterType="int" resultType="Count">
select * from count_money where id = #{id}
</select>
</mapper>
6、service文件
CountService.java
package com.panda.service;
import com.panda.entity.Count;
public interface CountService {
public void addInfo(Count count);
public Count serchOne(int id);
}
7、service实现类
CountServiceImpl.java
package com.panda.service.impl;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.panda.dao.CountMapper;
import com.panda.entity.Count;
import com.panda.service.CountService;
@Service("countService")
public class CountServiceImpl implements CountService {
@Resource
private CountMapper countMapper;
@Override
public void addInfo(Count count) {
// TODO Auto-generated method stub
countMapper.addInfo(count);
}
@Override
public Count serchOne(int id) {
// TODO Auto-generated method stub
return this.countMapper.serchOne(id);
}
}
8、测试类文件
Tes.java
package com.panda.test;
import javax.annotation.Resource;
import org.apache.log4j.Logger;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.panda.entity.Count;
import com.panda.service.CountService;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:spring-mybatis.xml"})
public class Tes {
// private ApplicationContext ac=null;
// @Before
// public void setUp() throws Exception {
// ac=new ClassPathXmlApplicationContext("spring-mybatis.xml");
// }
@Resource
private CountService countService=null;
private static Logger logger = Logger.getLogger(Tes.class);
int i = 1;
@Test
public void test1() {
// CountServiceImpl countService = (CountServiceImpl)ac.getBean("countService");
Count coun=countService.serchOne(i);
logger.info(coun);
System.out.println(coun);
}
}
9、配置文件
spring-mybatis.xml
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.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/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<!-- 自动扫描 -->
<context:component-scan base-package="com.panda"></context:component-scan>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" >
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@192.168.0.111:1521:orcl" />
<property name="username" value="c##reexam" />
<property name="password" value="reexam" />
</bean>
<!-- 配置Session工厂 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<!-- 加载mybatis.cfg.xml文件 -->
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
<!-- 自动扫描mappers.xml文件 -->
<property name="mapperLocations" value="classpath:com/panda/mapper/*.xml"></property>
</bean>
<!-- 自动扫描所有的Mapper接口与文件 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.panda.dao"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
</beans>
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>
<package name="com.panda.entity"/>
</typeAliases>
</configuration>
log4j.properties
#\u5B9A\u4E49LOG\u8F93\u51FA\u7EA7\u522B
log4j.rootLogger=INFO,Console,File
#\u5B9A\u4E49\u65E5\u5FD7\u8F93\u51FA\u76EE\u7684\u5730\u4E3A\u63A7\u5236\u53F0
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
#\u53EF\u4EE5\u7075\u6D3B\u5730\u6307\u5B9A\u65E5\u5FD7\u8F93\u51FA\u683C\u5F0F\uFF0C\u4E0B\u9762\u4E00\u884C\u662F\u6307\u5B9A\u5177\u4F53\u7684\u683C\u5F0F
log4j.appender.Console.layout = org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n
#\u6587\u4EF6\u5927\u5C0F\u5230\u8FBE\u6307\u5B9A\u5C3A\u5BF8\u7684\u65F6\u5019\u4EA7\u751F\u4E00\u4E2A\u65B0\u7684\u6587\u4EF6
log4j.appender.File = org.apache.log4j.RollingFileAppender
#\u6307\u5B9A\u8F93\u51FA\u76EE\u5F55
log4j.appender.File.File = logs/ssm.log
#\u5B9A\u4E49\u6587\u4EF6\u6700\u5927\u5927\u5C0F
log4j.appender.File.MaxFileSize = 10MB
# \u8F93\u51FA\u6240\u4EE5\u65E5\u5FD7\uFF0C\u5982\u679C\u6362\u6210DEBUG\u8868\u793A\u8F93\u51FADEBUG\u4EE5\u4E0A\u7EA7\u522B\u65E5\u5FD7
log4j.appender.File.Threshold = ALL
log4j.appender.File.layout = org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
OK,spring 和 mybatis框架搭建完成可以进行测试了
测试结果如下这表示没问题
接下来完成和Springmvc的整合
10、编写一个配置文件springmvc.xml
<?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:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<context:component-scan base-package="com.panda.controller"></context:component-scan>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="WEB-INF/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
11、配置
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5"
id="SSM">
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.gontuseries.university</param-value>
</init-param>
</servlet>
<!-- 引入spring-mybatis配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mybatis.xml</param-value>
</context-param>
<!-- 编码过滤 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- spring监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 防止Spring内存溢出监听器 -->
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
</web-app>
12、最后一步,写一个Controller类PandaController.java
package com.panda.controller;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.panda.entity.Count;
import com.panda.service.CountService;
@Controller
@RequestMapping
public class PandaController {
@Resource
private CountService service;
@RequestMapping("/show.hello")
public String show(Model model){
Count count = service.serchOne(1);
model.addAttribute("count", count);
return "hello";
}
}
好了,三大框架已经整合完毕,进行最后的整体测试
首先在index.jsp中写个登录FORM表单,再写一个返回界面success.jsp
登陆测试,实现跳转,显示数据
好,成功。
下面附上源码下载地址:点击打开下载链接