zoukankan      html  css  js  c++  java
  • 第一个随笔-——ssm框架基础架构及步骤详情

    这是我的第一个博客随笔,加油每一天,下面开始代码分享吧

    步骤一,准备工作,环境搭建,创建基础包

      1.开发环境以及数据库环境

      idea mysql 5.7.19 tomcat 9 maven 3.6

    CREATE DATABASE `ssmbuild`;
    USE `ssmbuild`; DROP TABLE IF EXISTS `books`;
    CREATE TABLE `books` (
    `bookID` INT(10) NOT NULL AUTO_INCREMENT COMMENT '书id',
    `bookName` VARCHAR(100) NOT NULL COMMENT '书名',
    `bookCounts` INT(11) NOT NULL COMMENT '数量',
    `detail` VARCHAR(200) NOT NULL COMMENT '描述',
    KEY `bookID` (`bookID`) )
    ENGINE=INNODB DEFAULT CHARSET=utf8
    INSERT INTO `books`(`bookID`,`bookName`,`bookCounts`,`detail`)
    VALUES (1,'Java',1,'从入门到放弃'), (2,'MySQL',10,'从删库到跑路'), (3,'Linux',5,'从进门到进牢');

    
    

      2.导入maven依赖

     1   <dependency>
     2             <groupId>junit</groupId>
     3             <artifactId>junit</artifactId>
     4             <version>4.11</version>
     5         </dependency>
     6         <dependency>
     7             <groupId>org.springframework</groupId>
     8             <artifactId>spring-jdbc</artifactId>
     9             <version>5.2.7.RELEASE</version>
    10         </dependency>
    11         <dependency>
    12             <groupId>mysql</groupId>
    13             <artifactId>mysql-connector-java</artifactId>
    14             <version>5.1.47</version>
    15         </dependency>
    16         <dependency>
    17             <groupId>org.springframework</groupId>
    18             <artifactId>spring-webmvc</artifactId>
    19             <version>5.2.7.RELEASE</version>
    20         </dependency>
    21         <dependency>
    22             <groupId>javax.servlet</groupId>
    23             <artifactId>servlet-api</artifactId>
    24             <version>2.5</version>
    25         </dependency>
    26         <dependency>
    27             <groupId>org.mybatis</groupId>
    28             <artifactId>mybatis</artifactId>
    29             <version>3.5.5</version>
    30         </dependency>
    31         <dependency>
    32             <groupId>org.mybatis</groupId>
    33             <artifactId>mybatis-spring</artifactId>
    34             <version>2.0.2</version>
    35         </dependency>
    36 
    37         <dependency>
    38             <groupId>javax.servlet.jsp</groupId>
    39             <artifactId>jsp-api</artifactId>
    40             <version>2.2</version>
    41         </dependency>
    42         <!-- 数据库连接池 -->
    43         <dependency>
    44             <groupId>com.mchange</groupId>
    45             <artifactId>c3p0</artifactId>
    46             <version>0.9.5.2</version>
    47         </dependency>
    48         <dependency>
    49             <groupId>javax.servlet</groupId>
    50             <artifactId>jstl</artifactId>
    51             <version>1.2</version>
    52         </dependency>
    53         <dependency>
    54             <groupId>org.projectlombok</groupId>
    55             <artifactId>lombok</artifactId>
    56             <version>1.18.12</version>
    57         </dependency>
    58         <dependency>
    59             <groupId>com.alibaba</groupId>
    60             <artifactId>fastjson</artifactId>
    61             <version>1.2.60</version>
    62         </dependency>

       3.maven资源过滤,支持外部文件引入

     1    <build>
     2         <resources>
     3             <resource>
     4                 <directory>src/main/java</directory>
     5                 <includes>
     6                     <include>**/*.properties</include>
     7                     <include>**/*.xml</include>
     8                 </includes>
     9                 <filtering>false</filtering>
    10             </resource>
    11             <resource>
    12                 <directory>src/main/resources</directory>
    13                 <includes>
    14                     <include>**/*.properties</include>
    15                     <include>**/*.xml</include>
    16                 </includes>
    17                 <filtering>false</filtering>
    18             </resource>
    19         </resources>
    20     </build>

    4.建立基本结构和配置头文件

    • com.bdqn.controller
    • com.bdqn.pojo
    • com.bdqn.service
    • com.bdqn.dao
    • mybatis-config.xml
    1 <?xml version="1.0" encoding="UTF-8" ?> 
    2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    3         "http://mybatis.org/dtd/mybatis-3-config.dtd">
    4 <configuration>
    5     
    6 </configuration>
    • applicationContext.xml
    1 <?xml version="1.0" encoding="UTF-8"?>
    2 <beans xmlns="http://www.springframework.org/schema/beans" 
    3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4        xsi:schemaLocation="http://www.springframework.org/schema/beans 
    5        http://www.springframework.org/schema/beans/spring-">
    6     
    7 </beans>

    步骤二,编写mybaits层类以及配置文件

      1.数据库配置文件数据源  database.properties

    1c3p0.username="root"

    2c3p0.password="513029"

    3c3p0.url="jdbc:mysql://localhost:3306/shopping?useUnicode=true&amp;characterEncoding=utf-8"

    4c3p0.driver="com.mysql.jdbc.Driver" 

      2.idea关联数据库

      3.编写mybatis-confil核心配置文件(一般只用取别名和设置还有映射mapper)

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE configuration
     3         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
     4         "http://mybatis.org/dtd/mybatis-3-config.dtd">
     5 <configuration>
     6     <typeAliases>
     7         <package name="com.bdqn.Pojo"/>
     8     </typeAliases>
     9     <mappers>
    10         <mapper class="com.bdqn.Mapper.UserMapper"/>
    11     </mappers>
    12 </configuration>

      4.编写对应数据库数据的实体类

      5.编写操作实体类数据的dao层mapper接口

      

    @Component
    public interface UserMapper {
    //增加一个用户
    int addUser(User user);
    //删除一个用户
    int deleteUserById(int id);
    //更改一个用户
    int updateUser(User user);
    //根据id查询用户
    User findUserById(int id);
    //查询所有用户
    List<User> findUserAll();
    //根据姓名模糊查询
    List<User> findUserByName(String username);
    }

      6.编写接口对应的mapper.xml文件(需要导入myabits包)

      

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE mapper
     3         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
     4         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     5 <mapper namespace="com.bdqn.Mapper.UserMapper">
     6     <insert id="addUser" parameterType="user" >
     7       insert into user(username, birthday, sex, address)
     8       values(#{username},#{birthday},#{sex},#{address})
     9     </insert>
    10 
    11     <delete id="deleteUserById" parameterType="int">
    12         delete from user where id=#{id}
    13     </delete>
    14     <update id="updateUser" parameterType="user">
    15         update user set
    16             username=#{username},
    17             sex=#{sex},
    18             address=#{address}
    19         where id=#{id}
    20     </update>
    21 
    22     <select id="findUserById" resultType="user" parameterType="int">
    23         select *from user where id=#{id}
    24     </select>
    25     <select id="findUserAll" resultType="user">
    26         select *from user
    27     </select>
    28     <select id="findUserByName" resultType="user" parameterType="string">
    29         select *from user where username like  #{username}
    30     </select>
    31 </mapper>

      7.编写service接口和实现类(实现业务层调用数据访问层)

     1 public interface UserService {
     2     //增加一个用户
     3     int addUser(User user);
     4     //删除一个用户
     5     int deleteUserById(int id);
     6     //更改一个用户
     7     int updateUser(User user);
     8     //根据id查询用户
     9     User findUserById(int id);
    10     //查询所有用户
    11     List<User> findUserAll();
    12     //根据姓名模糊查询
    13     List<User> findUserByName(String username);
    14 }

      8.注意:想要业务层调用dao层方法,此业务实现类中需要注册一个dao层接口的属性,给spring容器进行管理,此处使用注解实现

     1 @Service("userServiceimpl") //注册业务实现类进入spring容器
     2 public class UserServiceimpl  implements UserService {
     3     //将dao层接口 设置一个set 进行注入到spring中,统一管理
     4     @Autowired
     5     @Qualifier("userMapper")
     6     private UserMapper userMapper;
     7     public void setUserMapper(UserMapper userMapper) {
     8         this.userMapper = userMapper;
     9     }
    10 
    11     public int addUser(User user) {
    12         return userMapper.addUser(user);
    13     }
    14 
    15     public int deleteUserById(int id) {
    16         return userMapper.deleteUserById(id);
    17     }
    18 
    19     public int updateUser(User user) {
    20         return userMapper.updateUser(user);
    21     }
    22 
    23     public User findUserById(int id) {
    24         return userMapper.findUserById(id);
    25     }
    26 
    27     public List<User> findUserAll() {
    28         return userMapper.findUserAll();
    29     }
    30 
    31     public  List<User> findUserByName(String username) {
    32         return userMapper.findUserByName(username);
    33     }
    34 }

      到此,底层myabtis需求配置完毕

    步骤二,编写spring整合mybaits相关配置文件(配置dao层和service层文件)

      dao层配置文件  

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4        xmlns:context="http://www.springframework.org/schema/context"
     5        xsi:schemaLocation="http://www.springframework.org/schema/beans
     6        http://www.springframework.org/schema/beans/spring-
     7        http://www.springframework.org/schema/context
     8        https://www.springframework.org/schema/context/spring-context.xsd">
     9 
    10     <!--1.扫描包,支持注解-->
    11     <context:component-scan base-package="com.bdqn.Dao"/>
    12     <!--引用外部配置数据源的文件-->
    13     <context:property-placeholder location="database.properties"/>
    14     <!--配置数据库连接池属性-->
    15     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    16         <property name="driverClass" value=""/>
    17         <property name="jdbcUrl" value=""/>
    18         <property name="user" value=""/>
    19         <property name="password" value=""/>
    20     </bean>
    21     <!--创建工厂函数-->
    22     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    23         <property name="dataSource" ref="dataSource"/>
    24         <!--配置mybaits全局文件(相当于引用融合)-->
    25         <property name="configLocation" value="mybatis-conflg.xml"/>
    26     </bean>
    27     <!--扫描dao接口包,给该包下的接口造一个子类代理对象 动态实现接口注入到spring容器中,-->
    28     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    29         <property name="basePackage" value="com.bdqn.Dao"/>
    30     </bean>
    31     
    32     
    33     
    34 </beans>

      当然,还可以进行对应的功能增加,例如

    1   <!--全局异常处理器-->
    2     <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    3         <property name="exceptionMappings">
    4             <props>
    5                 <!--key值为 报出的异常类型,error为返回到指定的视图名,可配置多个-->
    6                 <prop key="java.lang.ClassCastException">error</prop>
    7             </props>
    8         </property>
    9     </bean>

      service配置文件(主要配置aop切入增强各类中方法,异常增强,环绕增强等)

      注:事物增加也算是一种增强,最大的优点就是可以保证事物一致性,防止出现脏数据等数据库错误

     1     <!--可以使用aop增加业务-->
     2     <context:component-scan base-package="com.bdqn.Service"/>
     3 
     4     <!--将service实现类注入进spring,可用注解实现-->
     5     <!--<bean id="userServiceimpl" class="com.bdqn.Service.impl.UserServiceimpl">-->
     6         <!--<property name="userMapper" ref="userMapper"/>-->
     7     <!--</bean>-->
     8 
     9     <!--定义事物管理器,配置声明事物,开启事物-->
    10     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    11         <property name="dataSource" ref="dataSource"/>
    12     </bean>
    13     <!--结合aop实现事物的植入-->
    14     <!--配置事物通知-->
    15     <tx:advice id="txAdvice" transaction-manager="transactionManager">
    16         <!--给那些操作数据库的方法配置事物-->
    17         <!--propagation表示事物的传播特性 redeonly表示只读-->
    18         <tx:attributes>
    19             <tx:method name="*" propagation="MANDATORY"/>
    20             <!--<tx:method name="select*" read-only="true"/>-->
    21         </tx:attributes>
    22     </tx:advice>
    23     <!--配置事物切入点,增强事物 保证事物一致性-->
    24     <aop:config>
    25         <aop:pointcut id="txPointCut" expression="execution(* com.bdqn.Service.*.*(..))"/>
    26         <!--给指定包中的所有方法添加上面定义的事物增强-->
    27         <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/>
    28     </aop:config>

     到此,spring层的配置文件编写搞定,注意一点就是:spring就是一个容器,一个大杂烩,统一管理多种

    第四步,编写前端视图展示以及web配置文件和综合spring

      web.xml

        

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
     3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4          xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
     5          version="4.0">
     6     <!--中央配置器-->
     7     <servlet>
     8         <servlet-name>springmvc</servlet-name>
     9         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    10         <init-param>
    11             <param-name>contextConfigLocation</param-name>
    12             <param-value>classpath:applicationContext.xml</param-value>
    13         </init-param>
    14     </servlet>
    15     <servlet-mapping>
    16         <servlet-name>springmvc</servlet-name>
    17         <url-pattern>/</url-pattern>
    18     </servlet-mapping>
    19     <!--乱码过滤-->
    20     <filter>
    21         <filter-name>ecoding</filter-name>
    22         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    23         <init-param>
    24             <param-name>encoding</param-name>
    25             <param-value>utf-8</param-value>
    26         </init-param>
    27     </filter>
    28     <filter-mapping>
    29         <filter-name>ecoding</filter-name>
    30         <url-pattern>/*</url-pattern>
    31     </filter-mapping>
    32     <!--session消失时间-->
    33     <session-config>
    34         <session-timeout>15</session-timeout>
    35     </session-config>
    36 </web-app>

      servlet.xml核心四个配置

     1   <!--1.扫描包,支持注解-->
     2     <context:component-scan base-package="com.bdqn.Controller"/>
     3     <!--静态资源过滤-->
     4     <mvc:default-servlet-handler/>
     5     <!--适配器,映射器,消息转换器-->
     6     <mvc:annotation-driven>
     7 
     8     </mvc:annotation-driven>
     9     <!--视图解析器-->
    10     <bean id="resolver"  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    11         <property name="prefix" value="/WEB-INF/jsp/"/> <!--后缀-->
    12         <property name="suffix" value=".jsp"/>
    13     </bean>

     另外是一些外加的功能需求配置

      文件上传

    1  <!--文件上传配置-->
    2     <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    3         <!-- 请求的编码格式,必须和jSP的pageEncoding属性一致,以便正确读取表单的内容, 默认为ISO-8859-1 -->
    4         <property name="defaultEncoding" value="utf-8"/>
    5         <!-- 上传文件大小上限,单位为字节(10485760=10M) -->
    6         <property name="maxUploadSize" value="10485760"/>
    7         <property name="maxInMemorySize" value="40960"/>
    8     </bean>

     拦截器:好处与作用详情请看拦截器博客

     1   <mvc:interceptors>
     2         <mvc:interceptor>
     3             <!--/** 包括路径及其子路径-->
     4             <!--/admin/* 拦截的是/admin/add等等这种 , /admin/add/user不会被拦截-->
     5             <!--/admin/** 拦截的是/admin/下的所有-->
     6             <mvc:mapping path="/**"/>
     7             <!--bean配置的就是拦截器项目路径-->
     8             <bean class="com.bdqn.util.MyInterceptor"/>
     9         </mvc:interceptor>
    10     </mvc:interceptors>

      解决json格式乱码

     1 <!--&lt;!&ndash;解决json乱码&ndash;&gt;-->
     2     <mvc:annotation-driven>
     3         <!--消息转换器,用于指定服务器到客户端的返回类型,以及字符编码等-->
     4         <mvc:message-converters register-defaults="true">
     5             <bean class="org.springframework.http.converter.StringHttpMessageConverter">
     6                 <constructor-arg value="UTF-8"/>
     7             </bean>
     8             <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
     9                 <property name="objectMapper">
    10                     <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
    11                         <property name="failOnEmptyBeans" value="false"/>
    12                     </bean>
    13                 </property>
    14             </bean>
    15         </mvc:message-converters>
    16     </mvc:annotation-driven>   

      整合ssm配置文件

      

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4        xsi:schemaLocation="http://www.springframework.org/schema/beans
     5        http://www.springframework.org/schema/beans/spring-">
     6 
     7     <import resource="spring-dao.xml"/>
     8     <import resource="spring-service.xml"/>
     9     <import resource="spring-web.xml"/>
    10 </beans>

    到此,整个ssm配置到此结束,下面就是一些view视图层的代码

      编写controller类

     1 @Controller
     2 @RequestMapping("/user")
     3 public class UserController {
     4 
     5 
     6     @Autowired
     7     @Qualifier("userService")
     8     private  UserService userService;
     9 
    10     public void setUserService(UserService userService) {
    11         this.userService = userService;
    12     }
    13 //    @ModelAttribute  //表示比所有请求先被中央控制器调用执行,多用于初始化参数
    14 //    public void t1(){
    15 //
    16 //    }
    17 ////    public void t2(@ModelAttribute("")表示引用前面定义的初始化参数,或者与requetparme一样获取指定的参数值)
    18 
    19 
    20     @RequestMapping("toLogin")
    21     public String toLogin(){
    22         return "Login";
    23     }
    24     @RequestMapping("Login")
    25     public String Login(User user, HttpServletRequest request,@RequestParam("file") CommonsMultipartFile file){
    26         //进行得到返回的行数
    27         int num=userService.getUser(user);
    28         if (num!=0){
    29             //如果成功登录,则保存session中
    30             request.getSession().setAttribute("isLogin",user);
    31         }
    32         return "list";
    33     }
    34 
    35 
    36 }

    编写拦截器,实现类(保证除了登录以外的请求全部拦截,验证用户是否已登录)

     1 public class MyInterceptor implements HandlerInterceptor {
     2     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
     3         System.out.println("----------处理请求前,进行拦截判断---------");
     4         //判断是为登录页面,就放行,以防强制访问,或者没登录就访问
     5         if (request.getRequestURI().contains("Login")){
     6             System.out.println("拦截失败");
     7             return true;
     8         }
     9 
    10         //如果检测到用户已登录,那么就直接放行,不进行截断
    11         if (request.getSession().getAttribute("isLogin")!=null){
    12             System.out.println("拦截失败");
    13             return true;
    14         }
    15         System.out.println("成功进行拦截");
    16         //反之如果没有登录,强制地址栏越级访问,则跳转到登录页面
    17         request.getRequestDispatcher("toLogin").forward(request,response);
    18         return false;
    19     }
    20 }
    最后进行测试
    要看日出必须守到拂晓。
  • 相关阅读:
    sharepoint更新
    生成Log日志文件.NET
    sharepoint绑定
    sharepoint多表查询
    数据库导入
    sharepoint插入数据
    协方差矩阵求解算法分析
    .NET提供的加密算法概述
    掩耳盗铃之使用WebBrowser封装网页
    C#委托BeginInvoke返回值乱序问题
  • 原文地址:https://www.cnblogs.com/sunlang369/p/13492963.html
Copyright © 2011-2022 走看看