首先进行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中设置类的别名
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<package name="cn.qblank.entity" />
</typeAliases>
</configuration>
定义dao的接口DeptMapper
package cn.qblank.dao.mapper;
import java.util.List;
import cn.qblank.entity.Dept;
public interface DeptMapper {
/**
* 查询所有员工
*/
List<Dept> findAllDept();
}
使用DeptMapper.xml来实现接口
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.qblank.dao.mapper.DeptMapper">
<!-- 查询所有员工以及其部门 -->
<select id="findAllDept" resultType="Dept">
select * from t_dept
</select>
</mapper>
定义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;
@Service
public class DeptServiceImpl implements IDeptService{
@Autowired
private DeptMapper deptMapper;
@Override
public List<Dept> findAllDept() {
return deptMapper.findAllDept();
}
}
在web.xml中配置Springmvc的入口
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<!-- 配置SpringMVC -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!-- 用那种容器 -->
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</init-param>
<!-- 入口配置 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>cn.qblank.config.AppConfig</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
引入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"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta charset="UTF-8">
<title>jsTree树</title>
<link rel="stylesheet" href="/HRManagement/assets/dist/themes/default/style.min.css" />
</head>
<body>
<h1>jstree树</h1>
<div id="jstree_demo_div"></div>
<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
<script src="/HRManagement/assets/dist/jstree.min.js"></script>
</body>
<script src="/HRManagement/assets/js/getData.js"></script>
</html>
通过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<Page> getDepts(){
List<Dept> depts = deptService.findAllDept();
System.out.println(depts);
List<Page> 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.保持细心,不要打错类名,实在不行就进行拷贝,防止错误。
以上就是我的一些小小的错误总结,希望能给你们带来帮助。

本文详细介绍SSM框架的搭建步骤,包括环境配置、数据库连接、DAO层与Service层实现等,同时分享了作者在配置过程中的常见错误及解决经验。
630

被折叠的 条评论
为什么被折叠?



