这两天在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) 整合相关推荐

  1. SSM(Spring+SpringMVC+Mybatis)框架环境搭建(整合步骤)(一)

    SSM(Spring+SpringMVC+Mybatis)框架环境搭建(整合步骤)(一) 1. 前言 最近在写毕设过程中,重新梳理了一遍SSM框架,特此记录一下. 附上源码:https://gitee ...

  2. Spring+SpringMVC+MyBatis整合基础篇

    基础篇 Spring+SpringMVC+MyBatis+easyUI整合基础篇(一)项目简介 Spring+SpringMVC+MyBatis+easyUI整合基础篇(二)牛刀小试 Spring+S ...

  3. Spring+SpringMVC +MyBatis整合配置文件案例66666

    Spring+SpringMVC +MyBatis整合配置文件案例 标签: springspringmvcmybatismvcjava 2017-04-13 19:12 228人阅读 评论(1) 收藏 ...

  4. Java语言开发在线购物推荐网 购物商城推荐系统 基于用户、物品的协同过滤推荐算法 SSM(Spring+SpringMVC+Mybatis)开发框架 大数据、人工智能、机器学习项目开发

    Java语言开发在线购物推荐网 购物商城推荐系统 基于用户.物品的协同过滤推荐算法 SSM(Spring+SpringMVC+Mybatis)开发框架 大数据.人工智能.机器学习项目开发ShopRec ...

  5. Java+SSM(Spring+SpringMVC+Mybatis)个性化购物商城推荐系统 电子商务推荐系统 基于用户、项目、聚类、混合的协同过滤推荐算法WebShopRSMEx 源代码下载

    Java+SSM(Spring+SpringMVC+Mybatis)个性化购物商城推荐系统 电子商务推荐系统 基于用户.项目.聚类.混合的协同过滤推荐算法WebShopRSMEx 源代码下载 一.项目 ...

  6. Java语言开发在线音乐推荐网 音乐推荐系统 网易云音乐爬虫 基于用户、物品的协同过滤推荐算法 SSM(Spring+SpringMVC+Mybatis)框架 大数据、人工智能、机器学习项目开发

    Java语言开发在线音乐推荐网 音乐推荐系统 网易云音乐爬虫 基于用户.物品的协同过滤推荐算法 SSM(Spring+SpringMVC+Mybatis)框架 大数据.人工智能.机器学习项目开发Mus ...

  7. 使用Java+SSM(Spring+SpringMVC+Mybatis)如何开发个性化音乐推荐系统 在线音乐推荐网站 基于用户、项目的协同过滤推荐算法实现MusicRecommendSystemWeb

    使用Java+SSM(Spring+SpringMVC+Mybatis)如何开发个性化音乐推荐系统 在线音乐推荐网站 基于用户.项目的协同过滤推荐算法实现MusicRecommendSystemWeb ...

  8. 如何使用Java+SSM(Spring+SpringMVC+Mybatis)开发个性化新闻推荐系统 在线新闻推荐系统 基于用户项目协同过滤、内容、聚类、关联规则推荐算法实现WebNewsRSMEx

    如何使用Java+SSM(Spring+SpringMVC+Mybatis)开发个性化新闻推荐系统 在线新闻推荐系统 基于用户项目协同过滤.内容.聚类.关联规则推荐算法实现WebNewsRSMEx 一 ...

  9. 使用Java+SSM(Spring+SpringMVC+Mybatis)开发在线美食推荐网 美食推荐系统 美食天下美食爬虫 基于用户、物品的协同过滤推荐算法实现 大数据、人工智能、机器学习项目开发

    使用Java+SSM(Spring+SpringMVC+Mybatis)开发在线美食推荐网 美食推荐系统 美食天下美食爬虫 基于用户.物品的协同过滤推荐算法实现 大数据.人工智能.机器学习项目开发Fo ...

  10. Springboot+ssm(Spring+SpringMVC+MyBatis)旧物置换网站

    目  录 摘  要    I 目  录    III 第1章 概述    1 1.1 研究背景    1 1.2 研究现状    1 1.3 研究内容    2 第二章 开发技术介绍    2 2.1 ...

最新文章

  1. 如何很好的使用Linq的Distinct方法
  2. 70个python毕设项目_10 个最值得 Python 新人练手的有趣项目
  3. FreeRTOS实验_独立看门狗监视多线程
  4. 探索cqrs和事件源_编写基于事件的CQRS读取模型
  5. ReactiveX流式编程—从xstream讲起
  6. Spark Streaming实时数据分析
  7. 显示脸上的关键点的程序
  8. “非IE内核浏览器”第一阶段开发计划发布
  9. 计算机系统管理内存的大小是由什么决定的,计算机内存容量大小由什么决定
  10. Linux下的编辑器整理
  11. sensor接口之DVP
  12. QGIS使用栅格图层
  13. 免费下载中国知网、万方学术论文的几种方法(福利合集)
  14. 批量图片压缩、生成PDF文件及PDF文件压缩
  15. 如何安装.ipa文件
  16. Excel做数据分析?是真的很强
  17. 精确休息法——《万维钢.精英日课3》笔记
  18. 3d建模电脑配置要求
  19. 蓝桥杯_横向打印二叉树
  20. Latex中 .cls和.sty文件的作用和区别

热门文章

  1. 正则表达式re中的group和groups
  2. python复数类型及其特点_python中的复数类型
  3. 【01 赖世雄英语语法:单句的语法(句子的构成)】
  4. python两个excel做匹配_python链接两张excel表格数据-如何用python从excel中同时提取两个列的数据,并生......
  5. 甲骨文裁员是在为云业务转型太慢埋单
  6. 415错误及解决方法
  7. Python修改图像尺寸
  8. 数字档案馆子系统划分与功能
  9. 可调稳压电源lm317实验报告_LM317可调稳压电源实训实验.doc
  10. Android软键盘删除键触发Activity的返回事件