2021.8.31
从25号开始练习复杂的mybatis多对多,从设计数据库思路到实现需求功能转移到实体项目中
1.之前很少看过字符转换的详细内容从今往后会注意字符串转换此项目为转数组(date)实体项目会有UUID生成的字符串
2.在添加时如果原表设计的首个id是自动增长的,在xml中要设置是否使用jdbc的getGenerateKeys方法获取主键并赋值到keyProperty设置的主键字段中将要插入字段对应的生成的id抽出来
3.@service中如果中间表角色id不想用逗号的形式要做循环插入数据
4.修改多表连接的中间表 因为是1-2 2-3的形式不能做修改只能删除干净后重新插入新数据
表结构
实体类Entity—user
package com.example.unicom.entity;import lombok.Data;@Data
public class User {private Integer id;private String name;private String phone;private Integer age;private String sex;private String date;private String name1;private String js_id;
}
Entity—js(死表)
package com.example.unicom.entity;import lombok.Data;@Data
public class Js {private Integer id;private String name;private String date;
}
Entity—user_role
package com.example.unicom.entity;import lombok.Data;@Data
public class UserJs {private Integer id;private Integer id1;private Integer user_id;private String js_id;
}
UsrtController
package com.example.unicom.controller;import com.example.unicom.entity.User;
import com.example.unicom.entity.base.GeneralResponse;import com.example.unicom.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;import java.util.List;/*** @author 孙翊轩* @since 2021-08-25*/
@RestController
@RequestMapping("/isp/unicom/user")
public class UserController {@Autowiredprivate UserService userService;
// @Autowired
// private UserJsService userJsService;@RequestMapping(value = "selectUser",method = RequestMethod.GET)public GeneralResponse selectUser(){try{List<User>userList=userService.selectUser();return new GeneralResponse("SUCCESS","查询成功",userList);}catch (Exception e){e.printStackTrace();}return new GeneralResponse("FAIL","查询失败",null);}@RequestMapping(value ="addUser" ,method =RequestMethod.POST )public GeneralResponse addUser(@RequestBody User user){try{userService.addUser(user);return new GeneralResponse("SUCCESS","添加成功",null);}catch (Exception e) {e.printStackTrace();return new GeneralResponse("FAIL","添加失败",null);}}@RequestMapping(value = "updateUser",method = RequestMethod.GET)public GeneralResponse updateUser(@RequestBody User user){try{userService.updateUser(user);return new GeneralResponse("SUCCESS","修改成功",null);}catch (Exception e){e.printStackTrace();}return new GeneralResponse("FAIL","修改失败",null);}@RequestMapping(value = "deleteUser",method = RequestMethod.GET)public GeneralResponse deleteUser(@RequestBody User user){try{userService.deleteUser(user);return new GeneralResponse("SUCCESS","删除成功",null);}catch (Exception e){e.printStackTrace();}return new GeneralResponse("FAIL","删除失败",null);}
}
UserService接口
package com.example.unicom.service;import com.example.unicom.entity.User;
import com.example.unicom.entity.base.GeneralResponse;
import org.springframework.stereotype.Repository;import java.util.List;public interface UserService {List<User> selectUser();GeneralResponse addUser(User user);GeneralResponse updateUser(User user);GeneralResponse deleteUser(User user);
}
@Service业务层 UserServiceImpl
package com.example.unicom.service.impl;import com.example.unicom.entity.User;
import com.example.unicom.entity.UserJs;
import com.example.unicom.entity.base.GeneralResponse;
import com.example.unicom.mapper.JsMapper;
import com.example.unicom.mapper.UserJsMapper;
import com.example.unicom.mapper.UserMapper;
import com.example.unicom.service.JsService;
import com.example.unicom.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import java.util.List;
@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Autowiredprivate UserJsMapper userJsMapper;@Overridepublic List<User> selectUser() {List<User>userList=userMapper.selectUser();return userList;}@Transactional@Overridepublic GeneralResponse addUser(User user) {userMapper.addUser(user);String[] arr=user.getJs_id().split(",");UserJs userjs=new UserJs();for (int i = 0; i < arr.length; i++) {userjs.setUser_id(user.getId());userjs.setJs_id(arr[i]);userJsMapper.addUserJs(userjs);}return null;}@Overridepublic GeneralResponse updateUser(User user) {userMapper.updateUser(user);userJsMapper.deleteUserJs(user.getId());UserJs userjs=new UserJs();String[] arr=user.getJs_id().split(",");for (int i = 0; i < arr.length; i++) {userjs.setUser_id(user.getId());userjs.setJs_id(arr[i]);userJsMapper.addUserJs(userjs);}return null;}@Overridepublic GeneralResponse deleteUser(User user) {userMapper.deleteUser(user);userJsMapper.deleteUserJs(user.getId());return null;}
}
UserMapper口
package com.example.unicom.mapper;import com.example.unicom.entity.User;
import com.example.unicom.entity.UserJs;
import com.example.unicom.entity.base.GeneralResponse;
import org.springframework.stereotype.Repository;import java.util.List;@Repository
public interface UserMapper {List<User> selectUser();void addUser(User user);void updateUser(User user);void deleteUser(User user);void addJsId(Integer id, int roleId);
}
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.unicom.mapper.UserMapper"><select id="selectUser" resultType="com.example.unicom.entity.User">SELECT u.id,u.`name`,u.age,u.phone,u.sex,GROUP_CONCAT(j.`name` )as name1,j.dateFROM `user` AS uLEFT JOIN user_js AS uj ON u.id=uj.user_idLEFT JOIN js AS J ON J.id=uj.js_idGROUP BY u.id</select><insert id="addUser" parameterType="com.example.unicom.entity.User" useGeneratedKeys="true" keyProperty="id"keyColumn="id">insert into user<trim prefix="(" suffix= ")" suffixOverrides=","><if test="name !=null">name,</if><if test="phone !=null">phone,</if><if test="age !=null">age,</if><if test="sex !=null">sex,</if><if test="date !=null">date,</if></trim><trim prefix="values (" suffix=")" suffixOverrides=","><if test="id !=null">#{id,jdbcType=INTEGER},</if><if test="name !=null">#{name,jdbcType=VARCHAR},</if><if test="phone !=null">#{phone,jdbcType=VARCHAR},</if><if test="age !=null">#{age,jdbcType=INTEGER},</if><if test="sex !=null">#{sex,jdbcType=VARCHAR},</if><if test="date !=null">#{date,jdbcType=VARCHAR},</if></trim></insert><update id="updateUser" parameterType="com.example.unicom.entity.User">update user set name=#{name} ,phone=#{phone},age=#{age},sex=#{sex},date=#{date}where id = #{id}</update><delete id="deleteUser" parameterType="com.example.unicom.entity.User">delete from user where id=#{id};</delete>
</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="com.example.unicom.mapper.UserJsMapper"><insert id="addUserJs" parameterType="com.example.unicom.entity.UserJs">insert into user_js(user_id,js_id) values (#{user_id},#{js_id})</insert><update id="delete" parameterType="com.example.unicom.entity.UserJs">delete from user_js where user_id=#{user_id}insert into user_js (js_id) values (#{js_id});</update><delete id="deleteUserJs" parameterType="com.example.unicom.entity.UserJs">delete from user_js where user_id=#{user_id}</delete>
</mapper>