前面我们已经在idea上手工搭建好了maven项目,这一章节开始整合ssm框架以及mybatis分页插件和mvc框架的单元测试。现在首先要下载相关的依赖jar,大家一般都是使用阿里云下载,现在就来配置一下。
一般maven大家都会使用阿里云下载jar到本地,现在来说说配置阿里云下载。阿里云下载需要在maven中配置,这个配置也非常简单,首先找到maven的sttings.xml文件,在mirrors标签下输入以下代码即可:
<mirror>
<id>alimavenid>
<name>aliyun mavenname>
<url>http://maven.aliyun.com/nexus/content/groups/public/url>
<mirrorOf>centralmirrorOf>
mirror>以上使用的maven是3.5.2版本,下载地址:
链接:https://pan.baidu.com/s/1tZoe3oRFW_ZFm5K8EBnPWA 密码:mu2m
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文件代码:
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-jdbcartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-aspectsartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-testartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>3.4.1version>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatis-springartifactId>
<version>1.3.1version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.38version>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druidartifactId>
<version>1.1.10version>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>3.1.0version>
<scope>providedscope>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>jstlartifactId>
<version>1.2version>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
<scope>testscope>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-databindartifactId>
<version>2.9.5version>
dependency>
<dependency>
<groupId>com.github.pagehelpergroupId>
<artifactId>pagehelperartifactId>
<version>5.0.0version>
dependency>mybatis.xml
applicationContext.xml
springmvc.xml
db.properties
log4j.properties
创建类文件包名
com.adu.crud.controller
com.adu.crud.dao
com.adu.crud.entity
com.adu.crud.service
com.adu.crud.utils
还有一个测试的包,这个就随便取了。下面就开始整合了。详情见问题源码
mybatis.xml代码很简单,配置了一个别名和一个分页插件的拦截器
<typeAliases>
<package name="com.adu.crud.entity"/>
typeAliases>
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<property name="reasonable" value="true"/>
plugin>
plugins>现在来看spring的配置文件applicationContext.xml,最基本的配置如下:
1.数据源
2.整合mybatis
3.注解扫描
4.事务管理器
5.读取外部的链接字符串配置文件
applicationContext.xml代码如下:
<context:property-placeholder location="classpath:db.properties"/>
<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>
<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>1.现在为了测试我们首先需要创建一个数据库和表(员工表和部门表两个有主外键关系),创建2个实体类,类的属性与数据库的字段类似。详情见问题源码
2.创建一个EmployeeMapper.xml文件,记住没有在mybatis.xml中引入该文件时,需要将EmployeeMapper.xml创造dao包下和对应的接口放在一起并且名称也要一致。为了简单就写了一个查询方法。这里会用的一对一查询。
<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)。
@RequestMapping("/find")
public String findALL(@RequestParam(value = "pageIndex",defaultValue = "1")
Integer pageIndex, Model model) throws Exception {
PageHelper.startPage(pageIndex, pageSize);
Listemployees = employeeService.findALL(null);
//用PageInfo对结果进行包装,每次连续显示为5页
PageInfopage = new PageInfo<>(employees,5);
model.addAttribute("pageInfo",page);
return "emplist";
} 好了准备工作做好了现在开始编写测试代码了。
由于需要测试mvc所以需要使用到MockMvc、WebApplicationContext类,以及测试的相关注解@RunWith,@WebApplicationContext,@ContextConfiguration
测试程序代码:
//使用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实战二"
是不是很简单,以上有什么错误希望大家指出,好了今天先写到这里,后期会持续更新这个实战的。











还没有评论,来说两句吧...