第十二章 增删改查

  这章我们来做用户的增删改查

查询

  先来查,在上面另一个查询条件,用来查询用户姓名及用户名的查询

  在查询按钮前添加个文本框,并使用col来进行布局,先不管好不好看。

<el-input v-model="s_user" placeholder="用户名或姓名"></el-input>

 

  因为添加了v-model=s_user了,所以我们需要在data()里添加s_user:””来绑定,并在queryList方法中的参数添加username:this.s_user。我们打开浏览器f12来查看看一下查询时的参数,发现已经发送到后台了。

1 <el-row >
2     <el-col :span="6">
3         <el-input v-model="s_user" placeholder="用户名或姓名"></el-input>
4     </el-col>
5     <el-col :span="6">
6         <el-button type="primary" size="small" id="search" @click="search">查询</el-button>
7     </el-col>
8 </el-row>

 

 1 return {
 2     loading: true,
 3     tableData: [],
 4     s_user:"",
 5     pagination: {
 6         pageSizes: [1, 10, 20, 50],
 7         currentPage: 1,
 8         total: 0,
 9         pageSize: 10,
10     },
11 }
let para = {
    pageNum: this.pagination.currentPage,
    pageSize: this.pagination.pageSize,
    username: this.s_user,
};

  接下来我们改造一下后台

  UserController中找到方法queryUser。我们当初已经预留查询参数的对象QueryUser了。现在我们需要添加两个username及realname,这样前台传来的参数自动就会加载到username,然后我们在controller中再处理一下将username的值赋值给realname;然后我们需要打开xml文件了,添加相关的查询,使用if来判断,使用bind来防止注入攻击

 QueryUser.java

1 private String username;
2 
3 public String getUsername() {
4     return username;
5 }
6 
7 public void setUsername(String username) {
8     this.username = username;
9 }
 UserMapper.xml
 1 <select id="select" resultMap="UserResultMap">
 2     select
 3     <include refid="columns"/>
 4     from ts_user
 5     where 1 = 1
 6     <if test="username != null and username != ''">
 7         <bind name="bName" value="'%'+username+'%'"/>
 8         and (username like #{bName}
 9           or realname like #{bName})
10     </if>
11 </select>

 

  好了。我们成功完成了查询。如果需要查询其它的,重复我们这个过程就可以了。

 

 

新增

  下面是新增我们打开element-ui的网站,找到组件,我们使用Dialog对话框来实现弹窗实现新增功能。我们实现网站demo中的自定义里第二个打开嵌套表彰的dialog来做最初的代码。

  我们只把重要的,有我们有关的代码,贴进来并且不做任选修改。效果如下,点击打开嵌套表单的Dialog即可实现的弹窗效果。

 

  然后我们在这基本上,进行修改,可以参加form表单,及你用到的控件等。我们完成,界面绘制,及必填验证

  首先,form上添加ref用来验证时调用。

  必填是使用:rules=”rules”来完成的。并且在需要验证的控件添加prop=”username”,然后在data中,添加相应的代码

 1 rules: {
 2     username: [
 3         { required: true, message: '请输入用户名', trigger: 'blur' },
 4         { min: 5, max: 20, message: '长度在 5 到 20 个字符', trigger: 'blur' }
 5     ],
 6     realname: [
 7         { required: true, message: '请输入姓名', trigger: 'blur' },
 8         { min: 1, max: 20, message: '长度在 1 到 20 个字符', trigger: 'blur' }
 9     ],
10 },

 

  添加一个saveAdd的方法,当我们什么也不写时,提示我们必填,当我们填写上了,提示我们submit。

1 saveAdd:function(){
2     var _this = this;
3     this.$refs["formAdd"].validate(valid => {
4         if(valid){
5             alert("submit!")         }else{
6             return false;
7         }
8     });
9 },

 

  然后我们调用后台的代码补充完整,添加btnLoading用于提交时,将按钮设置成loading状态,防止重复提交。代码见最后

 

 

  然后我们完善后台代码。需要注意的是,表中的不能为null的字段,在insert时都要有值。哪怕是个空格也不能是null。

  然后就是,username是有唯一键的,所以在insert前,我们需要查询一下,是否存在,如果存在也要将结果返回到前端。如果唯一键不处理前台接到的错误就是500,所以我们还不能偷懒,只能自己写个查询。然后我们之前用于查询的username需要修改为user,专门用来查询,将username空出来用于用户名查询。中间需要进行改造。我们还添加了RecordExistenceException用于专门对记录存在的扔出异常来。

  

  然后,密码和盐这块这次没写,留到下次。

  相关,修改是最简单的,用户名不能修改。

  删除也是逻辑删除,将状态变更为停用即可。

  后台代码会在本章最后一次放出。

 

  我们再回到前端,按钮必为新增。然后,进行一下操作。完美,新增完,自动刷新。再次打开新增时,就发现问题,上次输入的记录没清。那就再添加一下清空的方法。

_this.$refs["formAdd"].resetFields();

 

 

修改和删除

  新增到现在就完成了。下面是修改和删除

  先在列表中添加操作列
1       <el-table-column  label="操作" width="100">
2         <template slot-scope="scope">
3                 <span>
4                     <el-button type="text" size="small" v-on:click="edit(scope.row)" icon="edit">编 辑</el-button>
5                     <el-button type="text" size="small" v-on:click="del(scope.row)" icon="delete">删 除</el-button>
6                 </span>
7         </template>
8     </el-table-column>

 

  添加编辑和删除的方法,测试一下。好用

del:function(row){
    alert("del"+row.id);
},
edit:function(row){
    alert("edit"+row.id);
},
 
删除
  删除简单,我们先写删除,需要一个确认框,进行删除的二次确认,再调用后台即可。
 


 1 let _this = this;
 2 this.$confirm('将删除用名['+row.username+'], 是否继续?', '提示', {
 3     confirmButtonText: '确定',
 4     cancelButtonText: '取消',
 5     type: 'warning'
 6 }).then(() => {
 7     let delUrl = "/api/user/del";
 8     let param ={
 9         id:row.id,
10     };
11     Vue.axios.post(delUrl,param)
12         .then(function (res) {
13             _this.btnLoading = false;
14             if (res.status  === 200) {
15                 let result = res.data;
16                 if (result.success) {
17                     _this.$message({
18                         type: 'success',
19                         message: '删除成功!'
20                     });
21                     _this.queryList();
22                 } else {
23                     _this.$message({
24                         message: result.message,
25                         type: "error",
26                     })
27                 }
28             } else {
29                 _this.$message({
30                     message: res.message,
31                     type: "error",
32                 })
33             }
34         });
35         .catch(function (error) {
36             _this.btnLoading = false;
37             _this.$message({
38                 message: "发生错误" + error,
39                 type: "error",
40             });
41         });
42 });
 
  完美。
  在列表中我们看到状态是3的记录了,表示已经被删除了。但是前的按钮不好看。我们在按钮里添加代码
v-show="scope.row.status!='3'"
  然后,我们再看。好了没有了


修改
  我们先将修改的form,复制一份,formAdd变为formEdit,同时,将data里的也添加formEdit,还有dialogFormEditVisible,添加一个
  然后,在edit的方法里,添加 this.dialogFormEditVisible = true; 就能看到效果了。Username是不能修改的,所以设为不可修改,添加id只读。更新时以id为主


   下一步就是把数据添加上了,再有个保存,就完成了。为了保证每次修改都是最新的,所以点修改时,都要去后台实时获取新数据,而不是使用list中的数据,以用来保证数据的准确性。
  添加查询的语句
 
 1 let _this = this;
 2 let editUrl = "/api/user/get";
 3 let param = {
 4     id: row.id,
 5 }
 6 Vue.axios.post(editUrl, param)
 7     .then(function (res) {
 8         _this.loading = false;
 9         if (res.status === 200) {
10             let result = res.data;
11             if (result.success) {
12                 _this.dialogFormEditVisible = true;
13                 _this.formEdit.id = result.data.id;
14                 _this.formEdit.username = result.data.username;
15                 _this.formEdit.realname = result.data.realname;
16                 _this.formEdit.mail = result.data.mail;
17                 _this.formEdit.sex = result.data.sex;
18                 _this.formEdit.phone = result.data.phone;
19                 _this.formEdit.remarks = result.data.remarks;
20             } else {
21                 _this.$message({
22                     message: result.message,
23                     type: "error",
24                 });
25             }
26         } else {
27             _this.$message({
28                 message: res.message,
29                 type: "error",
30             });
31         }
32     })
33     .catch(function (error) {
34         _this.$message({
35             message: "发生错误" + error,
36             type: "error",
37         })
38     });

 

  添加保存方法。
 
 1 var _this = this;
 2 this.$refs["formEdit"].validate(valid => {
 3     if (valid) {
 4         let param = {
 5             id: this.formEdit.id,
 6             username: this.formEdit.username,
 7             realname: this.formEdit.realname,
 8             phone: this.formEdit.phone,
 9             sex: this.formEdit.sex,
10             mail: this.formEdit.mail,
11             remarks: this.formEdit.remarks,
12         }
13         _this.btnLoading = true;
14         var addUrl = "/api/user/edit";
15         Vue.axios.post(addUrl, param)
16             .then(function (res) {
17                 _this.btnLoading = false;
18                 if (res.status === 200) {
19                     let result = res.data;
20                     if (result.success) {
21                         _this.$message({
22                             message: "保存成功",
23                             type: "success",
24                         });
25                         _this.dialogFormEditVisible = false;
26                         _this.queryList();
27                     } else {
28                         _this.$message({
29                             message: result.message,
30                             type: "error",
31                         })
32                     }
33                 } else {
34                     _this.$message({
35                         message: res.message,
36                         type: "error",
37                     })
38                 }
39             })
40             .catch(function (error) {
41                 _this.btnLoading = false;
42                 _this.$message({
43                     message: "发生错误" + error,
44                     type: "error",
45                 });
46             });
47     } else {
48         return false;
49     }
50 });

 

完成。我们现在可以整体,再测试一下。发现个问题,新增、修改的弹出,我们再点遮罩层和按esc时都会关闭。我们并不希望这样。看了看官方文档,设两个属性为false即可。close-on-click-modal,close-on-press-escape。翻页也挺好用。本章完成。以下是相关页面代码

  1 <template>
  2     <div>
  3         <el-row>
  4             <el-col :span="6">
  5                 <el-input v-model="s_user" placeholder="用户名或姓名"></el-input>
  6             </el-col>
  7             <el-col :span="6">
  8                 <el-button type="primary" id="search" @click="search">查询</el-button>
  9                 <el-button @click="dialogFormVisible = true">新增</el-button>
 10 
 11             </el-col>
 12         </el-row>
 13         <el-table :data="tableData" v-loading="loading" stripe style="width: 100%">
 14             <el-table-column label="操作" width="100">
 15                 <template slot-scope="scope">
 16                         <span>
 17                             <el-button type="text" size="small" v-show="scope.row.status!='3'"
 18                                        v-on:click="edit(scope.row)" icon="edit">编 辑</el-button>
 19                             <el-button type="text" size="small" v-show="scope.row.status!='3'"
 20                                        v-on:click="del(scope.row)" icon="delete">删 除</el-button>
 21                         </span>
 22                 </template>
 23             </el-table-column>
 24             <el-table-column prop="username" label="用户名" width="180"/>
 25             <el-table-column prop="realname" label="姓名" width="180"/>
 26             <el-table-column prop="sex" label="性别" width="100"/>
 27             <el-table-column prop="mail" label="邮箱" width="180"/>
 28             <el-table-column prop="phone" label="电话" width="180"/>
 29             <el-table-column prop="remark" label="备注" width="180"/>
 30             <el-table-column prop="status" label="状态" width="180"/>
 31             <el-table-column prop="editorName" label="修改人" width="180"/>
 32             <el-table-column prop="editTime" label="修改时间" width="180"/>
 33         </el-table>
 34         <el-row style="text-align: right">
 35             <el-pagination class="pagination"
 36                            background
 37                            @size-change="handleSizeChange"
 38                            @current-change="handleCurrentChange"
 39                            :current-page="pagination.currentPage"
 40                            :page-sizes="pagination.pageSizes"
 41                            :page-size="pagination.pageSize"
 42                            layout="total, sizes, prev, pager, next, jumper"
 43                            :total="pagination.total">
 44             </el-pagination>
 45         </el-row>
 46         <!--新增-->
 47         <el-dialog title="新增用户" :visible.sync="dialogFormVisible" :close-on-click-modal="false" :close-on-press-escape="false">
 48             <el-form :model="formAdd" :rules="rules" ref="formAdd" :label-width="formLabelWidth">
 49                 <el-form-item label="用户名" prop="username">
 50                     <el-input v-model="formAdd.username" autocomplete="off"></el-input>
 51                 </el-form-item>
 52                 <el-form-item label="姓名" prop="realname">
 53                     <el-input v-model="formAdd.realname" autocomplete="off"></el-input>
 54                 </el-form-item>
 55                 <el-form-item label="性别">
 56                     <el-radio-group v-model="formAdd.sex">
 57                         <el-radio :label="1"></el-radio>
 58                         <el-radio :label="2"></el-radio>
 59                     </el-radio-group>
 60                 </el-form-item>
 61                 <el-form-item label="邮箱">
 62                     <el-input v-model="formAdd.mail" autocomplete="off"></el-input>
 63                 </el-form-item>
 64                 <el-form-item label="电话">
 65                     <el-input v-model="formAdd.phone" autocomplete="off"></el-input>
 66                 </el-form-item>
 67                 <el-form-item label="备注">
 68                     <el-input type="textarea" v-model="formAdd.remarks"></el-input>
 69                 </el-form-item>
 70             </el-form>
 71             <div slot="footer" class="dialog-footer">
 72                 <el-button @click="dialogFormVisible = false">取 消</el-button>
 73                 <el-button type="primary" @click="saveAdd" :loading="btnLoading">保 存</el-button>
 74             </div>
 75         </el-dialog>
 76         <!--修改-->
 77         <el-dialog title="修改用户" :visible.sync="dialogFormEditVisible" :close-on-click-modal="false" :close-on-press-escape="false">
 78             <el-form :model="formEdit" :rules="rules" ref="formEdit" :label-width="formLabelWidth">
 79                 <el-input v-model="formEdit.id" type="hidden"></el-input>
 80                 <el-form-item label="用户名">
 81                     <el-input v-model="formEdit.username" autocomplete="off" :disabled="true"></el-input>
 82                 </el-form-item>
 83                 <el-form-item label="姓名" prop="realname">
 84                     <el-input v-model="formEdit.realname" autocomplete="off"></el-input>
 85                 </el-form-item>
 86                 <el-form-item label="性别">
 87                     <el-radio-group v-model="formEdit.sex">
 88                         <el-radio :label="1"></el-radio>
 89                         <el-radio :label="2"></el-radio>
 90                     </el-radio-group>
 91                 </el-form-item>
 92                 <el-form-item label="邮箱">
 93                     <el-input v-model="formEdit.mail" autocomplete="off"></el-input>
 94                 </el-form-item>
 95                 <el-form-item label="电话">
 96                     <el-input v-model="formEdit.phone" autocomplete="off"></el-input>
 97                 </el-form-item>
 98                 <el-form-item label="备注">
 99                     <el-input type="textarea" v-model="formEdit.remarks"></el-input>
100                 </el-form-item>
101             </el-form>
102             <div slot="footer" class="dialog-footer">
103                 <el-button @click="dialogFormEditVisible = false">取 消</el-button>
104                 <el-button type="primary" @click="saveEdit" :loading="btnLoading">保 存</el-button>
105             </div>
106         </el-dialog>
107 
108     </div>
109 </template>
110 
111 <script>
112     import Vue from 'vue';
113 
114     export default {
115         name: "userManage",
116         data() {
117             return {
118                 btnLoading: false,
119                 loading: true,
120                 tableData: [],
121                 s_user: "",
122                 pagination: {
123                     pageSizes: [1, 10, 20, 50],
124                     currentPage: 1,
125                     total: 0,
126                     pageSize: 10,
127                 },
128 
129                 dialogFormVisible: false,
130                 dialogFormEditVisible: false,
131                 formAdd: {
132                     username: '',
133                     realname: '',
134                     sex: '',
135                     mail: '',
136                     phone: '',
137                     remarks: '',
138                 },
139                 formEdit: {
140                     id: '',
141                     realname: '',
142                     sex: '',
143                     mail: '',
144                     phone: '',
145                     remarks: '',
146                 },
147                 formLabelWidth: '120px',
148                 rules: {
149                     username: [
150                         {required: true, message: '请输入用户名', trigger: 'blur'},
151                         {min: 5, max: 20, message: '长度在 5 到 20 个字符', trigger: 'blur'}
152                     ],
153                     realname: [
154                         {required: true, message: '请输入姓名', trigger: 'blur'},
155                         {min: 1, max: 20, message: '长度在 1 到 20 个字符', trigger: 'blur'}
156                     ],
157                 },
158             }
159         },
160         mounted: function () {
161             this.queryList();
162         },
163         methods: {
164             queryList: function () {
165                 var _this = this;
166                 var queryUrl = "/api/user/query";
167                 let para = {
168                     pageNum: this.pagination.currentPage,
169                     pageSize: this.pagination.pageSize,
170                     username: this.s_user,
171                 };
172                 this.loading = true;
173                 Vue.axios.post(queryUrl, para)
174                     .then(function (res) {
175                         _this.loading = false;
176                         if (res.status === 200) {
177                             let result = res.data;
178                             if (result.success) {
179                                 _this.tableData = result.data;
180                                 _this.pagination.total = result.page.total;
181                             } else {
182                                 _this.$message({
183                                     message: result.message,
184                                     type: "error",
185                                 });
186                             }
187                         } else {
188                             _this.$message({
189                                 message: res.message,
190                                 type: "error",
191                             });
192                         }
193                     })
194                     .catch(function (error) {
195                         _this.$message({
196                             message: "发生错误" + error,
197                             type: "error",
198                         })
199                     });
200             },
201             saveAdd: function () {
202                 var _this = this;
203                 this.$refs["formAdd"].validate(valid => {
204                     if (valid) {
205                         let param = {
206                             username: this.formAdd.username,
207                             realname: this.formAdd.realname,
208                             phone: this.formAdd.phone,
209                             sex: this.formAdd.sex,
210                             mail: this.formAdd.mail,
211                             remarks: this.formAdd.remarks,
212                         }
213                         _this.btnLoading = true;
214                         var addUrl = "/api/user/add";
215                         Vue.axios.post(addUrl, param)
216                             .then(function (res) {
217                                 _this.btnLoading = false;
218                                 if (res.status === 200) {
219                                     let result = res.data;
220                                     if (result.success) {
221                                         _this.$message({
222                                             message: "保存成功",
223                                             type: "success",
224                                         });
225                                         _this.$refs["formAdd"].resetFields();
226                                         _this.dialogFormVisible = false;
227                                         _this.queryList();
228                                     } else {
229                                         _this.$message({
230                                             message: result.message,
231                                             type: "error",
232                                         })
233                                     }
234                                 } else {
235                                     _this.$message({
236                                         message: res.message,
237                                         type: "error",
238                                     })
239                                 }
240                             })
241                             .catch(function (error) {
242                                 _this.btnLoading = false;
243                                 _this.$message({
244                                     message: "发生错误" + error,
245                                     type: "error",
246                                 });
247                             });
248                     } else {
249                         return false;
250                     }
251                 });
252             },
253             del: function (row) {
254                 let _this = this;
255                 this.$confirm('将删除用名[' + row.username + '], 是否继续?', '提示', {
256                     confirmButtonText: '确定',
257                     cancelButtonText: '取消',
258                     type: 'warning'
259                 }).then(() => {
260                     let delUrl = "/api/user/del";
261                     let param = {
262                         id: row.id,
263                     };
264                     Vue.axios.post(delUrl, param)
265                         .then(function (res) {
266                             _this.btnLoading = false;
267                             if (res.status === 200) {
268                                 let result = res.data;
269                                 if (result.success) {
270                                     _this.$message({
271                                         type: 'success',
272                                         message: '删除成功!'
273                                     });
274                                     _this.queryList();
275                                 } else {
276                                     _this.$message({
277                                         message: result.message,
278                                         type: "error",
279                                     })
280                                 }
281                             } else {
282                                 _this.$message({
283                                     message: res.message,
284                                     type: "error",
285                                 })
286                             }
287                         })
288                         .catch(function (error) {
289                             _this.btnLoading = false;
290                             _this.$message({
291                                 message: "发生错误" + error,
292                                 type: "error",
293                             });
294                         });
295                 });
296             },
297             edit: function (row) {
298                 let _this = this;
299                 let editUrl = "/api/user/get";
300                 let param = {
301                     id: row.id,
302                 }
303                 Vue.axios.post(editUrl, param)
304                     .then(function (res) {
305                         _this.loading = false;
306                         if (res.status === 200) {
307                             let result = res.data;
308                             if (result.success) {
309                                 _this.dialogFormEditVisible = true;
310                                 _this.formEdit.id = result.data.id;
311                                 _this.formEdit.username = result.data.username;
312                                 _this.formEdit.realname = result.data.realname;
313                                 _this.formEdit.mail = result.data.mail;
314                                 _this.formEdit.sex = result.data.sex;
315                                 _this.formEdit.phone = result.data.phone;
316                                 _this.formEdit.remarks = result.data.remarks;
317                             } else {
318                                 _this.$message({
319                                     message: result.message,
320                                     type: "error",
321                                 });
322                             }
323                         } else {
324                             _this.$message({
325                                 message: res.message,
326                                 type: "error",
327                             });
328                         }
329                     })
330                     .catch(function (error) {
331                         _this.$message({
332                             message: "发生错误" + error,
333                             type: "error",
334                         })
335                     });
336             },
337             saveEdit: function () {
338                 var _this = this;
339                 this.$refs["formEdit"].validate(valid => {
340                     if (valid) {
341                         let param = {
342                             id: this.formEdit.id,
343                             username: this.formEdit.username,
344                             realname: this.formEdit.realname,
345                             phone: this.formEdit.phone,
346                             sex: this.formEdit.sex,
347                             mail: this.formEdit.mail,
348                             remarks: this.formEdit.remarks,
349                         }
350                         _this.btnLoading = true;
351                         var addUrl = "/api/user/edit";
352                         Vue.axios.post(addUrl, param)
353                             .then(function (res) {
354                                 _this.btnLoading = false;
355                                 if (res.status === 200) {
356                                     let result = res.data;
357                                     if (result.success) {
358                                         _this.$message({
359                                             message: "保存成功",
360                                             type: "success",
361                                         });
362                                         _this.dialogFormEditVisible = false;
363                                         _this.queryList();
364                                     } else {
365                                         _this.$message({
366                                             message: result.message,
367                                             type: "error",
368                                         })
369                                     }
370                                 } else {
371                                     _this.$message({
372                                         message: res.message,
373                                         type: "error",
374                                     })
375                                 }
376                             })
377                             .catch(function (error) {
378                                 _this.btnLoading = false;
379                                 _this.$message({
380                                     message: "发生错误" + error,
381                                     type: "error",
382                                 });
383                             });
384                     } else {
385                         return false;
386                     }
387                 });
388             },
389             //改变时
390             handleSizeChange(val) {
391                 this.pagination.pageSize = val;
392                 this.queryList();
393             },
394             //条目改变时
395             handleCurrentChange(val) {
396                 this.pagination.currentPage = val;
397                 this.queryList();
398             },
399             search() {
400                 this.pagination.currentPage = 1;
401                 this.queryList();
402             }
403         }
404     }
405 </script>
406 
407 <style scoped>
408 
409 </style>
user.vue
 1 @Api(value = "用户管理", description = "用户管理")
 2 @RestController
 3 @RequestMapping("user")
 4 public class UserController extends BaseController {
 5 
 6     @Autowired
 7     private UserService userService;
 8 
 9     @ApiOperation(value = "用户信息查询", notes = "获取用户信息")
10     @PostMapping("query")
11     public Object queryUser(QueryUser vo, PageVo pageVo) {
12         PageResult users = userService.query(vo, pageVo);
13         return getResultMessage(users);
14     }
15 
16 
17     @ApiOperation(value = "用户信息查询", notes = "保存新增用户")
18     @PostMapping("add")
19     public Object add(User user) {
20         int i = 0;
21         try {
22             i = userService.add(user);
23         } catch (RecordExistenceException ee) {
24             return getResultMessage(false, null, CODE_ERROR, "用户已存在");
25         }
26         if (i > 0) {
27             return getSuccess();
28         } else {
29             return getFail();
30         }
31     }
32 
33     @ApiOperation(value = "用户信息查询", notes = "通过id获取用户记录")
34     @PostMapping("get")
35     public Object get(QueryUser queryUser){
36         User user = userService.get(queryUser);
37         return getResultMessage(user);
38     }
39 
40     @ApiOperation(value = "用户信息查询", notes = "保存修改用户")
41     @PostMapping("edit")
42     public Object edit(User user) {
43         int i = userService.edit(user);
44         if (i > 0) {
45             return getSuccess();
46         } else {
47             return getFail();
48         }
49     }
50 
51     @ApiOperation(value = "用户信息查询", notes = "删除用户")
52     @PostMapping("del")
53     public Object del(User user) {
54         int i = userService.del(user);
55         if (i > 0) {
56             return getSuccess();
57         } else {
58             return getFail();
59         }
60     }
61 
62 }
UserController
 1 public interface UserService {
 2 
 3     PageResult<User> query(QueryUser vo, PageVo pageVo);
 4 
 5     int add(User user);
 6 
 7     int edit(User user);
 8 
 9     int del(User user);
10 
11     User get(QueryUser vo);
12 }
UserService
 1 @Service
 2 public class UserServiceImpl implements UserService {
 3 
 4     @Autowired
 5     private UserMapper userMapper;
 6 
 7     @Override
 8     public PageResult<User> query(QueryUser vo, PageVo pageVo) {
 9         PageHelper.startPage(pageVo);
10         List<User> users = userMapper.select(vo);
11         PageInfo<User> pageInfo = new PageInfo<User>(users);
12         return new PageResult<>(pageInfo);
13     }
14 
15     @Override
16     public int add(User user) {
17         //查询username是否存在
18         QueryUser queryUser = new QueryUser();
19         queryUser.setUsername(user.getUsername());
20         List<User> users = userMapper.select(queryUser);
21         if(users.size()>0){
22             throw new RecordExistenceException();
23         }
24         //不存在时,新增
25         user.setStatus(User.NORMAL);
26         user.setCreateTime(new Date());
27         user.setEditTime(new Date());
28         user.setEditor(1);
29         user.setEditorName("admin");
30         return userMapper.add(user);
31     }
32 
33     @Override
34     public int edit(User user) {
35         user.setEditTime(new Date());
36         user.setEditor(1);
37         user.setEditorName("admin");
38         return userMapper.edit(user);
39     }
40 
41     @Override
42     public int del(User user) {
43         User d = new User();
44         d.setId(user.getId());
45         d.setStatus(User.DELETE);
46         d.setEditTime(new Date());
47         d.setEditor(1);
48         d.setEditorName("admin");
49         return userMapper.edit(d);
50 
51 
52     }
53 
54     @Override
55     public User get(QueryUser vo) {
56         return userMapper.get(vo);
57     }
58 }
UserServiceImpl
 1 @Mapper
 2 public interface UserMapper {
 3     List<User> select(QueryUser vo);
 4 
 5     int add(User user);
 6 
 7     int edit(User user);
 8 
 9     User get(QueryUser vo);
10 }
UserMapper
 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 3 <mapper namespace="xyz.txfan.tqms.mng.mapper.UserMapper">
 4     <resultMap type="xyz.txfan.tqms.mng.entity.model.User" id="UserResultMap">
 5         <id column="id" property="id"/>
 6         <result column="username" property="username"/>
 7         <result column="password" property="password"/>
 8         <result column="salt" property="salt"/>
 9         <result column="realname" property="realname"/>
10         <result column="sex" property="sex"/>
11         <result column="mail" property="mail"/>
12         <result column="phone" property="phone"/>
13         <result column="avatar" property="avatar"/>
14         <result column="remarks" property="remarks"/>
15         <result column="status" property="status"/>
16         <result column="create_time" property="createTime"/>
17         <result column="edit_time" property="editTime"/>
18         <result column="editor" property="editor"/>
19         <result column="editor_name" property="editorName"/>
20         <result column="last_login_time" property="lastLoginTime"/>
21         <result column="last_login_ip" property="lastLoginIp"/>
22     </resultMap>
23     <sql id="columns">
24         id, username, password, salt, realname , sex, mail, phaone, avatar ,remarks, status, create_time,
25         edit_time, editor, editor_name, last_login_time, last_login_ip
26     </sql>
27     <select id="select" resultMap="UserResultMap">
28         select
29         <include refid="columns"/>
30         from ts_user
31         where 1 = 1
32         <if test="username != null and username != ''">
33             and username = #{username}
34         </if>
35         <if test="user != null and user != ''">
36             <bind name="bName" value="'%'+user+'%'"/>
37             and (username like #{bName}
38               or realname like #{bName})
39         </if>
40     </select>
41     <select id="get" resultMap="UserResultMap" parameterType="xyz.txfan.tqms.mng.entity.model.User">
42         select
43         <include refid="columns"/>
44         from ts_user
45         where id = #{id}
46     </select>
47     <insert id="add" parameterType="xyz.txfan.tqms.mng.entity.model.User">
48         insert into ts_user(username, realname, password, salt,  sex, mail, phone, avatar, remarks, status, create_time, edit_time, editor, editor_name)
49         values(#{username}, #{realname}, #{password}, #{salt}, #{sex}, #{mail}, #{phone}, #{avatar}, #{remarks}, #{status}, #{createTime}, #{editTime}, #{editor}, #{editorName})
50     </insert>
51     <update id="edit" parameterType="xyz.txfan.tqms.mng.entity.model.User">
52         update ts_user
53         <set>
54             <if test="realname!=null and realname!=''">
55                 realname = #{realname},
56             </if>
57             <if test="sex!=null and sex!=''">
58                 sex = #{sex},
59             </if>
60             <if test="mail!=null and mail!=''">
61                 mail = #{mail},
62             </if>
63             <if test="phone!=null and phone!=''">
64                 phone = #{phone},
65             </if>
66             <if test="remarks!=null and remarks!=''">
67                 remarks = #{remarks},
68             </if>
69             <if test="status!=null and status!=''">
70                 status = #{status},
71             </if>
72             edit_time = #{editTime},
73             editor = #{editor},
74             editor_name = #{editorName},
75         </set>
76         where id = #{id}
77     </update>
78 </mapper>
UserMapper.xml
 1 public class QueryUser {
 2     private Integer id;
 3     private String username;
 4     private String user;
 5 
 6     public Integer getId() {
 7         return id;
 8     }
 9 
10     public void setId(Integer id) {
11         this.id = id;
12     }
13 
14     public String getUsername() {
15         return username;
16     }
17 
18     public void setUsername(String username) {
19         this.username = username;
20     }
21 
22     public String getUser() {
23         return user;
24     }
25 
26     public void setUser(String user) {
27         this.user = user;
28     }
29 }
QueryUser

 

posted @ 2019-01-06 16:38  特喜欢  阅读(258)  评论(0编辑  收藏  举报