【Mybatis】使用SSM框架完成jsTree

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

首先进行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.保持细心,不要打错类名,实在不行就进行拷贝,防止错误。

以上就是我的一些小小的错误总结,希望能给你们带来帮助。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值