前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >idea-ssm项目实战(二)

idea-ssm项目实战(二)

作者头像
用户5224393
发布2019-08-13 15:06:23
1.9K0
发布2019-08-13 15:06:23
举报
文章被收录于专栏:Java研发军团Java研发军团

前面我们已经在idea上手工搭建好了maven项目,这一章节开始整合ssm框架以及mybatis分页插件和mvc框架的单元测试。现在首先要下载相关的依赖jar,大家一般都是使用阿里云下载,现在就来配置一下。

1.maven配置阿里云

一般maven大家都会使用阿里云下载jar到本地,现在来说说配置阿里云下载。阿里云下载需要在maven中配置,这个配置也非常简单,首先找到maven的sttings.xml文件,在mirrors标签下输入以下代码即可:

代码语言:javascript
复制
<mirror> 
     <id>alimaven</id> 
     <name>aliyun maven</name> 
     <url>http://maven.aliyun.com/nexus/content/groups/public/</url> 
     <mirrorOf>central</mirrorOf> 
</mirror>

以上使用的maven是3.5.2版本,下载地址:

链接:https://pan.baidu.com/s/1tZoe3oRFW_ZFm5K8EBnPWA 密码:mu2m

2.导入相关的依赖jar包

1.spring mvc 2.spring jdbc 3.spring aspects 4.mybatis 5.mybatis整合包 6.mysql驱动包 7.mybatis分页插件 8.数据库连接池,druid或者其它连接池 9.jstl,servlet-api,junit,jackson

以上的相关jar直接可以到http://mvnrepository.com/地址去直接搜索,如图:

将上面的每个核心jar都找到依赖代码复制到pom.xml文件中之后,Idea会自动下载相关的依赖jar包。

下面来看看pom.xml文件代码:

代码语言:javascript
复制
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!--mybatis-->
        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.10</version>
        </dependency>

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

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.5</version>
        </dependency>
        <!--分页-->
        <!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.0.0</version>
        </dependency>

3.创建各个配置文件以及包名

  1. mybatis.xml
  2. applicationContext.xml
  3. springmvc.xml
  4. db.properties
  5. log4j.properties

创建类文件包名

  1. com.adu.crud.controller
  2. com.adu.crud.dao
  3. com.adu.crud.entity
  4. com.adu.crud.service
  5. com.adu.crud.utils

还有一个测试的包,这个就随便取了。下面就开始整合了。详情见问题源码

4.spring整合mybatis

mybatis.xml代码很简单,配置了一个别名和一个分页插件的拦截器

代码语言:javascript
复制
<!--取别名-->
    <typeAliases>
        <package name="com.adu.crud.entity"/>
    </typeAliases>

    <plugins>
        <!-- com.github.pagehelper为PageHelper类所在包名 -->
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
            <!--调整分页合理化-->
            <property name="reasonable" value="true"/>
        </plugin>
    </plugins>

现在来看spring的配置文件applicationContext.xml,最基本的配置如下:

1.数据源

2.整合mybatis

3.注解扫描

4.事务管理器

5.读取外部的链接字符串配置文件

applicationContext.xml代码如下:

代码语言:javascript
复制
<!--读取配置文件-->
    <context:property-placeholder location="classpath:db.properties"/>
    <!--扫描service包-->
    <context:component-scan base-package="com.adu.crud.service"/>

    <!--设置数据源-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>


    <!--整合mybatis-->
    <bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:mybatis/mybatis.xml"/>
    </bean>

    <!--设置一个批量的操作-->
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactoryBean"/>
        <constructor-arg name="executorType" value="BATCH"/>
    </bean>

    <!--配置扫描器-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.adu.crud.dao"/>
    </bean>

    <!-- 事务管理器 -->
    <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:method name="query*" propagation="SUPPORTS" read-only="true" />
        </tx:attributes>
    </tx:advice>

    <!-- 切面 -->
    <aop:config>
        <aop:advisor advice-ref="txAdvice"
                     pointcut="execution(* com.adu.crud.service.*.*(..))" />
    </aop:config>

5.测试程序

1.现在为了测试我们首先需要创建一个数据库和表(员工表和部门表两个有主外键关系),创建2个实体类,类的属性与数据库的字段类似。详情见问题源码

2.创建一个EmployeeMapper.xml文件,记住没有在mybatis.xml中引入该文件时,需要将EmployeeMapper.xml创造dao包下和对应的接口放在一起并且名称也要一致。为了简单就写了一个查询方法。这里会用的一对一查询。

代码语言:javascript
复制
<resultMap id="employeeAll" type="Employee">
   <id column="emp_id" property="empId"/>
   <result column="emp_name" property="empName"/>
   <result column="gender" property="gender"/>
   <result column="gender" property="gender"/>
   <result column="dept_id" property="deptId"/>
   <result column="email" property="email"/>

   <association property="department" javaType="Department">
     <id column="dept_id" property="deptId"/>
     <result column="dept_name" property="deptName"/>
   </association>
 </resultMap>

 <select id="findALL" parameterType="EmployeeVo" resultMap="employeeAll">
   SELECT a.*,b.dept_name FROM t_emp a
   LEFT JOIN t_dept b ON a.dept_id=b.dept_id
 </select>

3.在entity包下创建2个员工和部门的实体类,属性需要和数据库中字段类似

4.在dao包下创建一个EmployeeMapper接口,写上一个findALL查询所有的方法。

5.在service包中创建对应的业务类,以及在controller包中创建一个对应控制器(对应的访问路径为/employee/find)。

代码语言:javascript
复制
@RequestMapping("/find")
    public String findALL(@RequestParam(value = "pageIndex",defaultValue = "1")
                                   Integer pageIndex, Model model) throws Exception {
        PageHelper.startPage(pageIndex, pageSize);
        List<EmployeePoJo> employees = employeeService.findALL(null);
        //用PageInfo对结果进行包装,每次连续显示为5页
        PageInfo<EmployeePoJo> page = new PageInfo<>(employees,5);
        model.addAttribute("pageInfo",page);
        return "emplist";
    }

好了准备工作做好了现在开始编写测试代码了。

由于需要测试mvc所以需要使用到MockMvc、WebApplicationContext类,以及测试的相关注解@RunWith,@WebApplicationContext,@ContextConfiguration

测试程序代码:

代码语言:javascript
复制
//使用spring的测试
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
//加载spring容器
@ContextConfiguration(locations = {
        "classpath:spring/applicationContext.xml",
        "classpath:spring/springmvc.xml"})
public class MvcTest {
    /**
     * 传入SpringMVC的ioc
     */
    @Autowired
    WebApplicationContext context;

    private MockMvc mockMvc;

    @Before
    public void init() {
        mockMvc = MockMvcBuilders.webAppContextSetup(context).build();
    }

    @Test
    public void testMvc() throws Exception {

        //模拟请求拿到返回值
        MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/employee/find").
                param("pageIndex", "1")).andReturn();
        //得到request中的pageInfo值
        PageInfo pageInfo = (PageInfo) mvcResult.getRequest().getAttribute("pageInfo");
        System.out.println("当前页码:"+pageInfo.getPageNum());
        System.out.println("总页码:"+pageInfo.getPages());
        System.out.println("总记录数"+pageInfo.getTotal());
        System.out.println("当前页码显示页码号");
        int[] number = pageInfo.getNavigatepageNums();
        for (int num : number) {
            System.out.print(num+",");
        }
        System.out.println("数据源:"+pageInfo.getList());
    }
}

测试结果:

源代码地址公众号输入"ssm实战二"

是不是很简单,以上有什么错误希望大家指出,好了今天先写到这里,后期会持续更新这个实战的。

END

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-08-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java研发军团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档