SSM框架CRUD练习-基础环境搭建

SSM框架CRUD练习-基础环境搭建

1.创建maven工程

对于其中的maven进行配置

在apache-maven-3.8.4\conf/settings.xml中添加:

(1)在<mirrors>下添加阿里云的镜像文件

<mirror>

<id>nexus-aliyun</id>

<mirrorOf>central</mirrorOf>

<name>Nexus aliyun</name>

<url>http://maven.aliyun.com/nexus/content/groups/public</url>

</mirror>

(2)在<profiles>下添加该配置,设置jdk版本,我的版本是jdk11

<profile>

<id>JDK11</id>

<activation>

<activeByDefault>true</activeByDefault>

<jdk>11</jdk>

</activation>

<properties>

<maven.compiler.source>11</maven.compiler.source>

<maven.compiler.target>11</maven.compiler.target>

<maven.compiler.compilerVersion>11</maven.compiler.compilerVersion>

</properties>

</profile>

2.引入项目依赖的jar包

  • spring
  • springmvc
  • mybatis
  • 数据库连接池,驱动包
  • 其他包(jstl,servlet-api,junit.....)

(1)spring-webmvc

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.16</version>
</dependency>

(2)spring-jdbc

<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.16</version>
</dependency>

(3)spring-aspects

<!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.3.16</version>
</dependency>

(4)mybatis

<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.2</version>
</dependency>

(5)mybatis-spring整合适配包

<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>

(6)数据库连接池、驱动


<!-- 数据库连接池c3p0、驱动 -->
<!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>

(7) 其他包(jstl,servlet-api,junit)
<!-- https://mvnrepository.com/artifact/jstl/jstl -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>

<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>

<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<scope>test</scope>
</dependency>

(8)MBG mybatis代码生成器

<!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>

(9)SpringTest

<!-- SpringTest -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>

3.引入bootstrap前端框架

在https://v3.bootcss.com/getting-started/#download中下载Bootstrap

在webapp中创建static文件夹存放下载bootstrap-3.4.1-dist的css、fonts、js和在js文件夹加入jquery-1.12.4.min.js文件

在index.jsp中head中添加

(1)<!-- 最新版本的 Bootstrap 核心 CSS 文件 --><link rel="stylesheet" href="static/bootstrap-3.4.1-dist/css/bootstrap.min.css"
integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">

(2)<!-- 最新的 Bootstrap 核心 JavaScript 文件 -->

<script src="static/bootstrap-3.4.1-dist/js/bootstrap.min.js"

integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin="anonymous"></script>

(3)引入jquery

<script type="text/javascript" src="static/js/jquery-1.12.4.min.js"></script>

4.编写ssm整合的关键配置文件

web.xml、spring、springmvc、mybatis,使用mybatis的逆向工程生成对应的bean以及mapper

(1)web.xml的配置

 1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app id="WebApp_ID" version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"> 3 <!-- 1、启动Spring的容器 --> 4 <context-param> 5     <param-name>contextConfigLocation</param-name> 6     <param-value>classpath:applicationContext.xml</param-value> 7 </context-param> 8  9 <!-- 2、配置springmvc的前端控制器,拦截所有请求 -->10 <!-- 配置前端控制器DispatcherServlte,该类在spring-webmvc.jar包中,配置的目录是把用户的所有请求都教给springmvc框架来处理 -->11     <servlet>12         <servlet-name>DispatcherServlet</servlet-name>13         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>14         <!-- 当启动springmvc时,默认回到WEB-INF/目录下查找名称为DispatcherServlet-servlet.xml作为框架的核心配置文件进行加载 -->15         <!-- 为了提高springMVC框架的核心配置文件的灵活性,我们可以通过给该前端控制器配置初始化参数,来改变配置文件的位置即名称修改 -->16         <init-param>17             <!--contextConfigLocation初始化属性名称来指定Springmvc框架的核心配置文件及路径 -->18             <param-name>contextConfigLocation</param-name>19             <param-value>classpath:springmvc.xml</param-value>20         </init-param>21     </servlet>22     <servlet-mapping>23         <servlet-name>DispatcherServlet</servlet-name>24         <!-- 对外映射的访问路径"/"表示把所有的用户请求都交给springMVC框架来处理,主要不要写成"/*" -->25         <url-pattern>/</url-pattern>26     </servlet-mapping>27 <!-- 3、配置springmvc编码过滤器 -->    28     <!-- 为了解决乱码,我们可以配置编码的过滤器 ,该编码的过滤器在spring-web。jar中 -->29     <filter>30         <filter-name>CharacterEncodingFilter</filter-name>31         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>32         <!-- 配置相关的初始化参数,如采用的编码,请求及响应等属性 -->33         <init-param>34             <param-name>encoding</param-name><!-- 编码格式 -->35             <param-value>UTF-8</param-value>36         </init-param>37         <init-param>38             <param-name>forceRequestEncoding</param-name><!-- 请求编码 -->39             <param-value>true</param-value>40         </init-param>41         <init-param>42             <param-name>forceResponseEncoding</param-name><!-- 响应编码 -->43             <param-value>true</param-value>44         </init-param>45 46     </filter>47     <filter-mapping>48         <filter-name>CharacterEncodingFilter</filter-name>49         <url-pattern>/*</url-pattern>50     </filter-mapping>51     <welcome-file-list>52       <welcome-file>index.jsp</welcome-file>53     </welcome-file-list>54 <!-- 4配置普通请求转变 -->    55     <!-- 配置HiddenHttpMethodFilter 将普通post请求转换为指定的delete或者put请求-->56      <filter>57         <filter-name>hiddenHttpMethodFilter</filter-name>58         <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>59     </filter>60     <filter-mapping>61         <filter-name>hiddenHttpMethodFilter</filter-name>62         <url-pattern>/*</url-pattern>63     </filter-mapping>64 65 </web-app>

(2)springmvc.xml配置

 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans"   3        xmlns:mvc="http://www.springframework.org/schema/mvc"   4        xmlns:context="http://www.springframework.org/schema/context"   5        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   6        xsi:schemaLocation="http://www.springframework.org/schema/beans   7             http://www.springframework.org/schema/beans/spring-beans-3.2.xsd   8             http://www.springframework.org/schema/context   9             http://www.springframework.org/schema/context/spring-context-3.2.xsd  10             http://www.springframework.org/schema/mvc  11             http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">12            <!-- 1.配置开启基于注解的类扫描的注解解析器,主要针对#Controller,@Service,@Repository,@Component注解 -->13            <context:component-scan base-package="com.lijian"/>14            <!-- 2.配置开启基于注解方法的依赖的注解解析器配置,主要针对@Autowire,@Resource注解 -->15            <context:annotation-config/>16            <!-- 3.配置开启SpringMVC基于注解的处理器映射器和处理器适配器的解析器配置 -->17            <mvc:annotation-driven/>18            <!-- 4.配置视图解析器,目的是把逻辑视图解析为一个具体的物理视图,该类在spring-webmvc.jar包中 -->19            <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">20                    <!-- 通过配置属性来配置映射的规则 -->21                     <!-- 配置前缀属性prefix -->22                     <property name="prefix" value="/WEB-INF/views/"/>23                     <!-- 配置后缀属性 -->24                     <property name="suffix" value=".jsp"/>25            </bean>26            27            <!-- 需要配置自定义视图的解析器,该类名称为:org.springframework.web.servlet.view.BeanNameViewResolver,该类在springMVC.jar包中 -->28            <!-- 在一个应用中配置了多个视图解析器,其执行顺序可以通过该视图解析器配置一个order属性来指定,默认order的值为整型的最大值,其值越小表示执行的优先级越高 -->29            <bean class="org.springframework.web.servlet.view.BeanNameViewResolver">30                    <property name="order" value="100">31                            32                    </property>33            </bean>34            35            <mvc:view-controller path="/" view-name="index"></mvc:view-controller>36           <mvc:default-servlet-handler/>37           <!--支持springmvc更高级一些的功能,JSR303校验,快捷ajax... 映射动态请求-->38            <!-- 开启mvc的注解驱动 -->39            <mvc:annotation-driven/>40                       41 </beans>

(3)spring配置

 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:aop="http://www.springframework.org/schema/aop"  5 xmlns:tx="http://www.springframework.org/schema/tx"  6 xmlns:context="http://www.springframework.org/schema/context"  7 xsi:schemaLocation="  8        http://www.springframework.org/schema/beans  9        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 10        http://www.springframework.org/schema/tx 11        http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 12        http://www.springframework.org/schema/context 13        http://www.springframework.org/schema/context/spring-context-3.0.xsd 14        http://www.springframework.org/schema/aop 15        http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> 16        <context:component-scan base-package="com.lijian">17             <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>18        </context:component-scan>19 <!-- Spring配置文件,这里主要配置和业务逻辑有关的 -->   20 <!-- ==================数据源,事务控制,xxx==================== -->    21 <context:property-placeholder location="classpath:dbconfig.properties"/>22      <bean id="pooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">23          <property name="jdbcUrl" value="${url}"></property>24          <property name="driverClass" value="${driver}"></property>25          <property name="user" value="${userame}"></property>26          <property name="password" value="${password}"></property>27      </bean>  28      29 <!--====================== 配置和mybatis整合 ===============-->30 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">31     <!-- 指定mybatis全局配置文件的位置 -->32     <property name="configLocation" value="classpath:mybatis-config.xml"></property>33     <property name="dataSource" ref="pooledDataSource"></property>34     <!-- 指定mybatis,mapper文件的位置 -->35     <property name="mapperLocations" value="classpath:mapper/*.xml"></property>36 </bean>37        <!-- 配置扫描器,将mybatis接口的实现加入到ioc容器 -->38        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">39  <!-- 扫描所有dao接口的实现,加入到ioc容器中 -->40        <property name="basePackage" value="com.lijian.crud.dao"></property>41        </bean>42 <!--================== 事务控制的配置======================-->43 44 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">45 <!-- 控制住数据源 -->46     <property name="datasource" ref="pooledDataSource"></property>47 </bean>48 49 <!-- 开启基于注解的事务,使用xml配置形式的事务(必要主要的都是使用配置式) -->50 <aop:config>51     <!-- 切入点表达式 -->52     <aop:pointcut expression="execution(* com.lijian.crud.service..*(..))" id="txPoint"/>53     <!-- 配置增强类 -->54     <aop:advisor advice-ref="txAdvice" pointcut-ref="txPoint"/>55 </aop:config>56 <!-- 配置事务,事务如何切入 -->57 <tx:advice id="txAdvice">58     <tx:attributes>59     <!-- 所有方法都是事务方法 -->60         <tx:method name="*"/>61         <!-- 以get开始的所有方法 -->62         <tx:method name="get" read-only="true"/>63     </tx:attributes>64 </tx:advice>65 <!-- Spring配置文件的核心点(数据源,与mybatis的整合,事务控制) -->66        67 </beans>

(4)使用mybatis的逆向工程生成对应的bean以及mapper

第一步注入对应的jar依赖mybatis-generator

https://mybatis.org/generator/running/runningWithJava.html查看开始生成bean和dao方法

第二步找到文档中xml配置文件示例,并在项目右键xml创建mbg.xml配置文件,修改配置内容

 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE generatorConfiguration 3   PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" 4   "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> 5  6 <generatorConfiguration> 7  8   <context id="DB2Tables" targetRuntime="MyBatis3"> 9   <!-- 配置数据库文件信息 -->10     <jdbcConnection11 driverClass="com.mysql.cj.jdbc.Driver"12 connectionURL="jdbc:mysql://localhost:3306/ssm_crud?characterEncoding=utf8&amp;serverTimezone=UTC"13 userId="root"14 password="root"/>15 16 17     <javaTypeResolver >18       <property name="forceBigDecimals" value="false" />19     </javaTypeResolver>20 <!--指定javaBean生成位置  -->21     <javaModelGenerator targetPackage="com.lijian.crud.bean" 22     targetProject=".\src\main\java">23       <property name="enableSubPackages" value="true" />24       <property name="trimStrings" value="true" />25     </javaModelGenerator>26 <!-- 指定sql映射文件生成的位置 -->27     <sqlMapGenerator targetPackage="mapper"  28     targetProject=".\src\main\resources">29       <property name="enableSubPackages" value="true" />30     </sqlMapGenerator>31 <!-- 指定dao接口生成位置,mapper接口 -->32     <javaClientGenerator type="XMLMAPPER" targetPackage="com.lijian.crud.dao" 33      targetProject=".\src\main\java">34       <property name="enableSubPackages" value="true" />35     </javaClientGenerator>36 <!-- table指定每个表的生成策略 -->37     <table schema="DB2ADMIN" tableName="tbl_emp" domainObjectName="Employee" />38     <table schema="DB2ADMIN" tableName="tbl_dept" domainObjectName="Department" />39   </context>40 </generatorConfiguration>

在配置<!-- 配置数据库文件信息 -->时

connectionURL="jdbc:mysql://localhost:3306/ssm_crud?characterEncoding=utf8&amp;serverTimezone=UTC"
需要加上时区信息,并用&amp;连接,这是xml配置信息,所有得按照这种格式

第三步:创建测试信息,执行方法

 1 public static void main(String[] args) throws Exception { 2           List<String> warnings = new ArrayList<String>(); 3            boolean overwrite = true; 4            File configFile = new File("mbg.xml"); 5            ConfigurationParser cp = new ConfigurationParser(warnings); 6            Configuration config = cp.parseConfiguration(configFile); 7            DefaultShellCallback callback = new DefaultShellCallback(overwrite); 8            MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings); 9            myBatisGenerator.generate(null);10     }

执行之后,会根据配置信息,在对应位置自动生成实体类与其对应的dao接口

可向mbg.xml中的<context>中前面添加

<commentGenerator>  <property name="suppressDate" value="true" /></commentGenerator>
取消生成注释属性
工程文件分布如图:

第四步:修改完善自动生成文件,将两表联合起来

在employee表中添加

private Department department;

以及setter、getter方法

在EmployeeMapper.java中添加

List<Employee> selectByExampleWithDept(EmployeeExample example);

Employee selectByPrimaryKeyWithDept(Integer empId);

在EmployeeMapper.xml中添加对应是sql实现语句

 1     <!-- 带部门信息的结果集合 --> 2     <resultMap id="WithDeptResultMap" 3     type="com.lijian.crud.bean.Employee" > 4     <id column="emp_id" jdbcType="INTEGER" property="empId" /> 5         <result column="emp_name" jdbcType="VARCHAR" property="empName" /> 6         <result column="gender" jdbcType="CHAR" property="gender" /> 7         <result column="email" jdbcType="VARCHAR" property="email" /> 8         <result column="d_id" jdbcType="INTEGER" property="dId" /> 9         <!-- 指定联合查询出部门字段的封装 -->10         <association property="department" javaType="com.lijian.crud.bean.Department">11             <id column="dept_id" property="deptId"/>12             <result column="dept_name" property="deptName"/>13         </association>14     </resultMap>

 1     <select id="selectByExampleWithDept"> 2         select 3         <if test="distinct"> 4             distinct 5         </if> 6         <include refid="Base_Column_List" /> 7         from tbl_emp 8         left join tbl_dept on tbl_emp.d_id=tbl_dept.dept_id 9         <if test="_parameter != null">10             <include refid="Example_Where_Clause" />11         </if>12         <if test="orderByClause != null">13             order by ${orderByClause}14         </if>15     </select>
1     <select id="selectByPrimaryKeyWithDept">2         parameterType="java.lang.Integer" resultMap="BaseResultMap">3         select4         <include refid="WithDept_Column_list" />5         from tbl_emp6         left join tbl_dept on tbl_emp.d_id=tbl_dept.dept_id7         where emp_id = #{empId,jdbcType=INTEGER}8     9     </select>
第五步测试:

在com.lijian.crud.controller中添加测试类,测试是否配置正常,生成的逆向工程是否能运行

 1 package com.lijian.crud.test; 2 import org.junit.Test; 3 import org.junit.runner.RunWith; 4 import org.springframework.beans.factory.annotation.Autowired; 5 import org.springframework.test.context.ContextConfiguration; 6 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 7  8 import com.lijian.crud.dao.DepartmentMapper; 9 import com.lijian.crud.dao.EmployeeMapper;10 @RunWith(SpringJUnit4ClassRunner.class)11 @ContextConfiguration(locations ="classpath:applicationContext.xml")12 public class MapperTest {13     /**14      * 测试15      * 推荐String项目就可以使用Spring单元测试,可以自动注入我们需要的组件16      *1. 导入SpringTest模块17      *2.@ContextConfiguration指定spring配置文件的位置18      *3.直接Autowired19      */20     @Autowired21     DepartmentMapper departmentMapper;22     @Autowired23     EmployeeMapper employeeMapper;24     @Test25     public void testCRUD() {26         //1.创建SpringIOC容器27         //ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");28         //2.从容器中获取mapper29         //ioc.getBean(DepartmentMapper.class);30         System.out.println(departmentMapper);31         System.out.println(employeeMapper);32     }33 34 }

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部