微信小程序开发(二)——使用ssh(struts2+hibernate+spring)框架实现保存前台微信小程序中微信用户唯一标识到数据库(MySQL)中
2018-09-05 18:10
771 查看
这次由两人共同实现完成做到通过使用微信小程序的api来获取微信用户的唯一标识,在把唯一标识上传到服务器的数据库中,如果是第一次登陆服务器会返回第一次登陆上传到数据库,如果不是第一次登陆服务器会返回数据库已有用户到前台。这次是使用了完整的ssh框架。另一位小伙伴的CSDN地址https://blog.csdn.net/xk4500,我们都是大四学生,因为一个项目的需要所以做了这个基于ssh框架与微信小程序进行通信,如有不足,欢迎指出。
项目环境(Tomcat8.5+myeclipse2016 ci)
一、ssh框架所以需要的包
二、user,pojo类
[code]//用户pojo package com.wx.pojo; import javax.persistence.*; import java.util.HashSet; import java.util.Set; @Entity @Table(name = "tbs_user") public class User { private int user_id; private String wx_id; @Id @GeneratedValue(strategy= GenerationType.AUTO) @Column(name = "id") public int getUser_id() { return user_id; } public void setUser_id(int user_id) { this.user_id = user_id; } @Column(name = "wx") public String getWx_id() { return wx_id; } public void setWx_id(String wx_id) { this.wx_id = wx_id; } public User(int user_id, String wx_id) { super(); this.user_id = user_id; this.wx_id = wx_id; } public User() { super(); } }
三、dao层代码
1.UserDao,java
[code]package com.wx.dao; import com.wx.pojo.User; public interface UserDao { User selectByWxid(User user); int sava(User user); }
2.UserDaoImp.java
[code]package com.wx.dao; import com.wx.pojo.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.orm.hibernate5.HibernateTemplate; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; import java.io.Serializable; import java.util.List; @Repository @Transactional public class UserDaoImp implements UserDao{ @Autowired private HibernateTemplate hibernateTemplate; @Override public User selectByWxid(User user) { String hql="from User user where user.wx_id=?"; List<User> find = (List<User>) hibernateTemplate.find(hql, user.getWx_id()); if (find.size()==0){ return null; }else { return find.get(0); } } @Override public int sava(User user) { Serializable row = hibernateTemplate.save(user); return (int) row; } }
四、service层代码
1.UserService.java
[code]package com.wx.Server; import com.wx.pojo.User; public interface UserService { public String sava(User user); }
2.UserServiceImp.java
[code]package com.wx.Server; import com.wx.dao.UserDao; import com.wx.pojo.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Transactional @Service public class UserServiceImp implements UserService { @Autowired private UserDao userDao; public String sava(User user){ User selectByWxid = userDao.selectByWxid(user); if (selectByWxid==null){ userDao.sava(user); return "success"; }else { return "input"; } } }
五、action代码
[code]package com.wx.Action; import com.wx.Server.UserService; import com.wx.pojo.JsonResult; import com.wx.pojo.User; import org.apache.struts2.interceptor.RequestAware; import org.springframework.stereotype.Controller; import org.springframework.stereotype.Service; import org.springframework.web.context.ContextLoaderListener; import org.springframework.web.context.WebApplicationContext; import javax.annotation.Resource; import java.util.HashMap; import java.util.Map; import java.util.logging.Logger; @Controller public class UserAction implements RequestAware { private User user; @Resource(name = "userServiceImp") private UserService userService; private Map<String, Object> request; private JsonResult jsonResult; Logger log = Logger.getLogger(this.getClass().getName()); public User getUser() { return user; } public void setUser(User user) { this.user = user; } public JsonResult getJsonResult() { return jsonResult; } public void setJsonResult(JsonResult jsonResult) { this.jsonResult = jsonResult; } public String login(){ jsonResult = new JsonResult(); WebApplicationContext context = ContextLoaderListener.getCurrentWebApplicationContext(); log.info("user_____________"+user+"userServer_____________"+userService); log.info("context:---"+context.getBeansWithAnnotation(Service.class)); userService = (UserService) context.getBeansWithAnnotation(Service.class).get("userServiceImp"); String login_msg=userService.sava(user); if (login_msg.equals("success")){ jsonResult.setResult(login_msg+"第一次登陆上传到数据库"); }else { jsonResult.setResult(login_msg+"数据库已有用户"); } Map map = new HashMap<String, Object>(); map.put("user", user); jsonResult.setMsg(map); return "success"; } @Override public void setRequest(Map<String, Object> map) { request=map; } }
六、微信前端代码
1.js代码
[code]// pages/gerenyemian/grym.js Page({ /** * 页面的初始数据 */ data: { }, /** * 生命周期函数--监听页面加载 */ onLoad: function () { wx.setNavigationBarTitle({ title: '个人中心', }) wx.login({ success: function(res) { var code = res.code //返回code var appid = '自己的微信qppid'; var AppSecret = '自己的AppSecret'; console.log(code); //发起网络请求 wx.request({ url: 'https://api.weixin.qq.com/sns/jscode2session?appid=' + appid + '&secret=' + AppSecret + '&js_code=' + code + '&grant_type=authorization_code', data: {}, header: { 'content-type': 'application/json' }, success: function (res) { var openId = res.data.openid //返回openid console.log(openId); wx.request({ url: 'http://localhost:8080/wxserver/login.action', data: { 'user.wx_id': openId, }, header: { 'content-type': 'application/json' // 默认值 }, method: 'GET', dataType: 'json', responseType: 'text', success: function (res) { console.log(res.data); }, fail: function (res) { console.log("连接失败"); } }) } }) } }) }
七、spring的配置文件
[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" xmlns:tx="http://www.springframework.org/schema/tx" 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/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd" > <!--扫描spring注解 package为包的名字--> <context:annotation-config/> <context:component-scan base-package="com.wx"></context:component-scan> <!--注入数据源--> <bean name="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql:///wx?useUnicode=true&characterEncoding=UTF8" /> <property name="username" value="root" /> <property name="password" value="admin" /> </bean> <!--注入sessionFactory--> <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <property name="hibernateProperties"> <props> <!--定义方言--> <prop key="hibernate.dialect"> org.hibernate.dialect.MySQL5Dialect </prop> <!--在控制台显示sql语句--> <prop key="hibernate.show_sql">true</prop> <!--定义为每次重启自动更新数据--> <prop key="hibernate.hbm2ddl.auto">update</prop> <!--session绑定--> <prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate5.SpringSessionContext</prop> </props> </property> <!--扫描hibernate注解--> <property name="packagesToScan"> <list> <value>com.wx.pojo</value> </list> </property> </bean> <!--注入hibernateTemplate--> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <!-- 事务管理器配置, Hibernate单数据源事务 --> <bean id="defaultTransactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <!-- 使用annotation定义事务 --> <tx:annotation-driven transaction-manager="defaultTransactionManager" proxy-target-class="true" /> </beans>
八、struts.xml文件(用于配置action)
[code]<?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> <package name="default" namespace="/" extends="struts-default,json-default"> <action name="login" class="com.wx.Action.UserAction" method="login"> <result name="success" type="json"> <param name="root">jsonResult</param> </result> </action> </package> </struts>
九、web.xml文件
[code]<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0" > <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> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-config.xml</param-value> </context-param> </web-app>
十、最终效果
第一次登陆
第二次登陆
阅读更多
相关文章推荐
- 【微信小程序】登录功能实现及讲解(获取用户唯一标识)
- 数据库分库分表(sharding)系列(三) 关于使用框架还是自主开发以及sharding实现层面的考量
- SSH开发框架中,实现系统启动加载类,读取数据库常用数据进入内存以及将数据放在application
- SSH开发框架中,实现系统启动加载类,读取数据库常用数据进入内存,利用Spring托管,并完成reload功能
- 快速了解微信小程序的使用,一个根据小程序的框架开发的todos app
- 数据库分库分表(sharding)系列(三) 关于使用框架还是自主开发以及sharding实现层面的考量
- 数据库分库分表(sharding)系列(三) 关于使用框架还是自主开发以及sharding实现层面的考量(不太懂)
- angular JS 基于ionic框架 开发移动端项目 实现进入前台 判断用户权限 控制项目UI布局和tab的部门显示和隐藏
- 使用AUI框架开发微信小程序
- 快速了解微信小程序的使用,一个根据小程序的框架开发的todos app
- 使用Struts 2.0 框架实现用户注册登录模块(数据库校验)
- Bluemix云端数据库服务ClearDB MySQL使用示例———Python开发投票程序
- 关于使用Yii框架开发时数据库增加字段后保存无效的问题
- mysql保存emoji表情(微信开发用户昵称..)
- Java小程序之集合框架模拟数据库实现用户登录和注册功能
- MVC4/5+jquery+bootstrap样式+dataTables+linq+WCF+EF6后台和前台的框架集合!好蛋疼哦!数据库支持MYSQL 和MSSQL,oracle。集成腾讯企业邮箱收邮件同步用户SSO登陆等功能。
- 关于使用Yii框架开发时数据库增加字段后保存无效的问题
- mysql保存emoji表情(微信开发用户昵称..)
- 快速了解微信小程序的使用,一个根据小程序的框架开发的todos app
- 使用SSH实现分页的详细demo(附带数据库,MYSQl和Oracle)