idea下用maven创建并搭建dubbox微服务环境项目(四)——整理spring+mybaties(注解)
目录
1. jar包依赖 smbms-user-provider模块
2. 编写dao及service实现类的修改(smbms-user-provider模块)
3. 配置spring(注入mybaties、dao、service)
第三篇链接地址:https://blog.csdn.net/gaofengyan/article/details/85238542
1. jar包依赖 smbms-user-provider模块
spring+mybaties+整合包+数据库驱动包
1)mybaties jar
[code] <!--mybaties 3.4 支持注解--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency>
2)整合包
[code] <!--mybaties spring 整合包--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.2</version> </dependency>
3)数据库驱动包
[code] <!--mysql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.41</version> </dependency>
4)dbcp数据库缓冲池
[code] <!--dbcp数据库缓冲池--> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.3</version> </dependency>
5)spring-jdbc和spring事务的包
[code] <!--spring jdbc--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>3.2.9.RELEASE</version> </dependency> <!--spring 事务--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>3.2.9.RELEASE</version> </dependency>
2. 编写dao及service实现类的修改(smbms-user-provider模块)
UserMapper.java接口,这里采用的时mybaties注解方式,即加如@Repository 注解就表示注入一个dao实现类,跟之前的SSM框架的dao接口加mapper.xml配置文件相同效果,只是减少了代码量的编写,但是这样一来有一个弊端,就是在维护方面不灵活,修改代码很不容易。接下来看一下我们这种模式:
[code]package cn.kgc1803.smbms_user_provider.dao; import cn.kgc1803.smbms_common.pojo.User; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Result; import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Repository; /** * @Mapper 表示该接口是一个注解mybaties接口 * @Repository 表示注入一个dao实现类 */ @Mapper @Repository public interface UserMapper { //登陆 @Select("SELECT id,userCode,userName\n" + "FROM smbms_user\t\n" + "WHERE userCode=#{userCode} and password=#{password}") @Results(id="userMap",value = { @Result(property = "id",column = "id",javaType =Integer.class ), @Result(property = "userName",column = "userName",javaType =String.class), @Result(property = "userCode",column = "userCode",javaType =String.class) }) User loginUser(User u); }
为了方便后面测试与数据库关联,这里将service更改如下:
UserServiceImpl.java类:
[code]package cn.kgc1803.smbms_user_provider.service; import cn.kgc1803.smbms_common.pojo.User; import cn.kgc1803.smbms_common.service.UserService; import cn.kgc1803.smbms_user_provider.dao.UserMapper; import org.springframework.stereotype.Service; import javax.annotation.Resource; @Service("userService") public class UserServiceImpl implements UserService { @Resource private UserMapper userMapper; public User loginUser(User u) { return userMapper.loginUser(u); // if (u.getUserCode().equals("zhangsan") && u.getPassword().equals("123")){ // u.setUserName("张三"); // return u; // }else { // return null; // } } }
OrderServiceImpl.java类,这里暂时把参数去掉,公共模块的对应方法接口参数也要去掉参数,这里不做代码展示了,因为smbms_order表没有数据,这里暂时给定值:
[code]package cn.kgc1803.smbms_user_provider.service; import cn.kgc1803.smbms_common.pojo.Order; import cn.kgc1803.smbms_common.service.OrderService; import com.alibaba.dubbo.rpc.protocol.rest.support.ContentType; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import java.util.ArrayList; import java.util.List; //@Produces设置输出结果集的 数据类型 @Path("/order") @Produces(ContentType.APPLICATION_JSON_UTF_8) public class OrderServiceImpl implements OrderService { //@Path访问路径 //@GET请求方式 @Path("/orderlist") @GET public List<Order> findList() {//@PathParam("userId") Integer userId List<Order> orders = new ArrayList<Order>(); Order o = new Order(); o.setId(10); o.setOwnerUserId(11); o.setAmount(33); o.setPrice(55.3); o.setProductName("华为p8"); orders.add(o); return orders; } }
3. 配置spring(注入mybaties、dao、service)
3.1) 配置数据库连接的配置文件,database.properties
[code]jdbc.driver=com.mysql.jdbc.Driver #在和mysql传递数据的过程中,使用unicode编码格式,并且字符集设置为utf-8 jdbc.url=jdbc:mysql://localhost:3306/dubbo-smbms?useUnicode=true&characterEncoding=utf-8 jdbc.user=root jdbc.password=******
3.2)新建一个spring 配置文件 spring-service.xml并作配置:
[code]<?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.xsd"> <!--引入配置文件--> <context:property-placeholder location="classpath:database.properties"/> <!--注入dataSource--> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.user}"/> <property name="password" value="${jdbc.password}"/> </bean> <!--注入sessionFactory--> <bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> </bean> <!--注入dao mapper--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="sqlSessionFactoryBeanName" value="sessionFactory"/> <property name="basePackage" value="cn.kgc1803.smbms_user_provider.dao"/> </bean> <!--注入service--> <context:component-scan base-package="cn.kgc1803.smbms_user_provider.service"/> </beans>
3.3)dubbo_user_provider.xml配置文件修改发布服务的延迟时间timeout="10000",避免再发布后运行数据库造成时间超过1秒断接:
[code] <!-- 发布服务 --> <dubbo:service protocol="dubbo" interface="cn.kgc1803.smbms_common.service.UserService" ref="userService" timeout="10000" /> <dubbo:service protocol="rest" interface="cn.kgc1803.smbms_common.service.OrderService" ref="orderService" timeout="10000"/>
4. 跨域访问修改
昨天的工程在测试的时候页面跑不出数据,出现的错误是跨域问题,为了兼容,可以通过中间层controller进行对接,如下修改:
order.js----->url:"http://localhost:8081/order/orderlist.html",
[code]$(function () { $.ajax({ url:"http://localhost:8081/order/orderlist.html", dataType:"json", data:"userId=10", success:function (orderList) { var ul=$('ul'); $.each(orderList,function (index,item) { ul.append('<li>'+item.productName+'</li>'); }); } }); });
smbms-user-consume模块的controller新建OrderController.java类:
[code]package cn.kgc1803.smbms_user_consume.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.net.URLConnection; @Controller @RequestMapping("/order") public class OrderController { @RequestMapping("/orderlist.html") public void getOrderListJson(HttpServletResponse response){ response.setCharacterEncoding("UTF-8");//字符编码处理 try { //请求输出流 OutputStream out = response.getOutputStream(); //获取远程的dubbo rest数据 //请求地址 URL url = new URL("http://localhost:20888/order/orderlist"); //建立连接 URLConnection conn = url.openConnection(); //输入流,获取请求结果集对应的输入流 InputStream in = conn.getInputStream(); //以数组方式读取数据 byte[] buf = new byte[1024]; int len = in.read(buf); while (len != -1){ //读完为止 //循环读取文件内容 out.write(buf,0,len); len = in.read(buf); } } catch (IOException e) { e.printStackTrace(); } } }
以上这种rest风格的承接,对多方面的使用都比较安全,我们的service服务放到了dubbo容器作为提供者往注册中心注入服务为消费者controller提供消费对接,外界访问service层的时候用Ajax通过controller层再转接到service层,这样的访问提高了安全效率。使用诸如:手机获取的天气预报(随时接收更新);做社保局的数据访问方面的业务等,都适合。
5. 其他修改
5.1)完善三个模块的日志补充,以便运行的时候查找问题,直接将之前的log4j.properties文件复制使用即可。
5.2)smbms-user-provider模块需要加载两个配置文件:dubbo_user_provider.xml 和 spring-service.xml 。因为我们用的是直接测试类TestProvider.java,因此夹在两个配置文件需要用数组的方式更好,修改如下:
[code]import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestProvider { public static void main(String[] args){ //以数组的方式加载配置文件 String[] xmls = {"dubbo_user_provider.xml","spring-service.xml"}; //加载spring配置文件 ApplicationContext ctx = new ClassPathXmlApplicationContext(xmls); try { //线程休眠10分钟,保证测试启动后,dubbo服务可使用的时间 Thread.sleep(60*60*1000); } catch (InterruptedException e) { e.printStackTrace(); } } }
6. 测试
数据库表:
连接服务后进行页面测试:
登陆页面:
登陆后的首页:
今天就到此了吧,明天继续,希望不会犯糊涂,这几天也是搞的不容易。很多地方没有写的很明白,后面再继续更新完善!
- idea下用maven创建并搭建dubbox微服务环境项目(五)—综合整理及总结
- idea下用spring boot(maven的升级版)搭建SSM微服务环境项目
- idea+spring boot+dubbox搭建微服务SSM框架环境项目(maven-图文并解)
- Springboot整合Dubbo - 项目创建和环境搭建
- MyBatis学习总结(八)——Mybatis3.x与Spring4.x整合 一、搭建开发环境 1.1、使用Maven创建Web项目 执行如下命令: mvn archetype:create
- MAC环境下idea:maven+Spring+Dubbo+Zookeeper简单工程搭建
- MAVEN环境搭建和IDEA创建MAVEN项目
- maven环境搭建及创建spring+springmvc+mybatis项目(eclipse)
- 手把手带你搭建 SpringMVC + Zookeeper +Dubbo(一)【Maven 创建 Web项目】
- springMVC+maven+mybatis+Intellij IDEA环境搭建
- 使用Idea创建ssm项目,SpringMVC+Spring+MyBatis+Maven整合
- Springboot整合dubbo构建maven多模块项目(一)- 项目创建和pom.xml中jar包配置
- 利用idea搭建 maven+SpringMVC开发环境
- (二)从零搭建maven+spring+mybatis项目之web项目创建
- idea + maven + spring mvc web 项目创建(图解)
- [置顶] idea创建maven,spring,springmvc,mybatis,项目(二)
- idea搭建maven项目(spring + spring MVC + hibernate),希望对于初学者有帮助。
- IDEA创建maven管理的springMVC+spring+Mybatis项目
- Idea Maven项目搭建spring 框架
- 快速使用maven之一:搭建环境创建项目