曼巴精神#24(24小时都要努力)

曼巴精神#24 if you really want it , go go go!!!

SpringMVC基础03

1   开发环境

数据库:mysql5.5以上版本。

Jdk:1.7

开发环境:Eclipsemars2

Spring:4.2.4

Mybatis:3.2.7

Tomcat:7

2   数据库

数据库使用mysql 数据库。

1、创建crm数据库

2、将参考资料中的sql脚本导入到数据库中

 

3   工程搭建

工程使用Springmvc、spring、mybatis框架整合完成。

 

Dao层:SqlMapConfig.xml(空)

       applicationContext-dao.xml:数据库连接池、SqlSessionFactory、Mapper的扫描器。

Service层:

    配置包扫描器,扫描所有带@Service注解的类。事务管理器、切面。

表现层:

       Springmvc.xml:包扫描器@Controller、配置注解驱动、视图解析器。

       Jsp:bootstrap

Web.xml:配置spring监听器,前端控制器。

3.1  SqlMapConfig.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>

 

</configuration>

3.2  applicationContext-dao.xml

<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"

     xmlns:task="http://www.springframework.org/schema/task"

     xsi:schemaLocation="http://www.springframework.org/schema/beans

         http://www.springframework.org/schema/beans/spring-beans-4.2.xsd

         http://www.springframework.org/schema/mvc

         http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd

         http://www.springframework.org/schema/context

         http://www.springframework.org/schema/context/spring-context-4.2.xsd

         http://www.springframework.org/schema/aop

         http://www.springframework.org/schema/aop/spring-aop-4.2.xsd

         http://www.springframework.org/schema/tx

         http://www.springframework.org/schema/tx/spring-tx-4.2.xsd

         http://www.springframework.org/schema/task

          http://www.springframework.org/schema/task/spring-task-4.2.xsd">

 

     <!-- 配置 读取properties文件 jdbc.properties -->

     <context:property-placeholder location="classpath:jdbc.properties" />

 

     <!-- 配置 数据源 -->

     <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">

         <!-- 驱动 -->

         <property name="driverClassName" value="${jdbc.driver}" />

         <!-- url -->

         <property name="url" value="${jdbc.url}" />

         <!-- 用户名 -->

         <property name="username" value="${jdbc.username}" />

         <!-- 密码 -->

         <property name="password" value="${jdbc.password}" />

     </bean>

 

     <!-- 配置 Mybatis的工厂 -->

     <bean class="org.mybatis.spring.SqlSessionFactoryBean">

         <!-- 数据源 -->

         <property name="dataSource" ref="dataSource" />

         <!-- 配置Mybatis的核心 配置文件所在位置 -->

         <property name="configLocation" value="classpath:SqlMapConfig.xml" />

         <!-- 配置pojo别名 -->

         <property name="typeAliasesPackage" value="cn.itcast.core.bean"></property>

     </bean>

 

     <!-- 配置 1:原始Dao开发 接口实现类 Mapper.xml 三个 2:接口开发 接口 不写实现类 Mapper.xml 二个 (UserDao、ProductDao

         、BrandDao。。。。。。。) 3:接口开发、并支持扫描 cn.itcast.core.dao(UserDao。。。。。) 写在此包下即可被扫描到 -->

     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">

         <property name="basePackage" value="cn.itcast.core.dao" />

     </bean>

 

</beans>

 

Jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/crm?characterEncoding=utf-8

jdbc.username=root

jdbc.password=root

3.3  applicationContext-service.xml

<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"

     xmlns:task="http://www.springframework.org/schema/task"

     xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"

     xsi:schemaLocation="http://www.springframework.org/schema/beans

         http://www.springframework.org/schema/beans/spring-beans-4.2.xsd

         http://www.springframework.org/schema/mvc

         http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd

         http://www.springframework.org/schema/context

         http://www.springframework.org/schema/context/spring-context-4.2.xsd

         http://www.springframework.org/schema/aop

         http://www.springframework.org/schema/aop/spring-aop-4.2.xsd

         http://www.springframework.org/schema/tx

         http://www.springframework.org/schema/tx/spring-tx-4.2.xsd

         http://www.springframework.org/schema/task

          http://www.springframework.org/schema/task/spring-task-4.2.xsd

         http://code.alibabatech.com/schema/dubbo       

         http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

        

        

         <!-- 配置  扫描   @Service -->

         <context:component-scan base-package="cn.itcast.core.service"/>

        

        

        

</beans>

 

3.4  applicationContext-trans.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

     xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"

     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"

     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd

     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd

     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd

     http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd">

     <!-- 事务管理器 -->

     <bean id="transactionManager"

         class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

         <!-- 数据源 -->

         <property name="dataSource" ref="dataSource" />

     </bean>

     <!-- 通知 -->

     <tx:advice id="txAdvice" transaction-manager="transactionManager">

         <tx:attributes>

              <!-- 传播行为 -->

              <tx:method name="save*" propagation="REQUIRED" />

              <tx:method name="insert*" propagation="REQUIRED" />

              <tx:method name="add*" propagation="REQUIRED" />

              <tx:method name="create*" propagation="REQUIRED" />

              <tx:method name="delete*" propagation="REQUIRED" />

              <tx:method name="update*" propagation="REQUIRED" />

              <tx:method name="find*" propagation="SUPPORTS" read-only="true" />

              <tx:method name="select*" propagation="SUPPORTS" read-only="true" />

              <tx:method name="get*" propagation="SUPPORTS" read-only="true" />

         </tx:attributes>

     </tx:advice>

     <!-- 切面 -->

     <aop:config>

         <aop:advisor advice-ref="txAdvice"

              pointcut="execution(* cn.itcast.core.service.*.*(..))" />

     </aop:config>

</beans>

3.5  Springmvc.xml

<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"

     xmlns:task="http://www.springframework.org/schema/task"

     xsi:schemaLocation="http://www.springframework.org/schema/beans

         http://www.springframework.org/schema/beans/spring-beans-4.2.xsd

         http://www.springframework.org/schema/mvc

         http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd

         http://www.springframework.org/schema/context

         http://www.springframework.org/schema/context/spring-context-4.2.xsd

         http://www.springframework.org/schema/aop

         http://www.springframework.org/schema/aop/spring-aop-4.2.xsd

         http://www.springframework.org/schema/tx

         http://www.springframework.org/schema/tx/spring-tx-4.2.xsd

         http://www.springframework.org/schema/task

          http://www.springframework.org/schema/task/spring-task-4.2.xsd">     

         <!-- 加载属性文件 -->

         <context:property-placeholder location="classpath:resource.properties"/>

         <!-- 配置扫描 器 -->

         <context:component-scan base-package="cn.itcast.core.web.controller"/>

         <!-- 配置处理器映射器  适配器 -->

         <mvc:annotation-driven/>

        

         <!-- 配置视图解释器 jsp -->

         <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">

              <property name="prefix" value="/WEB-INF/jsp/"/>

              <property name="suffix" value=".jsp"/>

         </bean>

        

</beans>

 

3.6  Web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"

     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

     <welcome-file-list>

         <welcome-file>customer.action</welcome-file>

     </welcome-file-list>

     <!-- 上下文的位置 -->

     <context-param>

         <param-name>contextConfigLocation</param-name>

         <param-value>classpath:applicationContext-*.xml</param-value>

     </context-param>

     <!-- Spring的监听器 -->

     <listener>

         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

     </listener>

 

 

     <!-- POST提交过滤器 UTF-8 -->

     <filter>

         <filter-name>encoding</filter-name>

         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

         <init-param>

              <param-name>encoding</param-name>

              <param-value>UTF-8</param-value>

         </init-param>

     </filter>

 

     <filter-mapping>

         <filter-name>encoding</filter-name>

         <url-pattern>*.action</url-pattern>

     </filter-mapping>

     <!-- 前端控制器 -->

     <servlet>

         <servlet-name>crm</servlet-name>

         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

         <init-param>

              <param-name>contextConfigLocation</param-name>

              <!-- 此处不配置 默认找 /WEB-INF/[servlet-name]-servlet.xml -->

              <param-value>classpath:springmvc.xml</param-value>

         </init-param>

         <load-on-startup>1</load-on-startup>

     </servlet>

     <servlet-mapping>

         <servlet-name>crm</servlet-name>

         <!-- 1:*.do *.action 拦截以.do结尾的请求 (不拦截 jsp png jpg .js .css) 2:/ 拦截所有请求

              (不拦截.jsp) 建议使用此种 方式 (拦截 .js.css .png) (放行静态资源) 3:/* 拦截所有请求(包括.jsp) 此种方式 不建议使用 -->

         <url-pattern>*.action</url-pattern>

     </servlet-mapping>

</web-app>

 

 

3.7  加入jsp及分页标签

Tld文件需要放到WEB-INF目录下, tomcat的规定。当tomcat启动时会自动加载。

Jsp中使用标签:

 

4   查询条件初始化

4.1  需求

初始化查询条件下拉列表。

 

4.2  Sql

SELECT * from base_dict WHEREdict_type_code='006'

4.3  Dao

<?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.itheima.crm.dao.BaseDictDao">

     <select id="getBaseDictList" parameterType="string" resultType="BaseDict">

         SELECT * from base_dict WHERE dict_type_code=#{typeCode}

     </select>

</mapper>

 

4.4  Service

@Service

publicclass BaseDictServiceImpl implements BaseDictService {

 

     @Autowired

     private BaseDictDao baseDictDao;

    

     @Override

     public List<BaseDict> getBaseDictList(String typeCode) {

         List<BaseDict> list = baseDictDao.getBaseDictList(typeCode);

         returnlist;

     }

 

}

 

4.5  Controller

规则:子容器可以访问父容器的对象,父容器不能访问子容器的对象。

publicclass CustomerController {

    

     @Autowired

     private BaseDictService baseDictService;

     @Value("${customer.source.code}")

     private String CustomerSourceCode;

     @Value("${customer.industry.code}")

     private String CustomerIndustryCode;

     @Value("${customer.level.code}")

     private String CustomerLevelCode;

 

     @RequestMapping("/list")

     public String showCustomerList(Model model) {

         //查询字典表初始化下拉列表

         List<BaseDict> custSourceList = baseDictService.getBaseDictList(CustomerSourceCode);

         List<BaseDict> custIndustryList = baseDictService.getBaseDictList(CustomerIndustryCode);

         List<BaseDict> custLevelList = baseDictService.getBaseDictList(CustomerLevelCode);

         //把列表传递给jsp页面

         model.addAttribute("fromType", custSourceList);

         model.addAttribute("industryType", custIndustryList);

         model.addAttribute("levelType", custLevelList);

         

         return"customer";

     }

}

 

5   客户列表展示

5.1  需求

展示商品列表,并且可以根据查询条件过滤查询结果,并且实现分页处理。

 

5.2  Sql

SELECT

       a.cust_id,

       a.cust_name,

       a.cust_user_id,

       a.cust_create_id,

       b.dict_item_name cust_source,

       c.dict_item_name cust_industry,

       d.dict_item_name cust_level,

       a.cust_linkman,

       a.cust_phone,

       a.cust_mobile,

       a.cust_zipcode,

       a.cust_address,

       a.cust_createtime

FROM

       customer a

LEFT JOIN base_dict b ON a.cust_source = b.dict_id

LEFT JOIN base_dict c ON a.cust_industry = c.dict_id

LEFT JOIN base_dict d ON a.cust_level = d.dict_id

WHERE

       cust_name LIKE '%马%'

AND cust_source = 6

AND cust_industry = 2

AND cust_level = 22

 

5.3  Dao

<select id="getCustList" parameterType="QueryVo" resultType="customer">

         SELECT

              a.cust_id,

              a.cust_name,

              a.cust_user_id,

              a.cust_create_id,

              b.dict_item_name cust_source,

              c.dict_item_name cust_industry,

              d.dict_item_name cust_level,

              a.cust_linkman,

              a.cust_phone,

              a.cust_mobile,

              a.cust_zipcode,

              a.cust_address,

              a.cust_createtime

         FROM

              customer a

         LEFT JOIN base_dict b ON a.cust_source = b.dict_id

         LEFT JOIN base_dict c ON a.cust_industry = c.dict_id

         LEFT JOIN base_dict d ON a.cust_level = d.dict_id

         <where>

              <if test="custName!=null and custName!=''">

                   AND  cust_name LIKE '%${custName}%'

              </if>

              <if test="custSource!=null and custSource!=''">

                   AND cust_source = #{custSource}

              </if>

              <if test="custIndustry!=null and custIndustry!=''">

                   AND cust_industry = #{custIndustry}

              </if>

              <if test="custLevel!=null and custLevel!=''">

                   AND cust_level = #{custLevel}

              </if>

         </where>

         LIMIT #{start},#{rows}

     </select>

 

增加count后的dao

<mapper namespace="com.itheima.crm.dao.CustomerDao">

    

     <sql id="cust_query_where">

         <where>

              <if test="custName!=null and custName!=''">

                   AND  cust_name LIKE '%${custName}%'

              </if>

              <if test="custSource!=null and custSource!=''">

                   AND cust_source = #{custSource}

              </if>

              <if test="custIndustry!=null and custIndustry!=''">

                   AND cust_industry = #{custIndustry}

              </if>

              <if test="custLevel!=null and custLevel!=''">

                   AND cust_level = #{custLevel}

              </if>

         </where>

     </sql>

    

     <select id="getCustList" parameterType="QueryVo" resultType="customer">

         SELECT

              a.cust_id,

              a.cust_name,

              a.cust_user_id,

              a.cust_create_id,

              b.dict_item_name cust_source,

              c.dict_item_name cust_industry,

              d.dict_item_name cust_level,

              a.cust_linkman,

              a.cust_phone,

              a.cust_mobile,

              a.cust_zipcode,

              a.cust_address,

              a.cust_createtime

         FROM

              customer a

         LEFT JOIN base_dict b ON a.cust_source = b.dict_id

         LEFT JOIN base_dict c ON a.cust_industry = c.dict_id

         LEFT JOIN base_dict d ON a.cust_level = d.dict_id

         <include refid="cust_query_where"/>

         LIMIT #{start},#{rows}

     </select>

     <select id="getCustListCount" parameterType="QueryVo" resultType="int">

         SELECT count(*)

         FROM

              customer a

         LEFT JOIN base_dict b ON a.cust_source = b.dict_id

         LEFT JOIN base_dict c ON a.cust_industry = c.dict_id

         LEFT JOIN base_dict d ON a.cust_level = d.dict_id

         <include refid="cust_query_where"/>

     </select>

</mapper>

 

5.4  Service

根据查询条件查询数据库得到客户列表。分页条件。

接收查询条件QueryVo接收,使用page接收页码。

1、通过page计算start。

2、调用dao查询客户列表。

3、做count处理。计算出此查询条件中共查询到多少条记录。

 

返回结果:Page对象。

条件:QueryVo

@Service

publicclass CustomerServiceImpl implements CustomerService {

 

     @Autowired

     private CustomerDao customerDao;

    

     @Override

     public Page<Customer> getCustList(QueryVo queryVo) {

queryVo.setStart((queryVo.getPage() - 1) * queryVo.getRows());

         List<Customer> custList = customerDao.getCustList(queryVo);

         Page<Customer> page = new Page<Customer>();

         //设置客户列表

         page.setRows(custList);

         page.setPage(queryVo.getPage());

         page.setSize(queryVo.getRows());

         //计算查询总记录数

         inttotal = customerDao.getCustListCount(queryVo);

         page.setTotal(total);

         returnpage;

     }

 

}

 

5.5  Controller

5.5.1   分析

1、接收页面提交的查询参数:

保证jsp页面提交的表单中的input 的name属性和QueryVo中的属性一致

2、调用Service查询客户列表

3、把客户列表传递给页面。



@RequestMapping("/list")

     public String showCustomerList(Model model, QueryVo queryVo) throws Exception {

        

         String custName = queryVo.getCustName();

         if (custName != null && !"".equals(custName)) {

              custName = new String(custName.getBytes("iso8859-1"), "utf-8");

              queryVo.setCustName(custName);

         }

         //查询字典表初始化下拉列表

         List<BaseDict> custSourceList = baseDictService.getBaseDictList(CustomerSourceCode);

         List<BaseDict> custIndustryList = baseDictService.getBaseDictList(CustomerIndustryCode);

         List<BaseDict> custLevelList = baseDictService.getBaseDictList(CustomerLevelCode);

         //查询客户列表

         Page<Customer> page = customerService.getCustList(queryVo);

         //把page放到request中

         model.addAttribute("page", page);

        

         //把列表传递给jsp页面

         model.addAttribute("fromType", custSourceList);

         model.addAttribute("industryType", custIndustryList);

         model.addAttribute("levelType", custLevelList);

        

         //页面回显

         model.addAttribute("custName", queryVo.getCustName());

         model.addAttribute("custSource", queryVo.getCustSource());

         model.addAttribute("custIndustry", queryVo.getCustIndustry());

         model.addAttribute("custLevel", queryVo.getCustLevel());

        

        

         return"customer";

     }

 

 

6   修改客户信息

6.1  需求

1、点击客户列表中的“修改”按钮弹出客户信息修改对话框,并初始化客户信息

2、点击“保存修改”按钮将修改后的结果保存到数据库中

 

6.2  展示客户信息

 

6.2.1   分析

请求的url:

customer/edit.action

参数:cust_id客户id

返回值:响应json数据,直接由Customer转换而来。需要使用@ResponseBody注解。

 

6.2.2   Dao层

根据客户id查询客户信息。

<select id="getCustomerById" parameterType="long" resultType="customer">

         select * from customer where cust_id = #{custId}

     </select>

 

6.2.3   Service层

     @Override

     public Customer getCustomerById(longcustId) {

         Customer customer = customerDao.getCustomerById(custId);

         returncustomer;

     }

 

6.2.4   Controller

要求返回json数据

请求的url:

customer/edit.action

参数:cust_id客户id

返回值:响应json数据

@RequestMapping("/edit")

     @ResponseBody

     public Customer getCustomerById(Long id) {

         Customer customer = customerService.getCustomerById(id);

         return customer;

     }

 

 

6.3  提交修改

6.3.1   分析

请求的url:customer/update.action

请求的方法:post

参数:表单中的数据。

返回结果:OK

 

6.3.2   Dao层

<update id="updateCustomerById" parameterType="customer">

         UPDATE customer

         <set>

              <if test="cust_name!=null">

              cust_name=#{cust_name},

              </if>

              <if test="cust_user_id!=null">

              cust_user_id=#{cust_user_id},

              </if>

              <if test="cust_create_id!=null">

              cust_create_id=#{cust_create_id},

              </if>

              <if test="cust_source!=null">

              cust_source=#{cust_source},

              </if>

              <if test="cust_industry!=null">

              cust_industry=#{cust_industry},

              </if>

              <if test="cust_level!=null">

              cust_level=#{cust_level},

              </if>

              <if test="cust_linkman!=null">

              cust_linkman=#{cust_linkman},

              </if>

              <if test="cust_phone!=null">

              cust_phone=#{cust_phone},

              </if>

              <if test="cust_mobile!=null">

              cust_mobile=#{cust_mobile},

              </if>

              <if test="cust_zipcode!=null">

              cust_zipcode=#{cust_zipcode},

              </if>

              <if test="cust_address!=null">

              cust_address=#{cust_address},

              </if>

              <if test="cust_createtime!=null">

              cust_createtime=#{cust_createtime},

              </if>

         </set>

         WHERE

              cust_id = #{cust_id}

     </update>

6.3.3   Service层

@Override

     publicvoid updateCustomerById(Customer customer) {

         customerDao.updateCustomerById(customer);

     }

 

6.3.4   Controller

接收参数:Customer接收。

响应结果:OK字符串。使用@ResponseBody

请求的url:customer/update.action

@RequestMapping(value="/update", method=RequestMethod.POST)

     @ResponseBody

     public String updateCustomer(Customer customer) {

         customerService.updateCustomerById(customer);

         //直接向浏览器响应字符串需要使用@ResponseBody

         return"OK";

        

     }

 

7   删除客户

7.1  需求

点击客户列表中的删除按钮,提示“警告信息”

点击确定后删除用户信息,并刷新页面。

 

分析:

请求的url:customer/delete.action

参数:id(客户id)

响应的内容:OK(字符串需要使用@ResponseBody)

阅读更多
版权声明:如需转载请注明出处,侵权必究!!! https://blog.csdn.net/mambaMentality/article/details/80344170
个人分类: springMVC
想对作者说点什么? 我来说一句

springMVC基础03

2018年05月16日 15.3MB 下载

SpringMVC基础(仅供参考)

2018年03月28日 17.75MB 下载

没有更多推荐了,返回首页

不良信息举报

SpringMVC基础03

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭