本文共 8951 字,大约阅读时间需要 29 分钟。
首先进行SSM框架的配置
导入SSM相应的jar包,然后对项目进行分包
书写javaBean并在数据库中建立数据库表,插入测试数据
Dept类
package cn.qblank.entity;public class Dept { private Long id; private String deptName; private String deptSubject; private Long deptManager_id; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getDeptName() { return deptName; } public void setDeptName(String deptName) { this.deptName = deptName; } public String getDeptSubject() { return deptSubject; } public void setDeptSubject(String deptSubject) { this.deptSubject = deptSubject; } public Long getDeptManager_id() { return deptManager_id; } public void setDeptManager_id(Long deptManager_id) { this.deptManager_id = deptManager_id; } @Override public String toString() { return "Dept [id=" + id + ", deptName=" + deptName + ", deptSubject=" + deptSubject + ", deptManager_id=" + deptManager_id + "]"; }}
数据库中表的数据结构和数据如下:
准备数据库连接的连接配置jdbc.properties
jdbc.user=root jdbc.password=root jdbc.driverClass=com.mysql.jdbc.Driver jdbc.jdbcUrl=jdbc:mysql:///ssm
定义配置类AppConfig进行Spring-Mybatis以及Spring-SpringMVC的配置:
package cn.qblank.config;import javax.sql.DataSource;import org.mybatis.spring.SqlSessionFactoryBean;import org.mybatis.spring.annotation.MapperScan;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.PropertySource;import org.springframework.core.env.Environment;import org.springframework.core.io.ClassPathResource;import org.springframework.jdbc.datasource.DataSourceTransactionManager;import org.springframework.jdbc.datasource.DriverManagerDataSource;import org.springframework.transaction.PlatformTransactionManager;import org.springframework.transaction.annotation.EnableTransactionManagement;import org.springframework.web.servlet.ViewResolver;import org.springframework.web.servlet.config.annotation.EnableWebMvc;import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;import org.springframework.web.servlet.view.InternalResourceViewResolver;import org.springframework.web.servlet.view.JstlView;@Configuration //配置注解@ComponentScan("cn.qblank") //扫描整个项目包@EnableTransactionManagement //开启事务管理@PropertySource("classpath:/jdbc.properties") //加载数据源@MapperScan("cn.qblank.dao.mapper") //扫描mapper下的类和xml@EnableWebMvc //开启静态资扫描public class AppConfig extends WebMvcConfigurerAdapter{ //********Spring-mybatis的配置******** /** * 创建SqlSession工厂bean * @param dataSource */ @Bean public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){ SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(dataSource); sqlSessionFactoryBean.setConfigLocation(new ClassPathResource("mybatis-config.xml")); return sqlSessionFactoryBean; } /** * 依赖Environment获取数据源 * @return DriverManagerDataSource */ @Bean public DataSource dataSource(Environment env){ DriverManagerDataSource dsManager = new DriverManagerDataSource(); dsManager.setDriverClassName(env.getProperty("jdbc.driverClass")); dsManager.setUrl(env.getProperty("jdbc.jdbcUrl")); dsManager.setUsername(env.getProperty("jdbc.user")); dsManager.setPassword(env.getProperty("jdbc.password")); return dsManager; } /** * 事务管理 * @param dataSource * @return */ @Bean public PlatformTransactionManager platformTransactionManager(DataSource dataSource){ //创建事务管理类 DataSourceTransactionManager dst = new DataSourceTransactionManager(); dst.setDataSource(dataSource); return dst; } //**********Spring-SpringMVC的配置********** //负责将控制器方法返回的字符串映射到某个JSP @Bean public ViewResolver viewResolver(){ InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); //使其支持jsp及标准taglib viewResolver.setViewClass(JstlView.class); viewResolver.setPrefix("/WEB-INF/jsp/"); viewResolver.setSuffix(".jsp"); return viewResolver; } //映射路径 @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/assets/**").addResourceLocations("/public/"); } }
在mybatis-config.xml中设置类的别名
定义dao的接口DeptMapper
package cn.qblank.dao.mapper;import java.util.List;import cn.qblank.entity.Dept;public interface DeptMapper { /** * 查询所有员工 */ List使用DeptMapper.xml来实现接口findAllDept();}
定义Service层接口,并在其实现类中调用dao层方法
package cn.qblank.service.impl;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import cn.qblank.dao.mapper.DeptMapper;import cn.qblank.entity.Dept;import cn.qblank.service.IDeptService;@Servicepublic class DeptServiceImpl implements IDeptService{ @Autowired private DeptMapper deptMapper; @Override public List在web.xml中配置Springmvc的入口findAllDept() { return deptMapper.findAllDept(); } }
dispatcherServlet org.springframework.web.servlet.DispatcherServlet contextClass org.springframework.web.context.support.AnnotationConfigWebApplicationContext contextConfigLocation cn.qblank.config.AppConfig dispatcherServlet /
引入jsTree的主题样式以及js文件dist,该文件可以在官网进行下载 https://www.jstree.com/,将该文件放入public文件夹里面,并通过配置类AppConfig配置映射路径,配置如上面的AppConfig类
在WEB-INF下的/jsp文件夹下建立jsp静态资源test.jsp,在jsp中引入主题样式,jquery还有jsTree的js文件(注意,jquery文件要先引入,因为jsTree的js是基于jquery来开发的),然后在后面引入自身写的js文件getData.js
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>jsTree树 jstree树
通过getData.js想后台通过ajax进行异步请求json数据
//准备数据格式/*var deptData = [ {id: 1, text: '市场部', parent: '#'}, {id: 2, text: '开发部', parent: '#'}, {id: 3, text: '行政人事部', parent: '#', icon: 'fa fa-address-book'}, {id: 4, text: '咨询中心', parent: '1'}, {id: 5, text: 'Java部', parent: '2'}, {id: 6, text: 'IOS部', parent: '2'}];*///使用ajax获取数据 .表示当前路径$.ajax(".",{ method:"GET", dataType:"json", //数据类型}).done(function(data){ //获取数据data,json转换为js数组 //加载数据 $('#jstree_demo_div').jstree({ core: { data:{ url: '.' } } });});
定义Controller层,接收到请求,从后台获取数据,并将数据以json的格式发送出去,由上面需要的格式来看,我们只需要获取三个数据
1.id :树的编号
2.text: 树的内容
3.parent: 树的父节点(注意:第一个树必须为'#')
而后台却会传过来很多数据,于是我们可以用一个对象Page封装需要的数据
package cn.qblank.controller;public class Page { private Long id; private String text; private String parent; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getText() { return text; } public void setText(String text) { this.text = text; } public String getParent() { return parent; } public void setParent(String parent) { this.parent = parent; } }然后我们在Controller先获取数据,然后将数据封装,然后将封装的用json的格式发送出去
package cn.qblank.controller;import java.util.ArrayList;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.http.MediaType;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.ResponseBody;import cn.qblank.entity.Dept;import cn.qblank.entity.Employee;import cn.qblank.service.IDeptService;import cn.qblank.service.IEmployeeService;@Controller //专用于控制层public class EmployeeController { @Autowired private IDeptService deptService; @RequestMapping(value = "/depts", produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody //将响应的格式转换为json格式 public List加载页面的结果如下:getDepts(){ List depts = deptService.findAllDept(); System.out.println(depts); List pages = new ArrayList<>(); //获取所得数据,并进行处理 for (Dept dept : depts) { Page page = new Page(); page.setId(dept.getId()); page.setText(dept.getDeptName()); page.setParent(dept.getDeptManager_id().toString()); pages.add(page); } pages.get(0).setParent("#"); //将第一层树的parent结点初始化为'#' pages.get(1).setParent("#"); return pages; } //跳转测试页面test.jsp @RequestMapping(value = "/depts/detail") public String getPage(){ return "test"; }}
由于本人第一次配置SSM项目,导致配置了很久才将SSM配置好,其中也找出了一些常见错误以及习惯,在以下列出来:
1.不要忘记打注解,这是Spring的依赖,不打注解时可能会包空指针异常
2.在web项目是,加载jdbc.properties的时候需要加上classpath:/jdbc.propertis
3.在加载数据源配置时:
1)在这里配置连接配置时需要借助Environment类进行配置
2)这里不要像配置SSH时习惯性地加上${},如果加上了,这时会报DriverClassName must not's be empty这样的错误。
4.注意包的导入,在这么多包中肯定会有包与java本身包有冲突,所以注意这一点
5.注意不要一次性编码,每配置好一步,注意进行单元测试,例如配置好Spring-mybatis时,不要急于去配置SpringMVC,先测试Spring+mybatis是否能成功运行,保证不会带着错误进行下一步。
6.保持细心,不要打错类名,实在不行就进行拷贝,防止错误。
以上就是我的一些小小的错误总结,希望能给你们带来帮助。