SpringMVC+Hibernate+Junit4+json基本框架近乎0配置
公司是做APP开发的,须要后台来提供接口,于是乎,这个任务就交给我,经过重复的尝试,学习和參考别人的demo,最终搭出自己还算惬意的框架。SpringMVC+Sping3+Hibernate4+Junit4,没有使用Maven。以下一步一步的搭建吧!
首先是选择jar包,我把我用到的jar包上传到了网上,点我下载
我使用的事Eclipse,创建好webDynamic project之后。把lib直接粘贴到webcontent下就ok了。
第一步,配置web.xml。一切请求和初始化都是经过web.xml,代码为
<servlet>
<servlet-name>spring</servlet-name>
<!-- servlet文件配置 -->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:spring-servlet.xml
</param-value>
</init-param>
<!-- 优先级,正数越小,优先级越高,假设同样,则按顺序载入 -->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 请求拦截,仅仅要是带".do"的请求,都被拦截到此 -->
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
接下来是spring上下文配置文件
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
開始spring的配置
applicationContext.xml
<!-- 扫描注解配置的包 -->
<context:component-scan base-package="com.dw.*" />
<!-- 配置Spring 用于以后制作Web端的页面-->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/view/" />
<property name="suffix" value=".jsp" />
</bean>
<!-- 配置数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<!-- 后期需更改 -->
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/db_dw" />
<property name="user" value="root" />
<property name="password" value="root" />
<!-- 初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。
Default:3 -->
<property name="initialPoolSize" value="1" />
<!-- 连接池中保留的最小连接数 -->
<property name="minPoolSize" value="1" />
<!-- 连接池中保持的最大连接数。Default:15 -->
<property name="maxPoolSize" value="300" />
<!-- 最大空暇时间,60秒内未使用则被丢弃。若为0则永不丢弃。Default:0 -->
<property name="maxIdleTime" value="60" />
<!-- 当连接池中的连接耗尽的时候c3p0一次性同一时候获取的连接数。Default:3 -->
<property name="acquireIncrement" value="5" />
<!-- 每60秒检查全部连接池中的空暇连接。Default:0 -->
<property name="idleConnectionTestPeriod" value="60" />
</bean>
<bean id="nativeJdbcExtractor"
class="org.springframework.jdbc.support.nativejdbc.C3P0NativeJdbcExtractor">
</bean>
<!-- hibernate4的配置 -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="annotatedClasses">
<list>
<!-- 带有注解的实体类
<value>com.dw.entity.User</value>
<value>com.dw.entity.Test</value>
<value>com.dw.entity.StrTest</value>
-->
<!-- <value>tv.ssdm.haoxiang.bean.WlBean</value> -->
<!-- <value>tv.ssdm.haoxiang.bean.WmBean</value> -->
<!-- <value>tv.ssdm.haoxiang.bean.WsBean</value> -->
<!-- <value>tv.ssdm.haoxiang.bean.XHSItemBean</value> -->
<!-- <value>tv.ssdm.haoxiang.bean.THItemBean</value> -->
</list>
</property>
<property name="hibernateProperties">
<value>
property name=”dialect”>org.hibernate.dialect.MySQL5Dialect
hibernate.hbm2ddl.auto=update
hibernate.show_sql=false
hibernate.format_sql=true
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%使用EHCache二级缓存%%%%%%%%%%%%%%%%%%%%%%%%%% -->
hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
hibernate.cache.use_query_cache=true;
<!-- hibernate4Session -->
hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext
</value>
</property>
</bean>
<!-- 事务配置 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="txManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 使用基于注解方式管理事务 -->
<tx:annotation-driven transaction-manager="txManager" />
<tx:advice id="txAdvice"><!-- 默认引用 transactionManager -->
<tx:attributes>
<!-- 方法名以add开头,必须开启事务 -->
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="insert*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
<aop:config>
<!-- com.dw包下 全部名字以I*Service结尾的类中 全部方法 -->
<aop:pointcut expression="execution(* com.dw..*Service.*(..))"
id="allServiceMethod" />
<!-- 为 allServiceMethod 增强 txAdvice -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="allServiceMethod" />
</aop:config>
<!-- spring 依赖注入 -->
<!-- 该 BeanPostProcessor 将自己主动对标注 @Autowired 的 Bean 进行注入 srping2.5之后 -->
<bean
class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />
这里的service,dao,controller全部使用注解的方式,就是为了降低配置操作
spring-servlet.xml文件
<!-- 指定使用注解方式配置,配置自己主动扫描的包名。base-package指定自己应用中控制器所在的包文件夹<context:component-scan/>
扫描指定的包中的类上的注解,经常使用的注解有:@Controller 声明Action逐渐@Service声明Service 声明Action组件@Services
声明Service组件@Service("myMovieLister") @Repository 声明Dao组件@Component泛指组件,当不好归类时。@RequestMapping("/menu")请求映射
@Resource用于注入,(j2ee提供)默认按名称装配。@Resource(name ="beanName")@Autowired用于注入,(spring提供的)
默认按类型装配@Transactional(rollbackFor = {Exception.class})事物管理@ResponseBody @scope("prototype")设定成bean的作用域 -->
<!-- 扫描注解配置的包 -->
<context:component-scan base-package="com.dw.controller" />
<!-- 默认的注解映射的支持 -->
<!-- 日期全局转换配置,注冊自己实现的DateConverter类 -->
<bean id="conversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="com.dw.common.DateConverter"></bean>
</list>
</property>
</bean>
最后就是hibernate.cfg.xml
<hibernate-configuration>
<session-factory>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="connection.url">jdbc:mysql://localhost:3306/db_dw</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="myeclipse.connection.profile">db_dw</property>
<!-- 在控制台显示hibernate执行的sql -->
<property name="show_sql">false</property>
<property name="format_sql">true</property>
<!-- 映射 -->
<!-- 假设数据库里没有数据表,则创建 -->
<!-- create-drop|create|update|validate -->
<property name="hibernate.hbm2ddl.auto">update</property>
<mapping class="com.dw.entity.Test"/>
<mapping class="com.dw.entity.User" />
<mapping class="com.dw.entity.StrTest"/>
</session-factory>
</hibernate-configuration>
实体使用注解的方式后,还是要配置mapping,题目中所谓的达不到0配置就是在这里。每加入一个类,就须要在这里mapping一个。可是相比較不适用注解的方式,这样降低了好多操作!
整个框架的代码结构例如以下
Controllser里写了一个測试请求。打印出的事gson格式的数据,由于是为手机端提供接口,所以。gson格式的数据是首选。代码为:
@Controller
@RequestMapping(value="/test")
public class TestController {
@Autowired
TestService testService;
@Autowired
UserService userService;
@RequestMapping(value="/add")
public String add(HttpServletRequest request, HttpServletResponse response) throws Exception{
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
int id = 1;
User user = userService.findById(id);
Test test = new Test();
test.setRemark("加入备注");
test.setUser(user);
testService.addTest(test);
out.print("加入用户");
return null;
}
@RequestMapping(value="/list")
public String list(HttpServletRequest request, HttpServletResponse response) throws Exception{
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
List<Test> test = testService.list();
Gson g = new Gson();
out.print(g.toJson(test));
return null;
}
}
注意链接的格式,。
。。
。
。/test/list.do
里面还有Junit測试
这样不管是为手机端专门编写接口。还是后来在加入web端,这个框架都能应付的来。
大家假设感兴趣就下载看看。假设感觉不错,嘿嘿。点个赞。
SpringMVC+Hibernate+Junit4+json基本框架近乎0配置的更多相关文章
- Maven搭建SpringMVC+Hibernate项目详解 【转】
前言 今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这 ...
- 框架篇:Spring+SpringMVC+hibernate整合开发
前言: 最近闲的蛋疼,搭个框架写成博客记录下来,拉通一下之前所学知识,顺带装一下逼. 话不多说,我们直接步入正题. 准备工作: 1/ IntelliJIDEA的安装配置:jdk/tomcat等..(本 ...
- springMVC系列之(四) spring+springMVC+hibernate 三大框架整合
首先我们要知道Hibernate五大对象:,本实例通过深入的使用这五大对象和spring+springMVC相互结合,体会到框架的好处,提高我们的开发效率 Hibernate有五大核心接口,分别是:S ...
- 项目总结SpringMVC+hibernate框架 web.xml 分析(2)
紧接 项目总结SpringMVC+hibernate框架 原理(MVC) applicationContext.xml 文件(3) 这一步讲解项目模块化的配置,项目中每个模块配置一个文件,命名规则为 ...
- SSH(Spring SpringMVC Hibernate)框架整合
项目说明: 使用SSH(Spring SpringMVC Hibernate)框架整合添加部门功能 项目结构 1.导入依赖jar包 <!--单测--> <dependency&g ...
- Maven搭建简单的SPring+SpringMVC+Hibernate框架
公司的项目用到的框架是Spring+SpringMVC+Hibernate 以前没有用过,所以要系统的学习一下,首先要学会怎么搭建 第一步 创建一个Maven的web项目 创建方法以前的博客中有提 ...
- springmvc框架(Spring SpringMVC, Hibernate整合)
直接干货 model 考虑给用户展示什么.关注支撑业务的信息构成.构建成模型. control 调用业务逻辑产生合适的数据以及传递数据给视图用于呈献: view怎样对数据进行布局,以一种优美的方式展示 ...
- Maven搭建SpringMVC+Hibernate项目详解(转)
前言 今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这 ...
- springmvc+hibernate
<本文摘要他人> 1.设计数据库:设计好表结构,最好符合3NF,采用Hibernate tools将设计好的表自动生成对应的实体entity. 1.创建Maven项目,按需映入Maven包 ...
随机推荐
- 运行外部exe
bool CFileOperate::lauchCAD() { //启动ZWCAD CString OutputPath; STARTUPINFO si; //一些必备参数设置 memset(& ...
- django 127.0.0.1 将您重定向的次数过多
"GET /?next=/%3Fnext%3D/%253Fnext%253D/ HTTP/1.1" 302 0 solution reference from django.con ...
- 一套出完被喷爆的noip提高组+的题目
这是一个悲伤的故事. 校内胡测嘛,这当然的重视啦,好好地出完题,看题面不是很难哦,那就用它吧. 结果今天老师考试就用上了(情况不妙) 果然考试过程中就有打喷嚏的冲动. 一道暴力,一道概率DP,一道主席 ...
- 洛谷P1035 级数求和
#include <iostream> using namespace std; int main(){ long k,i; cin >> k; double s=0.0; ; ...
- luogu2261 [CQOI2007]余数求和
除法分块. 猜想: 记 \(g(x)=\lfloor k / \lfloor k / x\rfloor \rfloor\),则对于 \(i \in [x,g(x)]\),\(\lfloor k / i ...
- 大数据学习——linux常用命令(五)
1 挂载外部存储设备 可以挂载光盘.硬盘.磁带.光盘镜像文件等 1/ 挂载光驱 mkdir /mnt/cdrom 创建一个目录,用来挂载 mount -t iso9660 -o ro / ...
- NYOJ-104最大和(动归题)及连续最大和核心
最大和 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 给定一个由整数组成二维矩阵(r*c),现在需要找出它的一个子矩阵,使得这个子矩阵内的所有元素之和最大,并把这个子矩 ...
- [luoguP2420] 让我们异或吧(dfs + 异或的性质)
传送门 因为异或满足结合律和交换律. a^b^b=a 所以这个题直接求根节点到每个点路径上的异或值. 对于每组询问直接输出根到两个点的异或值的异或的值. ——代码 #include <cstdi ...
- 【ZJOI2017 Round1练习】
喜闻乐见(爆蛋滚粗)的ZJOI模拟赛终于开始了 可以又一次感受被屠的快感 DAY1: T1:线段树打错-70 正解分块听卡常还要调块的大小 T2:数学弱爆 是道结论题 T3:暴力分滚粗 DAY2: T ...
- BZOJ2097: [Usaco2010 Dec]Exercise 奶牛健美操
n<=100000的树,砍S<n条边,求砍完后S+1棵树的最大直径的最小值. 树的直径要小小哒,那考虑一棵子树的情况吧!一棵子树的直径,就是子树根节点各儿子的最大深度+次大深度.就下面这样 ...