开发环境使用IDEA
- 通过IDEA新建项目
点击下一步:
填写完成项目名之后点击下一步:
点击下一步:
点击完成之后便开始创建项目了,项目的目录结构如下:
删掉一些不需要的文件夹,并在pom文件中添加我们需要的依赖:
添加mysql和mybatis的依赖:
删除掉reources文件夹下面暂时不需要的目录,新建mapper文件夹和mybatis-config.xml文件:
mybatis-config.xml文件文件中主要写一些java类型的别名:
<?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>
<typeAlias alias="Integer" type="java.lang.Integer"/>
<typeAlias alias="Long" type="java.lang.Long" />
<typeAlias alias="HashMap" type="java.util.HashMap" />
<typeAlias alias="LinkedHashMap" type="java.util.LinkedHashMap" />
<typeAlias alias="ArrayList" type="java.util.ArrayList" />
<typeAlias alias="LinkedList" type="java.util.LinkedList" />
</typeAliases>
</configuration>
之后进行application.properties文件配置,配置数据的连接信息和mybatis配置文件的位置:
相关代码:
#mysql
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/ssmdome
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#mybatis的文件位置
mybatis.mapper-locations=classpath:mapper/*.xml
之后在src文件夹下面建立相关目录,按照MVC的思想进行建立controller、model、dao、service文件夹,同时service文件夹下面要建立impl的文件夹:
这几层相关知识点的见解:
controller(控制器): 接受相关请求中转到相关的service层,并且负责返回处理之后的数据。
service(业务层): 业务控制层,在这一层里面可以进行一些一些业务逻辑的处理,并进行数据层的访问操作。
model(对象模型层): 数据对象的一种介质,类似以Entity或者Java Bean。
dao(数据持久层):负责与数据库进行一个联系等操作。
在Application启动类中要添加两个东西,dao层和model层的扫描:
在model层中新建类实体类User:
不需要写get、set和构造方法,使用lombok的@Data注解
package com.ssm.model;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
@Data
public class User {
private Integer id;
private String name;
private String password;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date birth;
private String gender;
private String email;
}
dao层中创建UserDao接口:
package com.ssm.dao;
import com.ssm.model.User;
import java.util.List;
public interface UserDao {
List<User> selectAll();
}
service中UserService接口:
package com.ssm.service;
import com.ssm.model.User;
import java.util.List;
public interface UserService {
List<User> selectAll();
}
service层下的impl中的UserServiceImpl类
package com.ssm.service.impl;
import com.ssm.dao.UserDao;
import com.ssm.model.User;
import com.ssm.service.UserService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
@Resource
private UserDao userDao;
@Override
public List<User> selectAll() {
return userDao.selectAll();
}
}
controller层中UserController类:
package com.ssm.controller;
import com.ssm.model.User;
import com.ssm.service.UserService;
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 javax.annotation.Resource;
import java.util.List;
@Controller
public class UserController {
@Resource
private UserService userService;
/**
* 查询所有的用户
* @return
*/
@ResponseBody
@RequestMapping(value = "/selectAll", method = RequestMethod.GET)
public List<User> selectAllUser(){
List<User> users = userService.selectAll();
return users;
}
}
mapper文件夹下面的UserMapper.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="com.ssm.dao.UserDao">
<resultMap id="userInfoMap" type="com.ssm.model.User">
<id property="id" column="id" jdbcType="INTEGER"/>
<result property="name" column="username" jdbcType="VARCHAR"/>
<result property="password" column="passowrd" jdbcType="VARCHAR"/>
<result property="birth" column="birth" jdbcType="DATE"/>
<result property="gender" column="gender" jdbcType="VARCHAR"/>
<result property="email" column="email" jdbcType="VARCHAR"/>
</resultMap>
<sql id="columns">
id,
username,
password,
birth,
gender,
email
</sql>
<select id="selectAll" resultMap="userInfoMap">
select
<include refid="columns"/>
from user
</select>
</mapper>
启动项目:
显示正常:
使用调用接口的工具进行接口的调用:
可以进行数据的查询,但是有个问题,一般数返回的格式没有这样搞的,因此对数据的返回格式进行封装:
新建一个util的包:
MessageEntity类:
package com.ssm.util;
import lombok.Data;
@Data
public class MessageEntity<T> {
private Integer code;
private String msg;
private T data;
private Integer total;
}
MessageCode类:
package com.ssm.util;
public enum MessageCode {
SYSTEM_CODE(500, "系统错误");
private Integer code;
private String message;
public Integer getCode() {
return code;
}
public String getMessage() {
return message;
}
MessageCode(Integer code, String message) {
this.code = code;
this.message = message;
}
}
ResultForma类:
package com.ssm.util;
public class ResultFormat {
public static MessageEntity success() {
return success(null);
}
public static <T> MessageEntity<T> success(T t){
MessageEntity msg = new MessageEntity();
msg.setCode(200);
msg.setMsg("操作成功");
msg.setData(t);
return msg;
}
public static MessageEntity error(MessageCode message) {
MessageEntity msg = new MessageEntity();
msg.setCode(message.getCode());
msg.setMsg(message.getMessage());
return msg;
}
}
UserController类中进行修改:
package com.ssm.controller;
import com.ssm.model.User;
import com.ssm.service.UserService;
import com.ssm.util.MessageCode;
import com.ssm.util.MessageEntity;
import com.ssm.util.ResultFormat;
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 javax.annotation.Resource;
import java.util.List;
@Controller
public class UserController {
@Resource
private UserService userService;
/**
* 查询所有的用户
* @return
*/
@ResponseBody
@RequestMapping(value = "/selectAll", method = RequestMethod.GET)
public MessageEntity selectAllUser(){
List<User> users = userService.selectAll();
if(users.size() > 0){
return ResultFormat.success(users);
}else{
return ResultFormat.error(MessageCode.SYSTEM_CODE);
}
}
}
接口调用结果如下:
在前后端的分离的项目开发中需要解决的问题是:跨域(CORS方式)
新加一个包进行跨域操作
SimpleCORSFilter类:
package com.ssm.filter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
@Configuration
public class SimpleCORSFilter {
private CorsConfiguration buildConfig(){
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.addAllowedOrigin("*"); // 1 设置访问源地址
corsConfiguration.addAllowedHeader("*"); // 2 设置访问源请求头
corsConfiguration.addAllowedMethod("*"); // 3 设置访问源请求方法
return corsConfiguration;
}
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", buildConfig()); // 4 对接口配置跨域设置
return new CorsFilter(source);
}
}