简介
本文意在快速构建一个可以接受前端访问,并进行数据库查找,随后返回相关信息给前端的项目。
ssm为Spring Ioc+SpringMVC+MyBatis的缩写
Spring Ioc:管理对象的一个工厂。对象之间有依赖,相互引用
Spring MVC:开发代码模式
Mybatis:操作数据库,和数据库打交道
2015年以前都用xml进行整合,2015年之后通过注解方式(即Spring Boot方式)
第一步,新建项目
删除如下这些,这是maven命令行,一般用不到
第二步,修改配置
application.yml中主要用来配置
要启动Spring项目我们先需要连接数据库,因为我们选择了mysqlDriver继承了JDBC,启动时会自动连接,因此我们需要先在application.yml中配置连接数据库
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
url: jdbc:mysql://localhost:3306/ssmboot_db?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
这里要填入你的数据库的username和password ,注意url中的ssmboot_db为我的数据库,把他替换成自己的就可以了
这时我们即可运行该项目
第三步,新建软件包
entity:实体类
controller:控制类,用来处理前端的访问
service:服务层,介于Dao层与controller层之间
mapper: 处理数据库,是Dao层,但是用了Mybatis叫mapper比较好
config:配置
utils:工具类
第四步,新建实体类
在entity包下新建User类
@Data//lombok会自动生成get、set方法
@Accessors(chain = true)//链式设值
public class User {
private int id;
private String name;
@Value("55")//设置默认值
private String password;
}
第五步,配置Mybatis连接数据库
前言
Spring已经集成了Mybatis,只需在创建项目时选择Mybatis即可
第一步,建立对应
UserMapper.java代码
package com.example.ssm_demo.mapper;
import com.example.ssm_demo.entity.User;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface UserMapper {
public User selectUserByName(String name);
void insertUser(@Param("user") User user);
void insertUsers(@Param("users") List<User> users);
void deleteUser(@Param("id") Integer id);
void updateUser(@Param("user") User user);
User selectUserById(@Param("id") Integer id);
List<User> selectAllUsers();
}
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.example.ssm_demo.mapper.UserMapper">
<resultMap id="baseResultMap" type="com.example.ssm_demo.entity.User">
<id column="id" property="id"/>
<result column="name" property="name"/>
<result column="password" property="password"/>
</resultMap>
<insert id="insertUser">
insert into `user` (name, password) values (#{user.name}, #{user.password})
</insert>
<insert id="insertUsers">
insert into `user` (name, password) values
<foreach collection="users" item="u" close="" open="" separator=",">
(#{u.name}, #{u.password})
</foreach>
</insert>
<delete id="deleteUser">
delete from `user` where id = #{id}
</delete>
<update id="updateUser">
update `user` set name = #{user.name}, password = #{user.password} where id = #{user.id}
</update>
<select id="selectUserById" resultMap="baseResultMap">
select * from `user` where id = #{id}
</select>
<select id="selectAllUsers" resultMap="baseResultMap">
select * from `user`
</select>
</mapper>
第二步,配置路径
在application.yml中配置路径
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
url: jdbc:mysql://localhost:3306/ssmboot_db?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
mybatis:
mapper-locations: classpath:mapper/*.xml
第三步,在SsmDemoApplication中配置
@MapperScan("com.example.ssm_demo.mapper")
确保程序能找到mapper文件
其中的 值右键复制包的路径
第四步,在UserMapper.java中按下alt+insert生成测试类
在第一行加入@SpringBootTest
在测试类中写入userMapper,但此时其实编译器会自动根据mapperScaner进行查找
@SpringBootTest
class UserMapperTest {
@Autowired(required = false)
UserMapper userMapper;
@Test
void selectUserByName() {
}
@Test
void insertUser() {
userMapper.insertUser(new User().setName("hell0").setPassword("123"));
}
@Test
void insertUsers() {
User user1 = new User().setName("aaa").setPassword("123");
User user2 = new User().setName("bbb").setPassword("123");
User user3 = new User().setName("ccc").setPassword("123");
List<User> users = List.of(user1, user2, user3);
userMapper.insertUsers(users);
}
@Test
void deleteUser() {
userMapper.deleteUser(1);
}
@Test
void updateUser() {
User user = new User().setId(2).setName("shi").setPassword("xiao");
userMapper.updateUser(user);
}
@Test
void selectUserById() {
User user = userMapper.selectUserById(2);
System.out.println(user);
}
@Test
void selectAllUsers() {
List<User> users = userMapper.selectAllUsers();
users.forEach(System.out::println);
}
}
第六步,在service包下新建UserService和UserServiceImpl
UserService
public interface UserService {
void addUser( User user);
void addUsers( List<User> users);
void removeUserById( Integer id);
void updateUserById( User user);
User getUserById( Integer id);
List<User> getAllUsers();
}
UserServiceImpl
@Service
//@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) //会生成不一样的对象,默认是一样的
public class UserServiceImpl implements UserService{
@Autowired(required = false)//自动注入 根据类型注入
// @Resource //先根据名称注入,后根据类型
private UserMapper userMapper;
@Override
public void addUser(User user) {
userMapper.insertUser(user);
}
@Override
public void addUsers(List<User> users) {
userMapper.insertUsers(users);
}
@Override
public void removeUserById(Integer id) {
userMapper.deleteUser(id);
}
@Override
public void updateUserById(User user) {
userMapper.updateUser(user);
}
@Override
public User getUserById(Integer id) {
return userMapper.selectUserById(id);
}
@Override
public List<User> getAllUsers() {
return userMapper.selectAllUsers();
}
}
第七步,在Controller包下新建UserController类
//@Controller
@RestController //等于 @Controller和 @ResponseBody
@RequestMapping("/user")
public class UserController {
//可以设置请求方式
// @RequestMapping(value = "/addUser", method = RequestMethod.GET)
@Autowired
UserService userService;
@PostMapping("/")
public Object addUser(@RequestBody User user) {
System.out.println("add");
System.out.println(user);
userService.addUser(user);
Map<String, Object> rs = new HashMap<>();
rs.put("success", true);
return rs;
}
@DeleteMapping("/{id}")
public Object delUser(@PathVariable("id") Integer userId) {
System.out.println("del");
System.out.println(userId);
userService.removeUserById(userId);
Map<String, Object> rs = new HashMap<>();
rs.put("success", true);
return rs;
}
@PutMapping("/")
public Object updateUser(@RequestBody User user) {
System.out.println("update");
userService.updateUserById(user);
Map<String, Object> rs = new HashMap<>();
rs.put("success", true);
return rs;
}
@GetMapping("/{id}")
public Object getUser(@PathVariable("id") Integer userId) {
System.out.println("getOneUser");
System.out.println(userId);
User user = userService.getUserById(userId);
Map<String, Object> rs = new HashMap<>();
rs.put("success", true);
rs.put("data", user);
return rs;
}
@GetMapping("/")
public Object getUsers() {
System.out.println("getAllUsers");
List<User> allUsers = userService.getAllUsers();
Map<String, Object> rs = new HashMap<>();
rs.put("success", true);
rs.put("data", allUsers);
return rs;
}
}
此时大功告成,启动项目即可,我们的项目结构长成这样
利用postman进行测试,结果成功
其中用到了很多IOC注释,我们在这有必要解释一下
SpringMvc注解
读者可以发现,我们对请求类型进行了分类