上篇讲了SSM整合,既然整合完了,就要使用,想着之前javaweb结课设计做过SSH的客户管理系统,不过代码都是书上的,这次就自己写个SSM的客户管理系统吧。

SSM整合连接接上 : https://blog.csdn.net/ignite_/article/details/91358157
这个小项目很简单,就是对数据库的增删改查操作,所以不是很困难,但是对于刚接触SSM的来说,练手再合适不过了。

使用技术:

前台:html css JavaScript JQuery ajax 使用框架bootstrap
后台:java SpringMVC Spring Mybatis

页面效果
1.登陆页面

2.注册页面

3.主页页面

4.添加客户和更改客户按钮实现

除登陆和注册,其他几个功能与后台交流都是通过ajax异步传递json数据完成的

目录结构

jar包
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.6</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.37</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.2.4.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>4.2.4.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.2.4.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>4.2.4.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>4.2.4.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-expression</artifactId><version>4.2.4.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-instrument</artifactId><version>4.2.4.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>4.2.4.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-oxm</artifactId><version>4.2.4.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>4.2.4.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>4.2.4.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>4.2.4.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.2.4.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>4.2.4.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>4.2.4.RELEASE</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.2</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.8</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.9.8</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.9.8</version></dependency>

具体代码:

1.applicationContext.xml(用于配置Mybatis,ioc和di操作)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd">
<!--    配置mybaits-->
<!--    1.配置数据源--><bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/ssh_demo?useUnicode=true&amp;characterEncoding=utf8"/><property name="username" value="root"/><property name="password" value="root"/></bean>
<!--    2.配置sqlSessionFactory--><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="datasource"/><property name="mapperLocations" value="classpath:mapper/*.xml"/></bean>
<!--    3.sqlSessionFactory托管给spring--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/><property name="basePackage" value="mapper"/></bean><!--    给CustomService注入Mapper--><bean id="CustomService" class="service.Impl.CustomServiceImpl"><property name="customMapper" ref="customMapper"/></bean>
</beans>
实体类(domain)

public class Custom {private int id;private String name;private String password;private String mobile;private String Email;}

set和get方法就不放出来了,可以直接通过编译器自动生成

Dao层(mapper)

CustomMapper.java(Mybatis动态代理对象)

public interface CustomMapper {Custom login(@Param("name") String name, @Param("password") String password);boolean register(@Param("name") String name,@Param("password") String password,@Param("mobile") String mobile,@Param("Email") String Email);List<Custom> query();boolean delete(@Param("id") int id);boolean insert(@Param("id") String id,@Param("name") String name,@Param("password") String password,@Param("mobile") String mobile,@Param("email") String email);boolean update(@Param("oldid") String oldid,@Param("id") String id,@Param("name") String name,@Param("password") String password,@Param("mobile") String mobile,@Param("email") String email);
}

CustomMapper.xml(Mybatis的Mapper映射文件)

<?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="mapper.CustomMapper"><select id="login" resultType="domain.Custom" parameterType="java.lang.String">select * from custom where name= #{name} and password=#{password}</select><insert id="register">insert into custom(id,name,password,mobile,Email) values (null ,#{name},#{password},#{mobile},#{Email})</insert><select id="query" resultType="domain.Custom">select * from custom</select><delete id="delete" parameterType="java.lang.Integer">delete from custom where id = #{id}</delete><insert id="insert" parameterType="java.lang.String">insert into custom values (#{id},#{name},#{password},#{mobile},#{email})</insert><update id="update" parameterType="java.lang.String">update custom  set id=#{id},name=#{name},password=#{password},mobile=#{mobile},Email=#{email} where  id=#{oldid}</update>
</mapper>
Service层

CustomServiceImpl

package service.Impl;import domain.Custom;
import mapper.CustomMapper;
import service.CustomService;import java.util.List;public class CustomServiceImpl implements CustomService {CustomMapper customMapper;public void setCustomMapper(CustomMapper customMapper) {this.customMapper = customMapper;}@Overridepublic Custom login(String name, String password) {return customMapper.login(name,password);}@Overridepublic boolean register(Custom custom) {return customMapper.register(custom.getName(),custom.getPassword(),custom.getMobile(),custom.getEmail());}@Overridepublic List<Custom> query() {return customMapper.query();}@Overridepublic boolean delete(int id) {return customMapper.delete(id);}@Overridepublic boolean insert(Custom custom) {return customMapper.insert(String.valueOf(custom.getId()),custom.getName(),custom.getPassword(),custom.getMobile(),custom.getEmail());}@Overridepublic boolean update(int oldid, Custom custom) {return customMapper.update(String.valueOf(oldid),String.valueOf(custom.getId()),custom.getName(),custom.getPassword(),custom.getMobile(),custom.getEmail());}
}

这里会调用Dao层,可以将customMapper通过Spring的依赖注入,所以customMapper需要set方法

handle(原生代码结构中的Servlet)
package handle;import domain.Custom;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import service.CustomService;import java.util.List;@Controller
@RequestMapping("custom")
public class CustomHandle {@AutowiredCustomService customService;@RequestMapping(value = "/login.handle",method = RequestMethod.POST)public String login(String name,String password){System.out.println(name);System.out.println(password);Custom custom = customService.login(name, password);if (custom!=null) {return "query";}elsereturn "error";}@RequestMapping(value = "/register.handle",method = RequestMethod.POST)public String register(String name,String password,String mobile,String Email){Custom custom = new Custom();custom.setName(name);custom.setPassword(password);custom.setMobile(mobile);custom.setEmail(Email);System.out.println(custom);if (customService.register(custom)){return "query";}return "error";}@ResponseBody@RequestMapping(value = "/query.handle")public List<Custom> query(){return customService.query();}@ResponseBody@RequestMapping(value = "/delete.handle")public boolean delete(int id){return customService.delete(id);}@ResponseBody@RequestMapping(value = "/insert.handle")public Custom insert(int id,String name,String password,String mobile,String email) {List<Custom> query = customService.query();int b=0;for (int i = 0; i < query.size(); i++) {if (id == query.get(i).getId()) {b=1;break;}}if (b!=1) {Custom custom = new Custom();custom.setId(id);custom.setName(name);custom.setPassword(password);custom.setMobile(mobile);custom.setEmail(email);System.out.println(custom);if (customService.insert(custom)) {return custom;}}else{Custom custom = new Custom();custom.setName("false");return custom;}return null;}@ResponseBody@RequestMapping(value = "/update.handle")public Custom update(int oldid,int id,String name,String password,String mobile,String email){Custom custom = new Custom();custom.setId(id);custom.setName(name);custom.setPassword(password);custom.setMobile(mobile);custom.setEmail(email);System.out.println(custom);if (customService.update(oldid,custom)){return custom;}else return null;}
}

通过拦截请求,交由这个类处理请求。

applicationContext-springmvc.xml(Springmvc配置文件)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd">
<!--    配置视图解析器--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/html/"/><property name="suffix" value=".html"/></bean>
<!--    扫描包--><context:component-scan base-package="handle"/><mvc:resources mapping="/fonts/**" location="/fonts/"/><mvc:resources mapping="/css/**" location="/css/"/><mvc:resources mapping="/js/**" location="/js/"/><mvc:resources mapping="/html/**" location="/html/"/><mvc:annotation-driven/>
</beans>
前台html
index.html(登陆页面)
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><!-- 最新版本的 Bootstrap 核心 CSS 文件 --><link rel="stylesheet" href="./css/bootstrap.min.css" \><!-- 可选的 Bootstrap 主题文件(一般不用引入) --><link rel="stylesheet" href="./css/bootstrap-theme.min.css"><!-- 最新的 Bootstrap 核心 JavaScript 文件 --><script src="./js/jquery-3.3.1.js"></script><script src="./js/bootstrap.min.js"></script>
</head>
<body>
<div class="container" style="width: 500px;margin-top: 100px"><h3>客户管理系统</h3><form action="./custom/login.handle" method="post"><div class="form-group"><label >账号</label><input type="text" class="form-control" name="name" placeholder="账号"></div><div class="form-group"><label >密码</label><input type="password" class="form-control" name="password" placeholder="密码"></div><button type="submit" class="btn btn-default">登陆</button><a href="./html/register.html" class="btn btn-default">注册</a></form></div>
</body>
</html>
html/register.html(注册页面)
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>注册</title><!-- 最新版本的 Bootstrap 核心 CSS 文件 --><link rel="stylesheet" href="../css/bootstrap.min.css" \><!-- 可选的 Bootstrap 主题文件(一般不用引入) --><link rel="stylesheet" href="../css/bootstrap-theme.min.css"><!-- 最新的 Bootstrap 核心 JavaScript 文件 --><script src="../js/jquery-3.3.1.js"></script><script src="../js/bootstrap.min.js"></script>
</head>
<body>
<div class="container" style="width: 500px;margin-top: 100px"><h3>欢迎注册</h3><form action="../custom/register.handle" method="post"><div class="form-group"><label >账号</label><input type="text" class="form-control" name="name" placeholder="账号"></div><div class="form-group"><label >密码</label><input type="password" class="form-control" name="password" placeholder="密码"></div><div class="form-group"><label >确认密码</label><input type="password" class="form-control" name="password2" placeholder="确认密码"></div><div class="form-group"><label >mobile</label><input type="text" class="form-control" name="mobile" placeholder="mobile"></div><div class="form-group"><label >mobile</label><input type="text" class="form-control" name="Email" placeholder="Email"></div><button class="btn btn-default" type="submit">注册</button></form></div>
</body>
</html>
html/error.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<a href="../index.html">账号或密码错误返回主页</a>
</body>
</html>
html/query.html(主要页面)
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><!-- 最新版本的 Bootstrap 核心 CSS 文件 --><link rel="stylesheet" href="../css/bootstrap.min.css" \><!-- 可选的 Bootstrap 主题文件(一般不用引入) --><link rel="stylesheet" href="../css/bootstrap-theme.min.css"><!-- 最新的 Bootstrap 核心 JavaScript 文件 --><script src="../js/jquery-3.3.1.js"></script><script src="../js/bootstrap.min.js"></script>
</head>
<script>//载入获得jsonwindow.onload=function () {$.getJSON("../custom/query.handle",function (result) {for (var index = 0 ;index<result.length;index++){$("#tableAppend").append("<tr id='tr"+result[index].id+"'>\n" +"<td>"+result[index].id+"</td>\n" +"<td>"+result[index].name+"</td>\n" +"<td>"+result[index].password+"</td>\n" +"<td>"+result[index].mobile+"</td>\n" +"<td>"+result[index].email+"</td>\n" +"<td class='btn btn-primary' type='button' data-toggle='collapse' data-target='#collapseExample"+result[index].id+"' aria-expanded='false' aria-controls='collapseExample"+result[index].id+"' >更改</td>\n" +"<td class='btn btn-danger' onclick='deleteId("+result[index].id+")'>删除</td>\n" +"</tr>"+"<tr class='collapse' id='collapseExample"+result[index].id+"'>"+"<td><input class=\"form-control\" type='text' value='"+result[index].id+"' style='width: 125px' id='update"+result[index].id+"id'></td>"+"<td><input class=\"form-control\" type='text' value='"+result[index].name+"' style='width: 138px' id='update"+result[index].id+"name'></td>"+"<td><input class=\"form-control\" type='text' value='"+result[index].password+"'style='width: 138px' id='update"+result[index].id+"password'></td>"+"<td><input class=\"form-control\" type='text' value='"+result[index].mobile+"' style='width: 138px' id='update"+result[index].id+"mobile'></td>"+"<td><input class=\"form-control\" type='text' value='"+result[index].email+"' style='width: 138px' id='update"+result[index].id+"email'></td>"+"<td class='btn btn-default' colspan='2' onclick='update("+result[index].id+")' >确认更改</td>"+"</tr>")}})}//删除function deleteId(id){$.getJSON("../custom/delete.handle",{"id":id},function (result) {if (result){$("#tr"+id).hide(1000);$("#collapseExample"+id).hide(1000);}})}//显示insert表单function insertopen() {$("#insert").toggle(1000);}//提交新增客户function insert() {var id=$("#insert_id").val();var name=$("#insert_name").val();var password=$("#insert_password").val();var mobile=$("#insert_mobile").val();var email=$("#insert_Email").val();if (id==""||name==""||password==""||mobile==""||email=="") {alert("输入不能为空");}else{$.getJSON("../custom/insert.handle",{"id": id, "name": name, "password": password, "mobile": mobile, "email": email},function (result) {if (result.name != "false") {$("#tableAppend").append("<tr id='tr" + result.id + "'>\n" +"<td>" + result.id + "</td>\n" +"<td>" + result.name + "</td>\n" +"<td>" + result.password + "</td>\n" +"<td>" + result.mobile + "</td>\n" +"<td>" + result.email + "</td>\n" +"<td class='btn btn-primary' type='button' data-toggle='collapse' data-target='#collapseExample"+result.id+"' aria-expanded='false' aria-controls='collapseExample"+result.id+"' >更改</td>\n" +"<td class='btn btn-danger' onclick='deleteId(" + result.id + ")'>删除</td>\n" +"</tr>"+"<tr class='collapse' id='collapseExample"+result.id+"'>"+"<td><input class=\"form-control\" type='text' value='"+result.id+"' style='width: 125px' id='update"+result.id+"id'></td>"+"<td><input class=\"form-control\" type='text' value='"+result.name+"' style='width: 138px' id='update"+result.id+"name'></td>"+"<td><input class=\"form-control\" type='text' value='"+result.password+"'style='width: 138px' id='update"+result.id+"password'></td>"+"<td><input class=\"form-control\" type='text' value='"+result.mobile+"' style='width: 138px' id='update"+result.id+"mobile'></td>"+"<td><input class=\"form-control\" type='text' value='"+result.email+"' style='width: 138px' id='update"+result.id+"email'></td>"+"<td class='btn btn-default' colspan='2' onclick='update("+result.id+")' >确认更改</td>"+"</tr>")$("#insert").hide(1000);} else {alert("添加信息有误,id重复");}})}}//更改function update(updateid) {var id = $("#update"+updateid+"id").val();var name = $("#update"+updateid+"name").val();var password = $("#update"+updateid+"password").val();var mobile = $("#update"+updateid+"mobile").val();var email = $("#update"+updateid+"email").val();$.getJSON("../custom/update.handle",{"oldid":updateid,"id":id,"name":name,"password":password,"mobile":mobile,"email":email},function (result) {$("#tr"+updateid).remove();$("#tableAppend").append("<tr id='tr" + result.id + "'>\n" +"<td>" + result.id + "</td>\n" +"<td>" + result.name + "</td>\n" +"<td>" + result.password + "</td>\n" +"<td>" + result.mobile + "</td>\n" +"<td>" + result.email + "</td>\n" +"<td class='btn btn-primary' type='button' data-toggle='collapse' data-target='#collapseExample"+result.id+"' aria-expanded='false' aria-controls='collapseExample"+result.id+"' >更改</td>\n" +"<td class='btn btn-danger' onclick='deleteId(" + result.id + ")'>删除</td>\n" +"</tr>"+"<tr class='collapse' id='collapseExample"+result.id+"'>"+"<td><input class=\"form-control\" type='text' value='"+result.id+"' style='width: 125px' id='update"+result.id+"id'></td>"+"<td><input class=\"form-control\" type='text' value='"+result.name+"' style='width: 138px' id='update"+result.id+"name'></td>"+"<td><input class=\"form-control\" type='text' value='"+result.password+"'style='width: 138px' id='update"+result.id+"password'></td>"+"<td><input class=\"form-control\" type='text' value='"+result.mobile+"' style='width: 138px' id='update"+result.id+"mobile'></td>"+"<td><input class=\"form-control\" type='text' value='"+result.email+"' style='width: 138px' id='update"+result.id+"email'></td>"+"<td class='btn btn-default' colspan='2' onclick='update("+result.id+")' >确认更改</td>"+"</tr>");$("#collapseExample"+updateid).hide();})}
</script><body>
<div class="container" style="width: 1000px"><h3>客户管理系统</h3><table class="table table-hover" style="text-align: center" id="tableAppend"><tr><td>id号</td><td>账号</td><td>密码</td><td>电话</td><td>Email</td><td>操作</td></tr></table>
</div>
<div class="container" style="width: 200px;margin-top:30px "><button class="btn btn-block" style="width: 200px;margin: 0px auto"onclick="insertopen()">添加客户</button>
</div><div class="container" style="margin-top: 30px;width: 200px;display: none" id="insert" >id:<input type="text" class="form-control" id="insert_id" style="width: 50px" placeholder="id" value="">name: <input type="text" class="form-control" id="insert_name" style="width: 180px" placeholder="name">password: <input type="text" class="form-control" id="insert_password" style="width: 180px" placeholder="password">mobile: <input type="text" class="form-control" id="insert_mobile" style="width: 180px" placeholder="mobile">Email: <input type="text" class="form-control" id="insert_Email" style="width: 180px" placeholder="Email"><button class="btn btn-default" style="width: 200px;margin-top:30px " onclick="insert()">确认添加</button>
</div>
</body>
</html>

前台页面主要就是使用了jquery+ajax+bootstrap框架,用于显示与和后台进行数据交互

web.xml配置

<?xml version="1.0" encoding="UTF-8" ?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5"><welcome-file-list><welcome-file>index.html</welcome-file></welcome-file-list>
<!--  加载spring--><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>
<!--  配置springmvc--><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext-springmvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>*.handle</url-pattern></servlet-mapping></web-app>

注意事项

1.SpringMVC对静态资源访问问题

可以在SpringMVC配置文件中加入一下代码

<mvc:resources mapping="/fonts/**" location="/fonts/"/><mvc:resources mapping="/css/**" location="/css/"/><mvc:resources mapping="/js/**" location="/js/"/><mvc:resources mapping="/html/**" location="/html/"/><mvc:annotation-driven/>
2.Spring使用注解问题

例如在handle使用了Spring的注解,这里在需要调用Service层,若使用IOC和Di操作,会出现空指针,所以在创建Service对象时,使用注解自动装配即可

3.handle给前台传递Json

需要注意两个问题
第一个:
需要使用注解@ResponseBody即可直接返回对象数据
第二个:
需要jar包,并且版本一致

<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.8</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.9.8</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.9.8</version></dependency>
4.Dao层数据类型问题

在创建实体类的时候,id是用了int类型,存入数据库时,因为输入类型是String,所以,在接口中,应该强转int为String

主要就是这样,不是很复杂,但是对想我这样的新手练习使用SSM很有帮助。
bootstrap用的还不是很熟练,更改信息的时候,样式全被撑开了。。。
嗯。。大概就是这样了。。。不到一天就做完了,还不错。。加油

仅供学习,如若有地方不对,敬请前辈指出,感激不尽。

SSM框架学习(四),简单小项目---客户管理系统相关推荐

  1. python3 django开发_python3开发进阶-Django框架学习前的小项目(一个简单的学员管理系统)...

    ''' 自己独立写一个学员管理系统 表结构: 班级表: -id -grade_name 学生表: -id -student_name -grade 关联外键班级表 老师表: -id -teacher_ ...

  2. SSM框架【硬核】项目--个人理财管理系统项目教程

    今天带大家动手实践一下SSM框架项目: 本系统采用SSM技术进行开发与设计,可以让学员对JavaEE的框架有个全面的认识,并能将实用技能与理论知识进行完美的结合,让学员知其然的同时,也要知其所以然. ...

  3. Maven项目+MVC三层架构+Mysql+Tomcat+私教预约系统前后端(私教、用户、管理员)+可以用于学习SSM框架、javaweb、maven项目入门

    Maven项目+MVC三层架构+Mysql+Tomcat+私教预约系统前后端(私教.用户.管理员)+可以用于学习SSM框架.javaweb.maven项目入门 可以用于课程设计.毕业设计的知识点入门学 ...

  4. 毕业季基于spring的基于安卓APP的基于ssm框架的基于微信小程序的管理系统设计与开发(开题+源码+讲解+论文)

    毕业设计考察的是同学的专业知识的运用能力,除了对技能的考核,还看重你的创新思维,这里面设计到内容繁琐复杂. 对于还未毕业没有过项目开发经验的同学是有些难度的,一个程序的开发小到1两个月,大至几个月甚至 ...

  5. SSM框架学习文档以及SSM整合(附Github地址=含SSM学习时的实例代码)

    SSM框架学习 软件架构: 基于流行SSM框架:Spring+SpringMVC+Mybatis 项目配置: 使用Maven进行项目jar导入 ​ 使用Git进行版本控制,并将每次编写的代码上传到Gi ...

  6. 使用Java+SSM框架+JSP开发简单在线电影推荐网 电影推荐系统 豆瓣电影爬虫 基于用户、物品的协同过滤推荐算法 大数据 机器学习 SimpleMovieRecommendOnline

    使用Java+SSM框架+JSP开发简单在线电影推荐网 电影推荐系统 豆瓣电影爬虫 基于用户.物品的协同过滤推荐算法 大数据 机器学习 SimpleMovieRecommendOnline 一.项目简 ...

  7. SSM框架学习总结第零篇--框架是什么

    SSM框架系列文章: SSM框架学习总结第零篇–框架是什么 SSM框架学习总结第一篇–MyBatis SSM框架学习总结第二篇–Spring SSM框架学习总结第三篇–Spring MVC SSM框架 ...

  8. 【机器学习基础】四个小项目完全解读支持向量机

    支持向量机算法的基础是最大间隔分类器,最大间隔分类器虽然很简单,但不能应用于大部分数据,因为大部分属是非线性数据,无法用线性分类器进行分类,解决方案是对特征空间进行核函数映射,然后再运行最大间隔分类器 ...

  9. android简单小项目实例_自学(系统学)Python了那么久, 想就业? 几个简单小项目让你通过面试!...

    本人从事Python开发多年,精通爬虫,web,熟悉其他方向,好多小伙伴私聊我说,我看了你的文章后,我学习了,但是对于项目这块还是不是很熟悉,如何快速掌握几个小项目,以及几个可以面试的项目.欢迎大家订 ...

  10. PyTorch框架学习四——计算图与动态图机制

    PyTorch框架学习四--计算图与动态图机制 一.计算图 二.动态图与静态图 三.torch.autograd 1.torch.autograd.backward() 2.torch.autogra ...

最新文章

  1. Leetcode 292. Nim 游戏 解题思路及C++实现
  2. selinux= 为 disabled_「丁香园」五年没考过执医,就不要出来「为祸人间」了
  3. IMPDP导入实例(oracle)
  4. Linux Bash Shell编程快速入门
  5. java后台导出excel代码详细讲解,java基础面试笔试题
  6. I/O流之缓冲流的文件复制代码及节点流处理数据加密
  7. 【SpringMVC 笔记】控制器 Controller 与 RestFul 风格
  8. 3090显卡安装pytorch出错
  9. fiddler抓包手机app数据(手机连接WiFi)
  10. 利用matlab将位图转为SVG矢量图
  11. AWS ARN 学习
  12. Python学习_2015年12月14日
  13. LeaRun.net快速开发动态表单
  14. Pygame实战之外星人入侵NO.11——设置开始按钮
  15. win10定时关机c语言,win10定时关机怎么设置,win10设置定时关机设置方法-电脑怎么定时开关机...
  16. Main.obj : error LNK2019: 无法解析的外部符号 _Direct3DCreate9@4,该符号在函数 long __cdecl InitD3D(struct HWND__ *)
  17. [附源码]Python计算机毕业设计航空订票系统Django(程序+LW)
  18. 激光式气体传感器的检测原理及优势
  19. 2022年安全员-A证考题及答案
  20. 【Python】scikit-image的measure,morphology,io,filters等

热门文章

  1. python脚本编程手册安卓版_python编程入门app下载
  2. 单片机大学生实习感悟体验
  3. [电路笔记]正弦稳态电路分析
  4. C++Windows连点器制作
  5. TCP/IP协议详解:IP、ARP、RARP、ICMP、IGMP
  6. couchbase java view_基于Java的Couchbase使用入门
  7. 简单工厂模式(Simple Factory Pattern)【1/23】
  8. Eric6与pyqt5学习笔记14 【实战5 百度贴吧离线签到工具】
  9. ActiveSync同步使用方法
  10. 从电视购物到抖音,流量平台与骗子斗了20年