- 浏览: 2182460 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (682)
- 软件思想 (7)
- Lucene(修真篇) (17)
- Lucene(仙界篇) (20)
- Lucene(神界篇) (11)
- Solr (48)
- Hadoop (77)
- Spark (38)
- Hbase (26)
- Hive (19)
- Pig (25)
- ELK (64)
- Zookeeper (12)
- JAVA (119)
- Linux (59)
- 多线程 (8)
- Nutch (5)
- JAVA EE (21)
- Oracle (7)
- Python (32)
- Xml (5)
- Gson (1)
- Cygwin (1)
- JavaScript (4)
- MySQL (9)
- Lucene/Solr(转) (5)
- 缓存 (2)
- Github/Git (1)
- 开源爬虫 (1)
- Hadoop运维 (7)
- shell命令 (9)
- 生活感悟 (42)
- shell编程 (23)
- Scala (11)
- MongoDB (3)
- docker (2)
- Nodejs (3)
- Neo4j (5)
- storm (3)
- opencv (1)
最新评论
-
qindongliang1922:
粟谷_sugu 写道不太理解“分词字段存储docvalue是没 ...
浅谈Lucene中的DocValues -
粟谷_sugu:
不太理解“分词字段存储docvalue是没有意义的”,这句话, ...
浅谈Lucene中的DocValues -
yin_bp:
高性能elasticsearch ORM开发库使用文档http ...
为什么说Elasticsearch搜索是近实时的? -
hackWang:
请问博主,有用solr做电商的搜索项目?
Solr中Group和Facet的用法 -
章司nana:
遇到的问题同楼上 为什么会返回null
Lucene4.3开发之第八步之渡劫初期(八)
散仙,在前面的博客中写过一篇,Spirng MVC+Hibernate+Spring集成小例子,鉴于各个公司在持久层多样化的选择,那么本篇呢,散仙来简单介绍下Spring MVC+MyBatics+Spring三者之间的整合,因为这也算目前大多数公司,使用的比较多的一种组合,当然也有基于SSH的架构Spring+Struts2+Hibernate,抛开这两种组合的优劣点,今天我们主要介绍的是怎么组合使用,所以关于框架本身的优劣点,就不在这里加以评论了。
散仙的开发环境如下:
项目背景概况,此项目为了模拟开发中的实际场景,使用了2张表,具有主外键关系,一个是主表Person,另一个从表Country,比上一次的单表的增删改查骚加复杂,实为新手练手的一个好例子。
下面是功能描述:
关于在IDE中,怎么让MyBatics的xml文件字段提示,可以参考散仙的上篇文章配置Mybatics的mapper文件提示
实体类person的映射配置
实体类country的映射配置
Mybatics通用DAO的写法
Spirng注解控制器类
Spring的servlet的xml的配置:
散仙的开发环境如下:
名称 | 描述 |
Web容器 | Tomcat7.0 |
IDE工具 | Myeclipse10.1 |
平台 | Windows |
语言 | JAVA |
JDK | 1.7 |
数据库 | MySQL5.1 |
Sping | 3.2(非Myeclipse自带,需要下载) |
MyBatics | 3.2(需下载) |
Jquery | 1.7.1 |
人力道具 | 屌丝软件工程师一名 |
项目背景概况,此项目为了模拟开发中的实际场景,使用了2张表,具有主外键关系,一个是主表Person,另一个从表Country,比上一次的单表的增删改查骚加复杂,实为新手练手的一个好例子。
下面是功能描述:
功能 | 描述 |
查询功能 | 默认情况下显示所有Person信息,需含有外键表的Country的name信息 |
增加功能 | 在首页上点击添加信息,跳转页面,Country信息需用下拉框显示,后台添加成功后,需要用以ajax的形式,返回响应,提示添加成功 |
修改功能 | 可以对对应的Person信息进行修改,注意下拉框与修改的Person的对应 |
删除功能 | 可以在首页上对对应的Person信息进行删除 |
关于在IDE中,怎么让MyBatics的xml文件字段提示,可以参考散仙的上篇文章配置Mybatics的mapper文件提示
实体类person的映射配置
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd" > <mapper namespace="dao.PersonMapper"> <!-- 返回关联映射 --> <resultMap type="Person" id="mylist" > <id property="id" column="id"/> <result property="name" column="name"/> <result property="age" column="age"/> <!-- 支持嵌套类 --> <association property="country" javaType="Country" column="cid"> <id property="id" column="cid"/> <result property="cname" column="cname"/> </association> </resultMap> <!-- 查询所有 --> <select id="getAll" resultType="Person" resultMap="mylist"> select p.id as id,p.`name` as name ,p.age as age , c.cname as cname ,c.id as cid from person p,country c where p.cid=c.id order by id </select> <!-- 保存 --> <insert id="save"> insert into person(name,age,cid) values(#{name},#{age},#{country.id}) </insert> <!-- 删除 --> <delete id="delete"> delete from person where id=#{id} </delete> <!-- 更新的信息 --> <update id="update"> update person set name=#{name},age=#{age},cid=#{country.id} where id=#{id} </update> <!-- 获取单个实体类的信息 --> <select id="get" resultType="Person" resultMap="mylist" > select *from person where id=#{id} </select> <!-- 统计分页个数 <select id="count" resultType="int"> select count(*) from classes </select> --> <!-- Oracle查询分页实体类集合 <select id="pageList" parameterType="java.util.Map" resultType="Classes"> select *from (select rownum a, classes.* from classes ) c where c.a between #{offset} and #{pageSize} </select> --> <!-- MySQL 分页 <select id="pageList" parameterType="java.util.Map" resultType="Classes"> select *from classes order by id limit #{offset},#{pageSize} </select> --> <!-- SQL Server分页 注意SQL Server 分页不支持?占位符所以得用 $符进行替代换位 <select id="pageList" parameterType="java.util.Map" resultType="Classes"> select top ${offset} * from Classes where id not in(select top ${pageSize} id from Classes) </select> --> </mapper>
实体类country的映射配置
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd" > <mapper namespace="dao.CountryMapper"> <!-- 返回关联映射 --> <resultMap type="Country" id="mylist" > <id property="id" column="id"/> <result property="cname" column="cname"/><!-- 与别名对应 --> </resultMap> <!-- 查询所有 --> <select id="getAll" resultType="Country" resultMap="mylist"> select id,cname from country </select> <!-- 统计分页个数 <select id="count" resultType="int"> select count(*) from classes </select> --> <!-- Oracle查询分页实体类集合 <select id="pageList" parameterType="java.util.Map" resultType="Classes"> select *from (select rownum a, classes.* from classes ) c where c.a between #{offset} and #{pageSize} </select> --> <!-- MySQL 分页 <select id="pageList" parameterType="java.util.Map" resultType="Classes"> select *from classes order by id limit #{offset},#{pageSize} </select> --> <!-- SQL Server分页 注意SQL Server 分页不支持?占位符所以得用 $符进行替代换位 <select id="pageList" parameterType="java.util.Map" resultType="Classes"> select top ${offset} * from Classes where id not in(select top ${pageSize} id from Classes) </select> --> </mapper>
Mybatics通用DAO的写法
package commons; import java.io.Serializable; import java.util.List; import org.mybatis.spring.support.SqlSessionDaoSupport; /** * 操作mybatis的工具接口 * * */ public class MyBatisDao extends SqlSessionDaoSupport { /** * @param key 命名空间+id值 * @param o 需要进行保存的实体类 * 保存的方法 * */ public void save(String key,Object o){ this.getSqlSession().insert(key, o); } /** * 删除的方法 * */ public void delete(String key,Object o){ this.getSqlSession().delete(key, o); } /** * 修改的方法 * */ public void update(String key,Object o){ this.getSqlSession().update(key, o); } /** * 根据ID 查询单个实体类 * */ public <E> E get(String key,Serializable id){ return this.getSqlSession().selectOne(key,id); } /*** * 查询实体类集合 * * */ public <E> List<E> getAll(String key){ return this.getSqlSession().selectList(key); } /*** * 查询实体类的总个数 * */ public int count(String key){ return this.getSqlSession().selectOne(key); } /** * 查询总集合数 * * */ public <E> List<E> pageList(String key,Object o){ return this.getSqlSession().selectList(key,o); } }
Spirng注解控制器类
package controller; import java.util.ArrayList; import java.util.List; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import com.google.gson.Gson; import commons.MyBatisDao; import dao.CountryDao; import dao.PersonDao; import entity.Country; import entity.Person; /** * @author 秦东亮 * 技术群:324714439 * * * */ @Controller public class PersonController { @Resource(name="personDao") private PersonDao personDao; public PersonDao getPersonDao() { return personDao; } public void setPersonDao(PersonDao personDao) { this.personDao = personDao; } @Resource(name="countryDao") private CountryDao countryDao; public CountryDao getCountryDao() { return countryDao; } @Resource(name="dao") private MyBatisDao dao; public MyBatisDao getDao() { return dao; } public void setDao(MyBatisDao dao) { this.dao = dao; } public void setCountryDao(CountryDao countryDao) { this.countryDao = countryDao; } /** * 输出所有的用户信息 * * **/ @RequestMapping( value="/showAll") public String showAll(HttpServletRequest request)throws Exception{ //MyBatisDao dao=new MyBatisDao(); // /request.setAttribute("plist", personDao.find(" from Person ")); request.setAttribute("plist",dao.getAll("dao.PersonMapper.getAll")); return "showAll"; } /** * 输出所有的国家信息 * * **/ @RequestMapping( value="/add") public String add(HttpServletRequest request)throws Exception{ //request.setAttribute("clist", countryDao.find(" from Country ")); request.setAttribute("clist", dao.getAll("dao.CountryMapper.getAll")); return "adda"; } /** * 删除的方法 * */ @RequestMapping( value="/delete") public String delete(HttpServletRequest request)throws Exception{ int id=Integer.parseInt(request.getParameter("id")); //personDao.delete(personDao.get(id)); dao.delete("dao.PersonMapper.delete", id); return "redirect:/showAll"; } /** * 删除的方法 * request域的写法 * */ @RequestMapping( value="/update") public String update(HttpServletRequest request)throws Exception{ int id=Integer.parseInt(request.getParameter("id")); //request.setAttribute("p", personDao.get(id)); request.setAttribute("p", dao.get("dao.PersonMapper.get", id)); request.setAttribute("clist", dao.getAll("dao.CountryMapper.getAll")); //request.setAttribute("clist", countryDao.find(" from Country ")); return "update"; } /** * 更新的操作 * 封装成实体类的写法 * */ @RequestMapping( value="/sup",method=RequestMethod.POST) public String sup(Person person,HttpServletRequest request){ try{ //personDao.update(person); dao.update("dao.PersonMapper.update", person); // System.out.println("111"); // System.out.println(person.getName()); //System.out.println(person.getCountry().getId()); //System.out.println(request.getParameter("name")); }catch (Exception e) { e.printStackTrace(); } return "redirect:/showAll"; } /** * 保存一条数据 * 没有使用实体类自动封装的功能 * * **/ @RequestMapping( value="/save",method=RequestMethod.POST) public void save(HttpServletRequest request,HttpServletResponse response)throws Exception{ // personDao.save(person);//保存成功 Person person=new Person(); person.setAge(Integer.parseInt(request.getParameter("age"))); person.setName(request.getParameter("name")); Country c=new Country(); c.setId(Integer.parseInt(request.getParameter("cid"))); person.setCountry(c); personDao.save(person); //System.out.println("cid : "+request.getParameter("cid")); Gson g=new Gson(); // List<String> list=new ArrayList<String>(); // list.add("A"); // list.add("B"); // list.add("C"); // list.add("D"); response.setCharacterEncoding("UTF-8"); response.setContentType("application/json;charset=utf-8"); //response.getWriter().write(g.toJson(list)); response.getWriter().write(g.toJson("添加成功!")); // response.getWriter().write("1"); } /** * 保存一条数据 * 基于ajax的json自动封装的 * 实体类 * 注意有嵌套类时的 * 写法"county.id" * * **/ @RequestMapping( value="/savetwo",method=RequestMethod.POST) public void savetwo(Person person,HttpServletRequest request,HttpServletResponse response)throws Exception{ //personDao.save(person);//保存成功 //System.out.println(person.getName()); dao.save("dao.PersonMapper.save", person); // System.out.println(person); //System.out.println("cid : "+request.getParameter("cid")); Gson g=new Gson(); // List<String> list=new ArrayList<String>(); // list.add("A"); // list.add("B"); // list.add("C"); // list.add("D"); response.setCharacterEncoding("UTF-8"); response.setContentType("application/json;charset=utf-8"); //response.getWriter().write(g.toJson(list)); response.getWriter().write(g.toJson("添加成功!")); // response.getWriter().write("1"); } }
Spring的servlet的xml的配置:
<?xml version="1.0" encoding="UTF-8"?> <beans default-autowire="byName" 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:mvc="http://www.springframework.org/schema/mvc" 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-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd "> <!-- 注解扫描包 --> <context:component-scan base-package="controller" /> <!-- 开启注解 --> <mvc:annotation-driven /> <!-- <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>application/json;charset=UTF-8</value> <value>text/plain;charset=UTF-8</value> </list> </property> </bean> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <ref bean="mappingJacksonHttpMessageConverter" /> </list> </property> </bean> --> <!-- <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> <property name="mediaTypes"> <map> <entry key="atom" value="application/atom+xml"/> <entry key="html" value="text/html"/> <entry key="json" value="application/json"/> </map> </property> <property name="viewResolvers"> <list> <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean> </list> </property> <property name="defaultViews"> <list> <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" /> </list> </property> </bean> --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean> <!-- 处理器映射 --> <!-- <bean class="com.qin.annocontroller.HelowWorld" ></bean> --> <!-- 注解使用的 HandlerMapping --> <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"></bean> <!-- 注解使用的 HandlerAdapter --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <!-- 支持json返回 --> </bean> <!-- 配置控制器里的注入 --> <bean id="dao" class="commons.MyBatisDao"> <property name="sqlSessionFactory" ref="sqlSessionFactoryBean"></property> </bean> <!-- 声明DispatcherServlet不要拦截下面声明的目录 --> <mvc:resources location="/jquery/" mapping="/jquery/**" /> <!-- <mvc:resources location="/jsp/" mapping="/jsp/**" /> --> </beans>
发表评论
-
在spring-boot中使用@ConfigurationProperties
2017-10-28 19:24 1921@ConfigurationProperties注解的作用 ... -
如何在Spring Boot项目使用参数校验
2016-11-02 16:30 6552开发web项目有时候我们需要对controller层传过来的参 ... -
Spring-Boot中如何使用多线程处理任务
2016-08-25 19:36 5958[size=medium]看到这个标题,相信不少人会感到 ... -
使用SpringBoot1.4.0的一个坑
2016-08-16 10:08 7348时隔半年,再次使用Spring Boot快速搭建微服务,半 ... -
如何在Spring中注入ElasticSearch实例
2016-04-06 18:44 6301在企业级项目开发中,大多数公司都会集成Spring来简化开发 ... -
IntelliJ IDEA中使用svn遇到的小问题
2015-06-04 20:20 3481今天在用新装的IDEA 14. ... -
Spring Boot开发之弄月吟风 (三)
2015-04-27 21:11 8505今天来看下,如何在Spring Boot中使用热加载和集成V ... -
Spring Boot开发之流水无情(二)
2015-04-26 19:45 11770上篇散仙写了一个很 ... -
Spring Boot开发之明月千城(一)
2015-04-24 01:27 16608最近数据分析的项目也即将告一段落了,中间也积累了很多知识 ... -
记一次log4j日志文件小事故
2015-01-30 21:31 2502最近散仙在做公司的一个跟搜索有关的数据分析(Pig+Hadoo ... -
Struts2+Hibernate+Spring之3大框架集成小例子
2014-03-16 23:10 3622SSH框架集成,可以说是J ... -
了解HTTP协议
2014-02-23 11:08 809http协议全称超文本传 ... -
Spring项目的几种乱码问题解决思路
2014-01-12 14:33 1688与Spring结合做Web项目时,常常会出现乱码情况,这时候, ... -
配置Mybatics的XML文件的自动提示功能
2014-01-12 14:03 3344配置Mybatics的mapper文件的自动提示功能, M ... -
Spring MVC+Hibernate+Spring集成小例子
2014-01-08 20:30 4530上次,散仙给了一个关于Sping MVC注解简单的小例子,那么 ... -
Spring MVC+SimpleJdbcDaoSupport增删改查小例子
2014-01-03 17:38 2417散仙,上次给的例子是基于Spring MVC+JDBC的方式做 ... -
基于Spirng MVC注解入门
2014-01-01 23:21 1284spring2.5引入注解式处理器支持,通过@Controll ... -
Spring+Spring MVC+JDBC增删改查小例子
2014-01-01 21:52 3759此篇文章,也是作为入门时的一个小练习例子,使用的是JDBC完成 ... -
Spring MVC入门小例子
2014-01-01 21:36 3265入门Spring MVC也有一段时间了,今天写篇文章总结一下 ... -
JSP下载中文名乱码问题
2013-12-30 19:02 1272上传下载功能,几乎是 ...
相关推荐
Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)SSM源码Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)SSM源码Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)SSM源码Java EE企业级应用...
SSM(spring+spring MVC+mybatis)开发学生信息后台管理系统,实现学生增删改查功能设计一个简单的学生信息管理系统,要求使用SSM框架技术整合实现,用户登录后能够通过Web页面添加、删除、修改和查询学生信息 ...
spring mvc + spring + hibernate 全注解整合开发视频教程 06.haozip03
《基于Spring MVC+Spring+Hibernate+Bootstrap+MySQL的考勤及薪酬管理系统详解》 在现代企业信息化管理中,考勤和薪酬管理是至关重要的部分,它们直接影响到员工的工作积极性和公司的运营效率。本文将深入探讨一个...
使用环境:MyEclipse/Eclipse + Tomcat + MySQL。 使用技术:Spring MVC + Spring + MyBatis / JSP + Servlet + JavaBean + JDBC。
基于ssm(spring+spring mvc+mybatis+maven)高仿bilibili视频网站项目源码.zip 基于ssm(spring+spring mvc+mybatis+maven)高仿bilibili视频网站项目源码.zip 基于ssm(spring+spring mvc+mybatis+maven)高仿bilibili...
在本项目中,我们利用了Java技术栈中的四个核心组件:Spring MVC、Spring、Hibernate以及Bootstrap,构建了一个全面的图书管理系统。这个系统旨在提供高效、用户友好的图书管理功能,涵盖了从图书入库、检索到借阅、...
校社联社团管理系统(Spring MVC+Spring+Mybatis+Redis),用来记录进度,和保存文件,完成一定阶段都上传到小组仓库中。 校社联社团管理系统(Spring MVC+Spring+Mybatis+Redis),用来记录进度,和保存文件,完成...
这份文档名为《Java EE 框架整合开发入门到实战——Spring+Spring MVC+MyBatis(微课版)课后习题答案.pdf》,它显然是关于Java EE中流行的三个框架整合使用的教程。这三个框架分别是Spring、Spring MVC和MyBatis,...
毕设项目基于Spring + Spring MVC + Mybatis的销售管理系统源码.zip毕设项目基于Spring + Spring MVC + Mybatis的销售管理系统源码.zip毕设项目基于Spring + Spring MVC + Mybatis的销售管理系统源码.zip毕设项目...
01. 采用后台及前台的 Spring + Spring mvc + Hibernate + Bootstrap 02. 后台全注解式的开发(除了必要的spring和hibernate的xml配置以外) 03. 后台通过自定义注解结合一个访问拦截器实现整个系统的权限控制 04...
这是一个基于Java技术栈的通用后台管理系统,主要使用了Spring MVC、Spring、Hibernate、Bootstrap和Maven等技术。这些技术在IT行业中广泛应用于企业级Web应用开发,构建高效、可维护的系统。下面将分别详细解释这些...
Maven+Spring+Spring MVC+MyBatis+MySQL,搭建SSM框架环境
在本教程中,我们将深入探讨如何使用Spring MVC、Spring和Hibernate三大框架进行全注解的整合开发。这个视频教程系列的第11部分,重点可能是建立在前几部分的基础之上,进一步深化对这三个核心技术的理解和实践。 ...
这是一个基于Spring MVC、Mybatis和Spring框架实现的个人博客系统,涵盖了Web开发中的后端架构设计、数据库管理和前端展示等多个方面。以下将详细介绍这个系统的关键知识点: **1. Spring MVC** Spring MVC是Spring...
Spring MVC、Spring和Mybatis是Java开发中非常流行的三大开源框架,它们的组合,通常被称为“SSM”框架。SSM框架的使用可以极大地提高Web应用的开发效率,通过合理的解耦,使得各组件能够更好地协同工作。接下来,...
总的来说,"spring+spring mvc+mybatis框架整合实现超市货物管理系统"是一个涵盖后端开发基础技能的项目,涉及了JavaEE的多个层面,从Web层的路由处理,到业务逻辑的实现,再到数据库操作,以及用户认证和分页显示等...
在本项目中,我们主要利用Spring框架,包括其核心模块Spring、MVC模块Spring MVC以及数据访问/集成模块Spring JDBC,结合MySQL数据库来构建一个基础的登录注册系统。以下是这个项目涉及的关键技术点: 1. **Spring...
spring boot+spring mvc+spring整合开发**音乐**小程序(含简单服务端) 项目描述 spring boot+spring mvc+spring代理请求**音乐接口获取数据,然后提供给**小程序做显示 运行环境 jdk8+IntelliJ IDEA+maven ...
使用环境: MyEclipse/Eclipse + Tomcat + MySQL。...使用技术: Spring MVC + Spring + MyBatis 或 JSP + Servlet + JavaBean + JDBC。 效果:https://ymjin.blog.csdn.net/article/details/119986708