(一)SSM中mybatis插入

来源:互联网 发布:外汇交易员的收入知乎 编辑:程序博客网 时间:2024/06/06 01:21

在学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

@Servicepublic class MessageServiceImpl implements MessageService{@Autowiredprivate MessageMapper messageMapper;// 新增消息public void addMess(Message message) {messageMapper.add(message);}}@Servicepublic class UserServiceImpl implements UserService{@Autowiredprivate UserMapper userMapper;// 根据用户名放回用户public User usernameGetUser(String username) {User usermapper = userMapper.usernameGetUser(username);// 如果参数为空或者没查到返回一个空的Userif(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@RequestMappingpublic class MessageController {@Autowiredprivate MessageServiceImpl messageServiceImpl;@Autowiredprivate 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);// 根据用户名查到用户赋值到messagemessage.setSender(userServiceImpl.usernameGetUser(sender));message.setSendee(userServiceImpl.usernameGetUser(sendee));message.setMess(mess);message.setEmo(emo);messageServiceImpl.addMess(message);}}
这样从addMessage路径过来的请求就能插入一条消息记录了,sender参数不能为空,sendee参数可以为空


原创粉丝点击