SSM(Spring+SpringMVC+Mybatis) 整合
这两天在Spring + SpringMVC +Hibernate的基础上,将Hibernate 换成了Mybatis 进行整合。
虽然大部分的代码一致,但是就配置文件也是很让人跪。本人在写的时候由于扫描mapper 时,下到了mapper 包中,结果扫描不到Dao然后直接报创建不了工厂类(由于Dao在mapper的上级目录中)。
因为是第一次进行整合,所以没有使用了Maven。下面将代码贴进来。算做是笔记。(环境:eclipse + jdk 1.8 + Tomcat 7.0)
功能是:写一个功能简单的人员信息薄。包括(管理员的登录验证,管理员的注册,对信息的增删改查) 在管理员的登录和注册的时候使用了随机ID 和 加密(UUID , 验证码 + 密码 然后进行加密作为一个新的密码) 详细的见代码。
jar 包:
目录结构:
验证码:ValidationCodeServlet.java
package com.baijh.util;import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.awt.image.BufferedImageOp;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import org.patchca.background.BackgroundFactory;
import org.patchca.color.ColorFactory;
import org.patchca.color.RandomColorFactory;
import org.patchca.filter.ConfigurableFilterFactory;
import org.patchca.filter.library.AbstractImageOp;
import org.patchca.filter.library.WobbleImageOp;
import org.patchca.font.RandomFontFactory;
import org.patchca.service.Captcha;
import org.patchca.service.ConfigurableCaptchaService;
import org.patchca.text.renderer.BestFitTextRenderer;
import org.patchca.word.RandomWordFactory;public class ValidationCodeServlet extends HttpServlet {private static final long serialVersionUID = 5126616339795936447L;private ConfigurableCaptchaService configurableCaptchaService = null;private ColorFactory colorFactory = null;private RandomFontFactory fontFactory = null;private RandomWordFactory wordFactory = null;private BestFitTextRenderer textRenderer = null;public ValidationCodeServlet() {super();}/*** Servlet销毁方法,负责销毁所使用资源. <br>*/public void destroy() {wordFactory = null;colorFactory = null;fontFactory = null;textRenderer = null;configurableCaptchaService = null;super.destroy(); // Just puts "destroy" string in log}public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("image/png");response.setHeader("cache", "no-cache");HttpSession session = request.getSession(true);OutputStream outputStream = response.getOutputStream();// 得到验证码对象,有验证码图片和验证码字符串Captcha captcha = configurableCaptchaService.getCaptcha();// 取得验证码字符串放入SessionString validationCode = captcha.getChallenge();session.setAttribute("validationCode", validationCode);// 取得验证码图片并输出BufferedImage bufferedImage = captcha.getImage();ImageIO.write(bufferedImage, "png", outputStream);outputStream.flush();outputStream.close();}/*** Servlet初始化方法*/public void init() throws ServletException {configurableCaptchaService = new ConfigurableCaptchaService();// 颜色创建工厂,使用一定范围内的随机色colorFactory = new RandomColorFactory();configurableCaptchaService.setColorFactory(colorFactory);// 随机字体生成器fontFactory = new RandomFontFactory();fontFactory.setMaxSize(32);fontFactory.setMinSize(28);configurableCaptchaService.setFontFactory(fontFactory);// 随机字符生成器,去除掉容易混淆的字母和数字,如o和0等wordFactory = new RandomWordFactory();wordFactory.setCharacters("abcdefghkmnpqstwxyz23456789");wordFactory.setMaxLength(5);wordFactory.setMinLength(4);configurableCaptchaService.setWordFactory(wordFactory);// 自定义验证码图片背景MyCustomBackgroundFactory backgroundFactory = new MyCustomBackgroundFactory();configurableCaptchaService.setBackgroundFactory(backgroundFactory);// 图片滤镜设置ConfigurableFilterFactory filterFactory = new ConfigurableFilterFactory();List<BufferedImageOp> filters = new ArrayList<BufferedImageOp>();WobbleImageOp wobbleImageOp = new WobbleImageOp();wobbleImageOp.setEdgeMode(AbstractImageOp.EDGE_MIRROR);wobbleImageOp.setxAmplitude(2.0);wobbleImageOp.setyAmplitude(1.0);filters.add(wobbleImageOp);filterFactory.setFilters(filters);configurableCaptchaService.setFilterFactory(filterFactory);// 文字渲染器设置textRenderer = new BestFitTextRenderer();textRenderer.setBottomMargin(3);textRenderer.setTopMargin(3);configurableCaptchaService.setTextRenderer(textRenderer);// 验证码图片的大小configurableCaptchaService.setWidth(82);configurableCaptchaService.setHeight(32);}/*** 自定义验证码图片背景,主要画一些噪点和干扰线*/private class MyCustomBackgroundFactory implements BackgroundFactory {private Random random = new Random();public void fillBackground(BufferedImage image) {Graphics graphics = image.getGraphics();// 验证码图片的宽高int imgWidth = image.getWidth();int imgHeight = image.getHeight();// 填充为白色背景graphics.setColor(Color.WHITE);graphics.fillRect(0, 0, imgWidth, imgHeight);// 画100个噪点(颜色及位置随机)for (int i = 0; i < 100; i++) {// 随机颜色int rInt = random.nextInt(255);int gInt = random.nextInt(255);int bInt = random.nextInt(255);graphics.setColor(new Color(rInt, gInt, bInt));// 随机位置int xInt = random.nextInt(imgWidth - 3);int yInt = random.nextInt(imgHeight - 2);// 随机旋转角度int sAngleInt = random.nextInt(360);int eAngleInt = random.nextInt(360);// 随机大小int wInt = random.nextInt(6);int hInt = random.nextInt(6);graphics.fillArc(xInt, yInt, wInt, hInt, sAngleInt, eAngleInt);// 画5条干扰线if (i % 20 == 0) {int xInt2 = random.nextInt(imgWidth);int yInt2 = random.nextInt(imgHeight);graphics.drawLine(xInt, yInt, xInt2, yInt2);}}}}
}
SQL 文件:
create database telbook;use talbook;create table manage(id varchar(100) primary key auto_increment,username varchar(20),password varchar(100),validatecode varchar(20)
);create table person(id int primary key,name varchar(20),salary float,birthday date
);
然后通过这些 字段自己创建 entity中的数据,并提供set/get 方法,在这里就不多说了。
下面是管理员的:
package com.nyist.dao;import com.nyist.entity.Manage;
//定义管理员dao 接口
public interface ManageDao {//登录检查public Manage querymanage(String name);//管理员注册public void save(Manage manage);
}
ManageDaoMapper.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.nyist.dao.ManageDao" ><select id="querymanage" parameterType="String" resultType="com.nyist.entity.Manage">select * from manage where username = #{name}</select><insert id="save" parameterType="com.nyist.entity.Manage">insert into manage values(#{id},#{username},#{password},#{validatecode})</insert>
</mapper>
package com.nyist.service;import com.nyist.entity.Manage;public interface ManageService {public Manage queryManageByUserName(String username);public void addManage(Manage manage);
}
package com.nyist.service.Impl;import java.util.UUID;import javax.annotation.Resource;import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.stereotype.Service;import com.nyist.dao.ManageDao;
import com.nyist.entity.Manage;
import com.nyist.service.ManageService;
//Service 业务层接口的实现
@Service()
public class ManageServiceImpl implements ManageService {@Resourceprivate ManageDao managDao;//依赖注入 ManageDao@Overridepublic Manage queryManageByUserName(String username) {return managDao.querymanage(username);}@Overridepublic void addManage(Manage manage) {/*** 由于存储数据需要进行转换,所以在这里我们需要从页面中获取的数据进行处理。* ID 使用UUID 进行生产*///ID 自动生成策略manage.setId(UUID.randomUUID().toString());//获得验证码String validateCode = manage.getValidatecode();String name = manage.getUsername();//生成新的密码String newpassword = manage.getPassword()+validateCode;//对密码进行加密String newpassword1 = DigestUtils.md5Hex(newpassword);manage.setPassword(newpassword1);manage.setUsername(name);manage.setValidatecode(validateCode);System.out.println(manage);managDao.save(manage);}public ManageDao getManagDao() {return managDao;}public void setManagDao(ManageDao managDao) {this.managDao = managDao;}}
package com.nyist.controller;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.nyist.entity.Manage;
import com.nyist.service.ManageService;@Controller //控制器注解
@RequestMapping("/login.do")
public class ManageLogin {@Autowiredprivate ManageService manageService;//依赖注入@RequestMapping(params="method=login")public String login(Manage manage,HttpServletRequest request){HttpSession session = request.getSession();//验证码的验证//程序 创建的验证码String sysvacode = (String) session.getAttribute("validationCode");//自己在页面输入的String myvacode = manage.getValidatecode();if(myvacode.equals(sysvacode)){Manage manage1 = (Manage) manageService.queryManageByUserName(manage.getUsername());//拼接密码 登录时写的密码加上我们存进的验证码 然后进行加密 和我们数据库中的密码进行判断。判断是否能成功登录String mypassword = manage.getPassword() + manage1.getValidatecode();//加密后的拼接的密码String mypassword1 = DigestUtils.md5Hex(mypassword);String sqlpassword = manage1.getPassword();if(mypassword1.equals(sqlpassword)){session.setAttribute("username", manage.getUsername());return "redirect:personlist.do?method=personlist";}else{//失败了重定向到login.jspreturn "redirect:login.jsp"; } }else{return "redirect:login.jsp";}}}
package com.nyist.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;import com.nyist.entity.Manage;
import com.nyist.service.ManageService;@Controller //控制器注解
@RequestMapping("/reg.do")
public class ManageRegister {@Autowiredprivate ManageService manageService;@RequestMapping(params="method=reg")public ModelAndView reg(Manage manage){//使用ModelAndView 对象进行 页面的跳转System.out.println(manage);ModelAndView mv = new ModelAndView();manageService.addManage(manage);mv.setViewName("redirect:login.jsp");return mv;}public ManageService getManageService() {return manageService;}public void setManageService(ManageService manageService) {this.manageService = manageService;}}
下面是Person 的功能实现
package com.nyist.dao;import java.util.List;import com.nyist.entity.Person;public interface PersonDao {public void save(Person person);public void update(Person person);public void delete(Person person);public List<Person> queryAllPerson();
}
<?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.nyist.dao.PersonDao" ><update id="update" parameterType="com.nyist.entity.Person">update person set name=#{name},salary=#{salary},birthday=#{birthday} where id = #{id}</update><insert id="save" parameterType="com.nyist.entity.Person">insert into person values(#{id},#{name},#{salary},#{birthday})</insert><delete id="delete" parameterType="com.nyist.entity.Person">delete from person where id = #{id}</delete><select id="queryAllPerson" resultType="com.nyist.entity.Person">select * from person</select></mapper>
package com.nyist.service;import java.util.List;import com.nyist.entity.Person;public interface PersonService {//增加数据public void insertPerson(Person person);//修改数据public void updatePerson(Person person);//删除数据public void deletePerson(Person person);//获取所有数据public List<Person> queryAllPerson();}
package com.nyist.service.Impl;import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.nyist.dao.PersonDao;
import com.nyist.entity.Person;
import com.nyist.service.PersonService;@Component
public class PersonServiceImpl implements PersonService{@Autowiredprivate PersonDao persondao; @Overridepublic void insertPerson(Person person) {persondao.save(person);}@Overridepublic void updatePerson(Person person) {persondao.update(person);}@Overridepublic void deletePerson(Person person) {persondao.delete(person);}@Overridepublic List<Person> queryAllPerson() {return persondao.queryAllPerson();}}
功能实现:Controller :
package com.nyist.controller;import java.sql.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import javax.servlet.http.HttpServletRequest;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;import com.nyist.entity.Person;
import com.nyist.service.PersonService;@Component
@RequestMapping("/addperson.do")
public class PersonAdd {@Autowiredprivate PersonService personService;@RequestMapping(params="method=addperson")public String addperson(HttpServletRequest request) throws ParseException{String name = request.getParameter("name");float salary = Float.parseFloat(request.getParameter("salary"));SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Date birthday1 = new Date((sdf.parse(request.getParameter("birthday"))).getTime());Person p = new Person();p.setName(name);p.setSalary(salary);p.setBirthday(birthday1);personService.insertPerson(p);return "redirect:personlist.do?method=personlist";}public PersonService getPersonService() {return personService;}public void setPersonService(PersonService personService) {this.personService = personService;}
}
package com.nyist.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;import com.nyist.entity.Person;
import com.nyist.service.PersonService;@Component
@RequestMapping("/delete.do")
public class PersonDelete {@Autowiredprivate PersonService personService;//依赖注入@RequestMapping(params="method=deleteperson")public String deleteperson(int id){//deleteperson(int id) 在页面中直接获取ID ,Spring 自动为我们做这件事,但是 名字要保持一致Person person = new Person();person.setId(id);personService.deletePerson(person);//删除后进行重定向return "redirect:personlist.do?method=personlist";}
}
package com.nyist.controller;import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;import com.nyist.entity.Person;
import com.nyist.service.PersonService;@Controller
@RequestMapping("/personlist.do")
public class PersonList {@Autowiredprivate PersonService personService;//依赖注入@RequestMapping(params="method=personlist")public String personlist(HttpServletRequest request){//调用Service的业务方法进行查询List<Person> persons = personService.queryAllPerson();HttpSession session = request.getSession();//将查询到的数据存储的session中,然后进行跳转,在emplist中取出数据session.setAttribute("persons", persons);return "emplist";}}
package com.nyist.controller;import java.sql.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;import com.nyist.entity.Person;
import com.nyist.service.PersonService;
//声明 控制器 ,并指定 访问路径
@Component
@RequestMapping("update.do")
public class PersonUpdate {@Resourceprivate PersonService personService;//指定函数 ,Controller 中的每个函数都要进行声明@RequestMapping(params="method=updateperson")public String updateperson(HttpServletRequest request) throws ParseException{//在Controller中需要什么直接进行在形参上声明,然后SpringMVC自动为你创建,然后就可以直接使用了//获取参数 ,id 等等,和增加的控制器不同,修改需要获取 id 属性然后才能就行修改String id = request.getParameter("id");int myid = Integer.parseInt(id);String name = request.getParameter("name");float salary = Float.parseFloat(request.getParameter("salary"));//在插入的时候需要将日期进行转换SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//将 util 下的date 转成sql 下的dateDate birthday1 = new Date((sdf.parse(request.getParameter("birthday"))).getTime());Person p = new Person();p.setId(myid);p.setName(name);p.setSalary(salary);p.setBirthday(birthday1);personService.updatePerson(p);//重定向到 person 列表 的controller中return "redirect:personlist.do?method=personlist";}public PersonService getPersonService() {return personService;}public void setPersonService(PersonService personService) {this.personService = personService;}}
下面是最重要的配置文件的配置:
MybatisConfig.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><mappers><mapper resource="com/nyist/dao/mapper/ManageDaoMapper.xml"/><mapper resource="com/nyist/dao/mapper/PersonDaoMapper.xml"/></mappers>
</configuration>
ApplicationContext.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:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-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/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd"><context:component-scan base-package="com.nyist"><context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/></context:component-scan><context:property-placeholder location="classpath:jdbc.properties"/><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="jdbcUrl" value="${jdbc.url}"></property><property name="driverClass" value="${jdbc.driver}"></property><property name="user" value="${jdbc.username}"></property><property name="password" value="${jdbc.password}"></property><!-- 初始化获取三个连接,取值在minPoolSize 和maxPoolSize 之间 Default 为3 --><property name="initialPoolSize" value="3"></property><!-- 最小连接数 --><property name="minPoolSize" value="3"></property><!-- 连接池中保留的最大的连接数 --><property name="maxPoolSize" value="5"></property><!-- 当连接池中的连接耗尽的时候c3p0 一次同时获取的连接数 Default 为3 --><property name="acquireIncrement" value="3"></property><!-- 控制数据源内加载的PreparedStatements 数量,如果maxStatements 与maxStatementsPerConnection均 为0 的时候,则缓冲关闭,default =0 --><property name="maxStatements" value="8"></property><!--maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default: 0 --><property name="maxStatementsPerConnection" value="5"></property><!--最大空闲时间,1800秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 --><property name="maxIdleTime" value="1800"></property></bean><!-- SqlSessionFactory --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 数据库的连接 --><property name="dataSource" ref="dataSource"></property><!-- 加载Mybatis 的配置文件 --><property name="configLocation" value="classpath:mybaties/mybatisConfig.xml"></property></bean><!-- mapper扫描器 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.nyist.dao"></property><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property></bean>
</beans>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-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/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd"> <!-- 自动扫描 --><context:component-scan base-package = "com.nyist" use-default-filters="false"><context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/></context:component-scan><!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 --><bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/><!-- 视图解析器 --><bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver"><property name = "suffix" value = ".jsp"/><!-- 使用jstl 进行数据交换 --><property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property></bean><mvc:annotation-driven></mvc:annotation-driven><mvc:default-servlet-handler/>
</beans>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"><display-name>SpringAndSpringMVCAndMybaties</display-name><!-- 加载mybaties 的配置文件 --><!-- <context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring/ApplicationContext.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener> --><!-- 加载springmvc的配置文件 --><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring/springmvc.xml,classpath:spring/ApplicationContext.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping><!-- 验证码 --><servlet><servlet-name>validationCodeServlet</servlet-name><servlet-class>com.nyist.util.ValidationCodeServlet</servlet-class></servlet><servlet-mapping><servlet-name>validationCodeServlet</servlet-name><url-pattern>/validationCodeServlet.png</url-pattern></servlet-mapping></web-app>
关于jsp 文件和css 和 其他 我会上传CSDN 下载中
SSM(Spring+SpringMVC+Mybatis) 整合相关推荐
- SSM(Spring+SpringMVC+Mybatis)框架环境搭建(整合步骤)(一)
SSM(Spring+SpringMVC+Mybatis)框架环境搭建(整合步骤)(一) 1. 前言 最近在写毕设过程中,重新梳理了一遍SSM框架,特此记录一下. 附上源码:https://gitee ...
- Spring+SpringMVC+MyBatis整合基础篇
基础篇 Spring+SpringMVC+MyBatis+easyUI整合基础篇(一)项目简介 Spring+SpringMVC+MyBatis+easyUI整合基础篇(二)牛刀小试 Spring+S ...
- Spring+SpringMVC +MyBatis整合配置文件案例66666
Spring+SpringMVC +MyBatis整合配置文件案例 标签: springspringmvcmybatismvcjava 2017-04-13 19:12 228人阅读 评论(1) 收藏 ...
- Java语言开发在线购物推荐网 购物商城推荐系统 基于用户、物品的协同过滤推荐算法 SSM(Spring+SpringMVC+Mybatis)开发框架 大数据、人工智能、机器学习项目开发
Java语言开发在线购物推荐网 购物商城推荐系统 基于用户.物品的协同过滤推荐算法 SSM(Spring+SpringMVC+Mybatis)开发框架 大数据.人工智能.机器学习项目开发ShopRec ...
- Java+SSM(Spring+SpringMVC+Mybatis)个性化购物商城推荐系统 电子商务推荐系统 基于用户、项目、聚类、混合的协同过滤推荐算法WebShopRSMEx 源代码下载
Java+SSM(Spring+SpringMVC+Mybatis)个性化购物商城推荐系统 电子商务推荐系统 基于用户.项目.聚类.混合的协同过滤推荐算法WebShopRSMEx 源代码下载 一.项目 ...
- Java语言开发在线音乐推荐网 音乐推荐系统 网易云音乐爬虫 基于用户、物品的协同过滤推荐算法 SSM(Spring+SpringMVC+Mybatis)框架 大数据、人工智能、机器学习项目开发
Java语言开发在线音乐推荐网 音乐推荐系统 网易云音乐爬虫 基于用户.物品的协同过滤推荐算法 SSM(Spring+SpringMVC+Mybatis)框架 大数据.人工智能.机器学习项目开发Mus ...
- 使用Java+SSM(Spring+SpringMVC+Mybatis)如何开发个性化音乐推荐系统 在线音乐推荐网站 基于用户、项目的协同过滤推荐算法实现MusicRecommendSystemWeb
使用Java+SSM(Spring+SpringMVC+Mybatis)如何开发个性化音乐推荐系统 在线音乐推荐网站 基于用户.项目的协同过滤推荐算法实现MusicRecommendSystemWeb ...
- 如何使用Java+SSM(Spring+SpringMVC+Mybatis)开发个性化新闻推荐系统 在线新闻推荐系统 基于用户项目协同过滤、内容、聚类、关联规则推荐算法实现WebNewsRSMEx
如何使用Java+SSM(Spring+SpringMVC+Mybatis)开发个性化新闻推荐系统 在线新闻推荐系统 基于用户项目协同过滤.内容.聚类.关联规则推荐算法实现WebNewsRSMEx 一 ...
- 使用Java+SSM(Spring+SpringMVC+Mybatis)开发在线美食推荐网 美食推荐系统 美食天下美食爬虫 基于用户、物品的协同过滤推荐算法实现 大数据、人工智能、机器学习项目开发
使用Java+SSM(Spring+SpringMVC+Mybatis)开发在线美食推荐网 美食推荐系统 美食天下美食爬虫 基于用户.物品的协同过滤推荐算法实现 大数据.人工智能.机器学习项目开发Fo ...
- Springboot+ssm(Spring+SpringMVC+MyBatis)旧物置换网站
目 录 摘 要 I 目 录 III 第1章 概述 1 1.1 研究背景 1 1.2 研究现状 1 1.3 研究内容 2 第二章 开发技术介绍 2 2.1 ...
最新文章
- 如何很好的使用Linq的Distinct方法
- 70个python毕设项目_10 个最值得 Python 新人练手的有趣项目
- FreeRTOS实验_独立看门狗监视多线程
- 探索cqrs和事件源_编写基于事件的CQRS读取模型
- ReactiveX流式编程—从xstream讲起
- Spark Streaming实时数据分析
- 显示脸上的关键点的程序
- “非IE内核浏览器”第一阶段开发计划发布
- 计算机系统管理内存的大小是由什么决定的,计算机内存容量大小由什么决定
- Linux下的编辑器整理
- sensor接口之DVP
- QGIS使用栅格图层
- 免费下载中国知网、万方学术论文的几种方法(福利合集)
- 批量图片压缩、生成PDF文件及PDF文件压缩
- 如何安装.ipa文件
- Excel做数据分析?是真的很强
- 精确休息法——《万维钢.精英日课3》笔记
- 3d建模电脑配置要求
- 蓝桥杯_横向打印二叉树
- Latex中 .cls和.sty文件的作用和区别
热门文章
- 正则表达式re中的group和groups
- python复数类型及其特点_python中的复数类型
- 【01 赖世雄英语语法:单句的语法(句子的构成)】
- python两个excel做匹配_python链接两张excel表格数据-如何用python从excel中同时提取两个列的数据,并生......
- 甲骨文裁员是在为云业务转型太慢埋单
- 415错误及解决方法
- Python修改图像尺寸
- 数字档案馆子系统划分与功能
- 可调稳压电源lm317实验报告_LM317可调稳压电源实训实验.doc
- Android软键盘删除键触发Activity的返回事件