Spring4.1.6 + Mybatis3.2.8 (+ Dubbo可选) 框架搭建

毕业开始工作了,在学校时候学的C++,工作需要Java,无奈还要学各种框架前两天看了看书,从网上学习了一下,搭建了这个框架,用于自己学习。也可以用于Spring+mybatis的集成

搭建框架最烦人的地方就是无数的包依赖以及配置文件的编写,下面即是项目的具体框架以及依赖的包(PS:也许不是全部依赖,懒人可以直接把Spring\libs下的所有相关jar都加载进来),这些包基本都可以在Maven仓库中找到:http://search.maven.org/

一、创建数据库并插入数据

本框架是用的mysql数据库,如果使用其他数据库需更改的文件是spring.xml中的数据源配置,以及dbconfig.properties中的键值对,以及相应的connector.jar文件

create table t_user(
user_id varchar(32) primary key,
user_name varchar(30) not null,
user_birthday Date,
user_salary double
)

INSERT INTO t_user1 values('041bbae5f3f84c38938980c4b3f03a29','adiaixin','2015-4-25',15000)

二、创建项目目录,以及文件

1.com.wangyin.domain.User.java

此类为实体类,用于与数据映射的返回类型

package com.wangyin.domain;

import java.io.Serializable;
import java.util.Date;

public class User implements Serializable{

private static final long serialVersionUID = -2434681656774470695L;
private String userId;

    private String userName;

    private Date userBirthday;

    private Double userSalary;

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId == null ? null : userId.trim();
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName == null ? null : userName.trim();
    }

    public Date getUserBirthday() {
        return userBirthday;
    }

    public void setUserBirthday(Date date) {
        this.userBirthday = date;
    }

    public Double getUserSalary() {
        return userSalary;
    }

    public void setUserSalary(Double userSalary) {
        this.userSalary = userSalary;
    }
}

2.com.wangyin.dao.UserMapper.java

此类为mybatis映射接口,其方法名称与UserMapper.xml文件中的select,insert等bean的id相同,只要调用该接口的方法,mybatis就会自动查询数据库并返回结果

package com.wangyin.dao;

import java.util.List;

import com.wangyin.domain.User;

public interface UserMapper {

    int insert(User record);

    User selectByPrimaryKey(String userId);

	List<User> selectAllUsers();
}

3.com.wangyin.service.IUserService.java

此类是服务层的接口

package com.wangyin.service;

import java.util.List;

import com.wangyin.domain.User;

public interface IUserService {
	void addUser(User user);
	User getUserById(String userId);
	List<User> getAllUsers();
}

4.com.wangyin.service.UserServiceImpl.java

该类为服务实现类

package com.wangyin.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.wangyin.dao.UserMapper;
import com.wangyin.domain.User;
import com.wangyin.service.IUserService;

@Service("userService")
public class UserServiceImpl implements IUserService{

	@Autowired
	private UserMapper userMapper;

	public UserMapper getUserMapper() {
		return userMapper;
	}

	public void setUserMapper(UserMapper userMapper) {
		this.userMapper = userMapper;
	}

	public void addUser(User user) {
		// TODO Auto-generated method stub
		userMapper.insert(user);
	}

	@Transactional(propagation=Propagation.REQUIRED,readOnly=true)
	public User getUserById(String userId) {
		// TODO Auto-generated method stub
		return userMapper.selectByPrimaryKey(userId);
	}

	public List<User> getAllUsers() {
		// TODO Auto-generated method stub
		System.out.println("服务调用");
		return userMapper.selectAllUsers();
	}

}

5.com.wangyin.test.SpringMybatisTest.java

此类用于测试Spring与Mybatis的集成,通过集成junit中的TestCase类,来进行方法测试。

package com.wangyin.test;

import java.util.Date;
import java.util.List;
import java.util.UUID;

import junit.framework.TestCase;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.wangyin.domain.User;
import com.wangyin.service.IUserService;

public class SpringMybatisTest extends TestCase{
	private static  IUserService userService;
	private static ApplicationContext act;
	static{
		act = new ClassPathXmlApplicationContext(new String[]{"resources/spring.xml","resources/spring-mybatis.xml"});
		userService = (IUserService)act.getBean("userService");
	}

	public void testSelectAll(){
		List<User> users = userService.getAllUsers();
		for(User user : users){
			System.out.println(user.getUserId());
		}
	}

	public void testSelectById(){
		User user = userService.getUserById("48186cefca4e413c803645014ff644b0");
		System.out.println(user.getUserBirthday().toLocaleString());
	}
	public void testAdd(){
		User user = new User();
		user.setUserId(UUID.randomUUID().toString().replaceAll("-", ""));
		user.setUserBirthday(new Date());
		user.setUserName("wudi");
		user.setUserSalary(15000D);
		userService.addUser(user);

	}
}

6.com.wangyin.test.DubboProvider.java

Dubbo服务的提供者

package com.wangyin.test;

import java.io.IOException;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class DubboProvider {
	public static void main(String[] args) throws IOException{
		ClassPathXmlApplicationContext context =
				new ClassPathXmlApplicationContext(
						new String[]{"classpath:resources/dubbo-provider.xml",
								"classpath:resources/spring.xml",
								"classpath:resources/spring-mybatis.xml"});
		context.start();

		System.in.read();
		/*com.alibaba.dubbo.container.Main.main(args);*/
	}
}

7.com.wangyin.test.DubboConsumer.java

package com.wangyin.test;

import java.util.List;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.wangyin.domain.User;
import com.wangyin.service.IUserService;

public class DubboConsumer {
	public static void main(String args[]){
		 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:resources/dubbo-consumer.xml");
	        context.start();

	        IUserService demoService = (IUserService)context.getBean("userService"); // 获取远程服务代理
	        List<User> users = demoService.getAllUsers(); // 执行远程方法
	        for(User user : users){
	        	System.out.println(user.getUserId());
	        }
	}
}

8.resources/spring.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:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd">
	<!-- 加载dbconfig.properties文件,用于下边的数据库配置 -->
	<context:property-placeholder location="classpath:resources/dbconfig.properties"/>

	<!-- 将service及其子目录下标有@Component、@Service等注解的类自动装配 -->
	<context:component-scan base-package="com.wangyin.service"/>

	<!-- 数据源配置 -->
    <bean name="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
    	<property name="driverClassName" value="${driverClassName}"></property>
        <property name="url" value="${jdbc_url}" />
        <property name="username" value="${jdbc_username}" />
        <property name="password" value="${jdbc_password}" />
    </bean>
</beans>

9.resources/dbconfig.properties

driverClassName=com.mysql.jdbc.Driver
validationQuery=SELECT 1
jdbc_url=jdbc:mysql://localhost:3306/spring4_mybatis3
jdbc_username=root
[email protected]#456

10.resources/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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">

    <!-- ========================================针对myBatis的配置项============================== 转载的-->
    <!-- 配置sqlSessionFactory -->
    <!-- 实例化sqlSessionFactory时需要使用上述配置好的数据源以及SQL映射文件 -->
    <!-- 自动扫描com/wangyin/mapping/目录下的所有SQL映射的xml文件, 省掉Configuration.xml里的手工配置
        value="classpath:com/wangyin/mapping/*.xml"指的是classpath(类路径)下com.wangyin.mapping包中的所有xml文件
        UserMapper.xml位于com.wangyin.mapping包下,这样UserMapper.xml就可以被自动扫描
    -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="mapperLocations" value="classpath:com/wangyin/mappers/*.xml" />
    </bean>

    <!-- 配置扫描器 -->
    <bean id="daoScan" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
       <!-- 扫描com.wangyin.dao这个包以及它的子包下的所有映射接口类 -->
        <property name="basePackage" value="com.wangyin.dao" />
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
    </bean> 

</beans>

11resources/dubbo-provider.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:dubbo="http://code.alibabatech.com/schema/dubbo"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://code.alibabatech.com/schema/dubbo
    http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <!-- 提供方应用信息,用于计算依赖关系 -->
    <dubbo:application name="hello-world-app"  />

    <!-- 使用multicast广播注册中心暴露服务地址 -->
    <dubbo:registry address="multicast://224.5.6.7:1234" />

    <!-- 用dubbo协议在20880端口暴露服务 -->
    <dubbo:protocol name="dubbo" port="20880" />

    <!-- 声明需要暴露的服务接口 -->
    <dubbo:service interface="com.wangyin.service.IUserService" ref="userService" />

    <!-- 和本地bean一样实现服务 -->
    <bean id="userService" class="com.wangyin.service.impl.UserServiceImpl" />

</beans>

12.resources/dubbo-consumer.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:dubbo="http://code.alibabatech.com/schema/dubbo"
    xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd        http://code.alibabatech.com/schema/dubbo        http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
    <dubbo:application name="consumer-of-helloworld-app"  />

    <!-- 使用multicast广播注册中心暴露发现服务地址 -->
    <dubbo:registry address="multicast://224.5.6.7:1234" />

    <!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
    <dubbo:reference id="userService" interface="com.wangyin.service.IUserService" />

</beans>

13.com.wangyin.mappers.UserMapper.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.wangyin.dao.UserMapper" >
  <resultMap id="BaseResultMap" type="com.wangyin.domain.User" >
    <id column="user_id" property="userId" jdbcType="CHAR" />
    <result column="user_name" property="userName" jdbcType="VARCHAR" />
    <result column="user_birthday" property="userBirthday" jdbcType="DATE" />
    <result column="user_salary" property="userSalary" jdbcType="DOUBLE" />
  </resultMap>
  <sql id="Base_Column_List" >
    user_id, user_name, user_birthday, user_salary
  </sql>
  <select id="selectAllUsers" resultMap="BaseResultMap">
	select * from t_user
  </select>
  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" >
    select
    <include refid="Base_Column_List" />
    from t_user
    where user_id = #{userId,jdbcType=CHAR}
  </select>

  <insert id="insert" parameterType="com.wangyin.domain.User" >
    insert into t_user (user_id, user_name, user_birthday,
      user_salary)
    values (#{userId,jdbcType=CHAR}, #{userName,jdbcType=VARCHAR}, #{userBirthday,jdbcType=DATE},
      #{userSalary,jdbcType=DOUBLE})
  </insert>
</mapper>

三、运行方式

1.Spring  Mybatis 集成测试

分别右键点击SpringMybatisTest.java下的方法run as ->JUnit Test即可得到运行结果。

2.Dubbo服务的发布与调用

首先运行DubboProvider.java,然后运行DubboConsumer.java,即可得到调用结果

源代码及Jar包集合(赚点分嘿嘿):

http://download.csdn.net/detail/adiaixin123456/8631193

时间: 2025-01-12 20:53:30

Spring4.1.6 + Mybatis3.2.8 (+ Dubbo可选) 框架搭建的相关文章

Dubbo服务化框架使用整理

一.垂直应用架构拆分 在应用架构的演进过程中,垂直应用架构因为开发便捷,学习成本低,对于实现业务功能的增删改查提供了高效的开发支持,有利于前期业务高速发展的的快速实现.但是随着系统业务功能的不断扩展和系统代码的的不断攀 升业务模块与模块之间的高耦合度.核心业务的稳定性.根据市场的需求应用前端需要针对不同的业务场景实现不同的有针对性的修改这时候传统的垂直应用架构就满足不了需求,因而需要引入分布式服务框架(RPC框架) 来实现将系统进行水平和垂直拆分,拆分成各个相对独立的服务功能,实现服务的提供者和

[JAVA教程] 2016年最新spring4框架搭建视频教程 【尚学堂】

Spring4框架 主讲:邹波 类型:SSH 适合对象:学习完javase.数据库技术.jdbc者 Spring4.0作为一个广泛使用的开源框架,它由Rod Johnson创建.它是为了解决企业应用开发的复杂性而创建的. Spring4.0致力于J2EE应用的各层的解决方案,而不是仅仅专注于某一层的方案.可以说Spring是企业应用开发的“一站式”选择,并贯穿表现层.业务层及持久层. 本课程为尚学堂课堂实录,讲解了spring4.0中的基本技术,IOC控制反转.AOP面向切面编程.spring无

Spring4 mvc+maven 框架搭建(1)

这篇博客其实很早就应该写,早在半年前,因为对SpringMVC感兴趣,便自学了一下Spring.一段时间的学习后,对Spring有了一个基本的了解,于是想着自己动手搭建一个SpringMvc的框架出来.搭建的过程中遇到了很多的问题,其实在网上有许多的SpringMvc的框架搭建教程,但使用那些教程搭建起来的框架往往有或多或少的问题,如jar包下载不完全.log日志无法使用等,经历了一段时间的尝试后终于将框架搭建了起来. 在搭建起来后就想着自己写一篇博客记录一下,以便日后需要的时候方便查找. 在这

当当网开源Dubbox,扩展Dubbo服务框架支持REST风格远程调用

当当网近日开源了Dubbox项目,可为Dubbo服务框架提供多项扩展功能,包括REST风格远程调用.Kryo/FST序列化等等. 当当网架构部和技术委员会架构师沈理向InfoQ中文站介绍了Dubbox项目,开发背景和主要特点描述如下: Dubbo是一个被国内很多互联网公司广泛使用的开源分布式服务框架,即使从国际视野来看应该也是一个非常全面的SOA基础框架.作为一个重要的技术研究课题,在当当网我们根据自身的需求,为Dubbo实现了一些新的功能,并将其命名为Dubbox(即Dubbo eXtensi

Dubbo服务框架解析(一)

公司的一个项目的分布式系统的服务管理,使用了阿里的服务框架Dubbo,因此这里准备对服务框架进行了介绍. Dubbo服务框架可以使得java分布式系统之间进行解耦,使用一个服务注册中心来统一管理服务的信息,服务提供者提供注册中心进行注册,而服务消费者可以透明地订阅和消费服务.并支持服务的路由.过滤.负载均衡等,支持多种通讯协议及NIO框架,是一个灵活性和扩展性非常棒的服务管理框架. 本文以github中当前版本2.5.4的源码来分析. 为了支持更灵活的扩展性,当前dubbo拆分了非常多的proj

【Dubbo】Zookeeper+Dubbo项目demo搭建

一.Dubbo的注解配置 在Dubbo 2.6.3及以上版本提供支持. 1.@Service(全路径@org.apache.dubbo.config.annotation.Service) 配置服务提供方用以暴露服务,添加于api接口的实现类上,并可通过注解提供的属性进一步定制化服务. 其中比较重要的属性有: @Service只能定义在一个类上,用以提供一个服务的具体实现 interfaceClass:指定服务提供方实现的interface的类 interfaceName:指定服务提供方实现的i

Spring4.2+SpringMVC+Mybatis3.4的集成(转-)

文章转自 http://blog.csdn.net/jimolangge123/article/details/49210363 首先说明一下Web.xml中配置项的执行过程: <context-param> ? <listenser> ?<filter> ? <servlet>首先初始化Spring的bean工厂,通过加载beans.xml初始化,其次通过spring的listener来监听,再次当请求时拦截并编码为UTF-8,最后由DispatcherS

用dubbo+zookeeper+spring搭建一个简单的http接口程序

dubbo是一个分布式服务框架,是阿里巴巴开发的一个解决RPC远程调用优化的核心框架,包含负载均衡算法,能提高分布式系统的性能. zookeeper是hadoop的一个子项目,主要用来解决分布式系统的数据一致性.状态同步.服务集群管理.配置同步等一系列的问题.本文使用zookeeper作为dubbo的服务注册中心. 技术细节方面: dubbo:http://www.dubbo.io zookeeper:http://www.ibm.com/developerworks/cn/opensource

spring4+srpingmvc+mybatis基本框架(app框架搭建一)

前言: 随着spring 越来越强大,用spring4来搭建框架也是很快速,问题是你是对spring了解有多深入.如果你是新手,那么在搭建的过程中可以遇到各种各样奇葩的问题. SSM框架的搭建是作为我搭建APP开发框架的基础. 我将会分以下几点: 1) 配置文件如何配置 2) 如何java配置启动servlet 3) 一些搭建过程中的坑 ============================================================================= 配置