(一)SSM中mybatis插入

在学ssm框架,自己瞎捉摸,看别人教程不如自己先试一下,以后看到更好的方法过来更新

我有一张用户表,一张消息表,消息表有两个字段发送者(sender)和接受者(sendee)存的是用户的ID

sendee字段可以为空,sender不为空

前端传入的值是发送者、接受者用户名,因此要先根据用户名查询用户,以便把用户ID插入消息表

首先创建用户和消息表的实体类(getset方法略去)

包com.pojo;

package com.pojo;
public class Message {
	private int id;
	private User sender;
	private User sendee;
	private String mess;
	private String emo;
	private Timestamp time;
}
package com.pojo;
public class User {
	private int id;
	private String username;
	private String password;
	private String nickname;
}
然后写sql语句,MessageMapper和UserMapper接口略去
包con.mapper

User.xml
	<mapper namespace="com.mapper.UserMapper">
        <select id="usernameGetUser" parameterType="String" resultType="com.pojo.User">
        	select * from   user  where username= #{username} 
	</mapper> 
        </select>

Message.java
	<mapper namespace="com.mapper.MessageMapper">
        <insert id="add" parameterType="com.pojo.Message" >
            insert into message 
                <if test="sendee.id!=''">(sender,sendee,mess,emo,time) values (#{sender.id},#{sendee.id},#{mess},#{emo},#{time}) </if>   
        	<if test="sendee.id==''">(sender,mess,emo,time) values (#{sender.id},#{mess},#{emo},#{time})</if>
        </insert>
        
	</mapper>
插入传入的值是message对象,其中含两个属性用户类对象sender和sendee的属性id直接写#{sender.id}就行了,因为sendee.id可以为空,写了个判断,如果为空就不插入sendee字段,否则会报外键的错( a foreign key constraint fails)

然后就是Message和user的服务类了

com.impl

@Service
public class MessageServiceImpl implements MessageService{

	@Autowired
	private MessageMapper messageMapper;
	// 新增消息
	public void addMess(Message message) {
		messageMapper.add(message);
	}

}

@Service
public class UserServiceImpl implements UserService{
	
	@Autowired
	private UserMapper userMapper;
	
		// 根据用户名放回用户
	public User usernameGetUser(String username) {
		User usermapper = userMapper.usernameGetUser(username);
		// 如果参数为空或者没查到返回一个空的User
		if(username==null||username.equals("")||usermapper==null){
			return new User();
		}
		return usermapper;
	}
}
用了Spring的自动装配,addMess()方法就是调用messageMapper的add()方法,传入message对象就行了;

usernameGetUser()方法就是根据用户名返回用户对象,如果没查到那么就返回一个空的User(否则sql语句中if判断语句会报错:(id,null))


然后就是控制类了

com.controller

@Controller
@RequestMapping
public class MessageController {
	@Autowired
	private MessageServiceImpl messageServiceImpl;
	@Autowired
	private UserServiceImpl userServiceImpl;
	private Message message = new Message();
	
	// 增加消息
	@RequestMapping("/addMessage")
	public void addMess(String sender,String sendee,String mess,String emo) {
		Timestamp time =  new Timestamp(new Date().getTime());
//		System.out.println(time.toString());
		message.setTime(time);
		// 根据用户名查到用户赋值到message
		message.setSender(userServiceImpl.usernameGetUser(sender));
		message.setSendee(userServiceImpl.usernameGetUser(sendee));
		message.setMess(mess);
		message.setEmo(emo);
		messageServiceImpl.addMess(message);
	}
}
这样从addMessage路径过来的请求就能插入一条消息记录了,sender参数不能为空,sendee参数可以为空


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值