最简单的SpringMvc+Spring+Mybatis+Mysql+Dubbo案例

1.新建一个maven的web项目,项目结构和pom文件如下:

最简单的SpringMvc+Spring+Mybatis+Mysql+Dubbo案例_第1张图片


	4.0.0
	com.ly.mock
	MockServer
	0.0.1-SNAPSHOT
	war

	
		UTF-8
		1.0.0-SNAPSHOT
		4.2.3.RELEASE
	

	
		
			junit
			junit
			3.8.1
			test
		

		
			commons-logging
			commons-logging
			1.1.1
		
		
		
			com.alibaba
			dubbo
			2.5.3
			
				
					spring
					org.springframework
				
				
					commons-logging
					commons-logging
				
				
					log4j
					log4j
				
			
		

		
			log4j
			log4j
			1.2.15
			
				
					com.sun.jdmk
					jmxtools
				
				
					com.sun.jmx
					jmxri
				
				
					jms
					javax.jms
				
				
					mail
					javax.mail
				
			
		
		
		
			com.alibaba
			druid
			1.0.15
		
        
         
        
            mysql
            mysql-connector-java
            5.1.38
        

		
			org.springframework
			spring-core
			${spring.version}
		

		
			org.springframework
			spring-web
			${spring.version}
		

		
			org.springframework
			spring-context
			${spring.version}
		  
		
		
			org.springframework
			spring-jdbc
			${spring.version}
		
		
		
			org.springframework
			spring-beans
			${spring.version}
		

		
			org.springframework
			spring-webmvc
			${spring.version}
		
		
			org.springframework
			spring-aop
			${spring.version}
		

		
		
			org.mybatis
			mybatis-spring
			1.3.0
		

		
		
			org.mybatis
			mybatis
			3.4.1
		

		
			org.apache.zookeeper
			zookeeper
			3.4.5
			pom
		

		
			com.101tec
			zkclient
			0.4
		
		
		
			org.aspectj
			aspectjrt
			1.7.2
		
		
			org.aspectj
			aspectjweaver
			1.6.11
		
		
			com.alibaba
			fastjson
			1.1.37
		

	
	
		mock_server

		
			
				org.apache.maven.plugins
				maven-war-plugin
				2.3
				
					false
				
			
		
	



pom文件引入了SpringMvc+Spring+Mybatis+Dubbo+zookeeeper 这些框架的必要jar,值得注意的是之前一直没忽略dubbo中的spring的一些jar,导致SpringAop一直报错only available on JDK 1.5 and higher,原因是dubbo中的内置spring为2.5,而我本身用的jdk为1.8,所以屏蔽掉dubbo中的spring一些jar就可以了。

2.web.xml配置,因为是最简单springmvc,所以web.xml只是用来加载下上下文,web.xml配置文件路径:src\main\webapp\WEB-INF:



	TestMock

	
		org.springframework.web.context.ContextLoaderListener
	 

    
        contextConfigLocation
        classpath*:applicationContext.xml,classpath*:dubbo-provider.xml
    

3.mybatis配置文件和代码可以用MyBatis Generator自动生成即可,mybatis的相关代码和配置如下:

    3.1 数据库为mysql,表名books,表结构如下:

最简单的SpringMvc+Spring+Mybatis+Mysql+Dubbo案例_第2张图片    

    3.2 mapping文件BookMapper.xml路径为resources下的com\ly\mapping,如下:





    
    
    
    
    
    
    
        insert into books(title,price,publistDate)
        values(#{title},#{price},#{publistDate})
    
    
    
        delete from books where id=#{id}
    
    
    
        update books set title=#{title},price=#{price},publistDate=#{publistDate}
        where id=#{id}
    

3.3 DAO代码 BookDAO.java如下:

package com.ly.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.ly.model.Book;


public interface BookDAO {
	
	/**
	 * 获取所有图书
	 * @return
	 */
	public List getAllBooks();
	
	/**
	 * 根据id获取图书
	 * @param id
	 * @return
	 */
	public Book getBookById(@Param("id")int id);
	
	/**
	 * 添加图书
	 * @param entity
	 * @return
	 */
	public int add(Book entity);
	
	/**
	 * 根据id删除图书
	 * @param id
	 * @return
	 */
	public int delete(int id);
	
	/**
	 * 更新图书
	 * @param entity
	 * @return
	 */
	public int update(Book entity);
}

    3.4 model代码 Book.java如下:

package com.ly.model;

import java.util.Date;

public class Book {
	
	private int id;
	
	private String title;
	
	private double price;
	
	private Date publistDate;
	
	public Book(){}
	
	public Book(int id, String title, double price, Date publistDate) {
		this.id = id;
		this.title = title;
		this.price = price;
		this.publistDate = publistDate;
	}
	
	
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public double getPrice() {
		return price;
	}

	public void setPrice(double price) {
		this.price = price;
	}

	public Date getPublistDate() {
		return publistDate;
	}

	public void setPublistDate(Date publistDate) {
		this.publistDate = publistDate;
	}

}

 3.5 BookServer.java代码如下:

package com.ly.server;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.ly.dao.BookDAO;
import com.ly.model.Book;

@Service
public class BookServer {
	@Autowired
	private BookDAO bookDAO;
	
	public List getAllBooks() {
		return bookDAO.getAllBooks();
	}
	
	public Book getBookById(int id) {
		return bookDAO.getBookById(id);
	}
}


4. spring配置文件applicationContext.xml 位于 resources下,如下:




    
    

	
	
		
		
		
		
		
		
		
		
	
	    
    
    
        
        
        
        
    
    
    
    
        
        
        
        
    
    
    
    
    
        
    
    
    

    
    
    
    
    

其中stock.properties中的数据源配置为你自己的mysql数据库,我的如下:

mock.jdbc.url = jdbc:mysql://127.0.0.1:5508/mock?useUnicode=true&characterEncoding=UTF-8

mock.jdbc.driver = com.mysql.jdbc.Driver

mock.jdbc.username = mock

mock.jdbc.password = mock

mock.jdbc.initialSize = 1

mock.jdbc.minIdle = 2

mock.jdbc.maxWait = 5000

mock.jdbc.maxActive = 5


具体的applicationContext.xml含义基本有注释


5. dubbo的配置和代码

    5.1 dubbo配置文件 dubbo-provider.xml 也位于 resources下,zookeeper自己本地安装一个,如下:


  
  
  
      
      
  
      
      
  
      
      
  
  
      
      
  
  

  5.2 dubbo接口代码 SayHelloServer.java如下:    

package com.ly.server;

public interface SayHelloServer {
	public String sayHello(String hello);
}

 5.2 接口实现代码SayHelloServerImpl.java 如下:

package com.ly.server.impl;

import com.ly.server.SayHelloServer;

public class SayHelloServerImpl implements SayHelloServer {

	public String sayHello(String hello) {
		System.out.println("Client: "+ hello);
		return hello + "   Server: ";
	}
}

现在基本上SpringMvc+Spring+Mybatis+Mysql+Dubbo就已经整合完成了,本地下载一个tomcat,把项目打包发布到tomcat下启动,就能在dubbo的monitor中发现该项目的SayHelloServer接口已经注册在zk上面了。

最简单的SpringMvc+Spring+Mybatis+Mysql+Dubbo案例_第3张图片

附上我的自动发布shell脚本,一个很简单的shell脚本:

#!/bin/sh

#判断进程存在
tomcatId=0
tomcatID=`ps -ef | grep org.apache.catalina.startup.Bootstrap | grep -v grep | awk '{print $2}'`
echo "MockServer tomcat is " $tomcatID

if [ -n "$tomcatID" ];then
	echo 'current tomcat pid is:'$tomcatID
	kill -15 $tomcatID && echo  "MockServer kill -15"
	kill -9 $tomcatID && echo "MockServer kill -9"
else
	echo $sysName " not start"
fi
sleep 2

#编译
cd /Users/ly/Documents/workspace/MockServer
mvn clean install -Dmaven.test.skip=true -U
sleep 5

#部署本地
cd target
rm -rf /Users/ly/tomcat/apache-tomcat-9.0.4/webapps/ROOT/*
unzip -q mock_server.war -d /Users/ly/tomcat/apache-tomcat-9.0.4/webapps/ROOT/

nohup sh /Users/ly/tomcat/apache-tomcat-9.0.4/bin/startup.sh & sleep 3
echo "MockServer is starting......"





你可能感兴趣的:(java)