第一个随笔-——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 }
最后进行测试
posted @ 2020-08-12 21:02  浪里小白龙er  阅读(525)  评论(0)    收藏  举报