• 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端,这个框架都能应付的来。
    大家假设感兴趣就下载看看。假设感觉不错,嘿嘿。点个赞。

  • 相关阅读:
    CSS-DAY03
    Java语言支持的8种基本数据类型
    Linux目录结构
    面向对象的四个基本特征
    使用AVADA头部有搜索icon怎么去掉?
    在ubuntu 上使用apt-get安装 任意版本
    ubuntu 14.04 nginx 1.12.2 配置https遇见的坑
    java Process执行linux命令
    node.js 接收上传的文件
    node.js 进行http get 向服务端请求
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/7183266.html
Copyright © 2020-2023  润新知