springboot 中使用 Mybatis 注解 配置 详解

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

传参方式
使用不同的传参方式:

使用@Param
之前博文中的项目使用了这种简单的传参方式:

    @Insert("INSERT INTO T_USER(NAME, PASSWORD, PHONE) VALUES(#{name}, #{password}, #{phone})")int insert(@Param("name") String name, @Param("password") String password, @Param("phone") String phone);

理解: @Param中定义了name对应了sql中的#{name}, password 对应了sql中的#{password}, phone 对应了sql中的 #{phone}。

使用Map
通过Map对象来传递参数:   

@Insert("INSERT INTO T_USER(NAME, PASSWORD, PHONE) VALUES(" +"#{name, jdbcType=VARCHAR}, #{password, jdbcType=VARCHAR}, #{phone, jdbcType=VARCHAR})")int insertByMap(Map<String, Object> map);

对于Insert语句中需要的参数,我们只需要在map中填入同名的内容即可,具体如下面代码所示:

Map<String, Object> map = new HashMap<>();map.put("name","王五");map.put("password","23423");map.put("phone", "13400000000");userMapper.insertByMap(map);

使用对象
如果我们使用普通的java对象作为查询条件的参数:

@Insert("INSERT INTO T_USER(NAME, PASSWORD, PHONE) VALUES(#{name}, #{password}, #{phone})")int insertByUser(User user);

只需要语句中的#{name}、#{age}就分别对应了User对象中的name和age属性。

    User u = new User();u.setName("赵六");u.setPassword("12312312");u.setPhone("13888888888");userMapper.insertByUser(u);

增删改查
MyBatis针对不同的数据库操作分别提供了不同的注解来进行配置,在之前的示例中演示了@Insert,下面针对User表做一组最基本的增删改查作为示例:   

@Select("SELECT * FROM T_USER WHERE PHONE = #{phone}")User findUserByPhone(@Param("phone") String phone);@Insert("INSERT INTO T_USER(NAME, PASSWORD, PHONE) VALUES(#{name}, #{password}, #{phone})")int insertByUser(User user);@Update("UPDATE T_USER SET NAME = #{name}, PASSWORD = #{password} WHERE PHONE = #{phone}")void update(User user);@Delete("DELETE FROM T_USER WHERE ID = #{id}")void delete(Integer id);

进行测试:

package com.winterchen;import com.winterchen.domain.User;
import com.winterchen.mapper.UserMapper;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;import java.util.HashMap;
import java.util.Map;@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootMybatisDemo2ApplicationTests {@Autowiredprivate UserMapper userMapper;@Test@Transactionalpublic void test3(){userMapper.insert("张三", "123456", "18600000000");User u = userMapper.findUserByPhone("18600000000");Assert.assertEquals("123456", u.getPassword());u.setName("赵六");u.setPassword("12312312");userMapper.update(u);u = userMapper.findUserByPhone("18600000000");Assert.assertEquals("12312312", u.getPassword());userMapper.delete(u.getId());u = userMapper.findUserByPhone("18600000000");Assert.assertEquals(null, u);}
}

注意:当使用@Transactional进行了事务管理,在单元测试结束之后会自动回滚,所以,测试跑完之后数据库中没有数据。所以只要测试通过了就没有问题了。

返回结果绑定
对于增、删、改操作相对变化较小。而对于“查”操作,我们往往需要进行多表关联,汇总计算等操作,那么对于查询的结果往往就不再是简单的实体对象了,往往需要返回一个与数据库实体不同的包装类,那么对于这类情况,就可以通过@Results和@Result注解来进行绑定,具体如下:

    @Results({@Result(property = "name", column = "NAME"),@Result(property = "password", column = "PASSWORD"),@Result(property = "phone", column = "PHONE")})@Select("SELECT NAME, PASSWORD, PHONE FROM T_USER")List<User> findAll();

在上面代码中,@Result中的property属性对应User对象中的成员名,column对应SELECT出的字段名。在该配置中故意没有查出id属性,只对User对应中的name,password,phone对象做了映射配置,这样可以通过下面的单元测试来验证查出的id为null,而其他属性不为null:

@Test@Transactionalpublic void test4(){userMapper.insert("张三", "123456", "18600000000");userMapper.insert("李四", "123456", "13500000000");List<User> list = userMapper.findAll();Assert.assertEquals(2, list.size());}


--------------------- 

转自:https://blog.csdn.net/winter_chen001/article/details/78623700 
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/447947.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mongodb数据库的备份与恢复

先介绍下命令语法&#xff1a; ./mongodump -h 127.0.0.1:10001 -d lietou -o /usr/local/data -h&#xff1a;MongDB所在服务器地址&#xff0c;例如&#xff1a;127.0.0.1&#xff0c;当然也可以指定端口号&#xff1a;127.0.0.1:10001 -d&#xff1a;需要备份的数据库实例…

OpenCL 第6课:矩阵转置

上一节我们写了个一维向量相加的程序。这节我们来看一个44矩阵转置程序。 4X4矩阵我们采用二维数组进行存储&#xff0c;在程序设计上&#xff0c;我们让转置过程分4次转置完成&#xff0c;就是一次转一行。注意这里的OpenCL的工作维数是二维。&#xff08;当然用一维的方式也…

springboot 系列技术教程目录

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、教程目录地址&#xff1a; springboot系列技术教程目录 二、教程内容&#xff1a; springboot2.X系列&#xff1a; springboot整…

OpenCL 第7课:旋转变换(1)

旋转是一个常用的处理功能。图片中所有的点以某一个点为轴&#xff0c;顺时或逆时方向旋转N个角度。我们利用OpenCL就可以对图片中所有的点进行并行转换&#xff0c;大大提高效率。 上两节中&#xff0c;我们编写了CL文件来传递数组的地址&#xff0c;这一节中我们会多加入几个…

WinForms多线程编程之摇奖程序

利用多线程模拟一个电脑摇奖程序&#xff0c;如图所示。在点击【滚动号码】&#xff0c;启动线程&#xff0c;对后台的电话号码进行循环显示&#xff1b;点击【开奖】按钮&#xff0c;关闭线程&#xff0c;此时显示在文本框中的电话号码即为中奖号码 using System;using System…

idea 版本控制忽略文件、文件夹设置

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 setting 中&#xff1a; 或者底部的 设置 忽略某个文件 后面选择框可以去选择 忽略某个文件夹 后面选择框可以去选择 忽略某种文件 后面…

Windows Azure HandBook (1) IaaS相关技术

《Windows Azure Platform 系列文章目录》 1.Microsoft Azure底层是否由System Center和Hyper-V构成? Microsoft Azure虽然支持Hyper-V的VHD直接上传至Azure云端进行管理&#xff0c;但是Azure底层技术是微软自己研发的、独有的技术&#xff0c;且不对外提供。如果客户想构建属…

OpenCL 第8课:旋转变换(2)

上两节课都是对一个数组进行处理。这节我们来个有意思的。同样是旋转。但我们旋转的对象是张&#xff08;&#xff12;&#xff15;&#xff16;*&#xff12;&#xff15;&#xff16;&#xff09;的图片。图片旋转&#xff14;&#xff15;度&#xff0c;旋转后大小还是&…

VUE: 当前页面 引用自定义公用样式 (:style=“样式名“)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 在当前页面&#xff0c;自行定义了几个样式&#xff0c;在不同地方引用。 2. 实现代码。 样式定义&#xff1a; data() {return {i…

免费的api接口

欢迎大家加群讨论&#xff1a;地址&#xff1a;https://www.apiopen.top 为了方便各类开发者&#xff0c;现提供免费开放Api接口&#xff0c;所有接口均无使用限制&#xff0c;返回格式全是JSON&#xff0c;所以基本能满足大家的开发需求&#xff0c;但请各位不要将这些Api接入…

养成这8个好习惯 开车会很安全的

第一&#xff0c;过路口时减速左右看——要养成过口子时&#xff0c;不管有没有红绿灯&#xff0c;也不管自己的行道是绿灯&#xff0c;都要左顾右盼&#xff08;同时要减速&#xff09;的习惯&#xff0c;观察在横道上的车辆情况&#xff0c;确认没有车横冲&#xff0c;才加速…

css background-attachment:fixed 固定背景、不随内容一起滚动

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 兼容性&#xff1a;全兼容&#xff0c;只不过IE滚动时会有一点不流畅。 background-attachment 有 3 个选项&#xff1a;scroll / fix…

Javacript和AngularJS中的Promises

promise是Javascript异步编程很好的解决方案。对于一个异步方法&#xff0c;执行一个回调函数。比如页面调用google地图的api时就使用到了promise。 function success(position){var cords position.coords;console.log(coords.latitude coords.longitude); }function error(…

男人沉默的真实原因

英国社会学家马克经过调查发现&#xff1a;男人每天的说话量&#xff0c;是女人的一半。但男人们也大多用于朋友圈中、工作中&#xff0c;而与爱人的聊天交流&#xff0c;每天可能不足15分钟&#xff0c;用词量不超过10%。 其实&#xff0c;男人有很多缄默的方法&#xff0c;每…

Visual Studio 使用说明文档、VScode 使用手册

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 我只是记录下地址&#xff0c;方便自已以后查看&#xff1a; Visual Studio 使用文档 内容如&#xff1a;

JAVA File的创建及相对路径绝对路径

JAVA File的创建及相对路径绝对路径 转载自 http://blog.sina.com.cn/s/blog_9386f17b0100w2vv.htmlFile f new File("D:/test/mytest.txt");//当执行这句话后在内存的栈空间存在一个f的应用&#xff0c;在堆空间里存在一个mytest.txt对象。注意 这个对象只含有文件…

肾有多好人就有多年轻 男女通用的补肾秘方

每天都坚持喝一碗&#xff0c;现在已经连续喝了三个多星期了&#xff0c;以前有好些白发的地方居然没有复发&#xff0c;而且现在一根也没有啊&#xff0c;我真的很开心。不仅白头发不见了&#xff0c;而且皮肤变白皙和光滑了好多&#xff0c;气色也比原来好了!好东西要大家分享…

Object.keys() Object.values()

Object.keys() //返回对象中各个键值对的键(key) Object.values() //返回对象中各个键值对的值(value) var obj { foo: "bar", baz: 42 };Object.keys(obj) // ["foo", "baz"]Object.values(obj) // ["ba…

vue 解决: *!!vue-style-loader!css-loader?{“sourceMap“:true}!../../../../vue-loader

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 问题描述 *!!vue-style-loader!css-loader?{“sourceMap”:true}!../../../../vue-loader/lib/style-compiler/index?{“vue”:true,…

计算机专业 程序员技术练级攻略(转载)

程序员技术练级攻略转载自: https://coolshell.cn/articles/4990.html 前言 你是否觉得自己从学校毕业的时候只做过小玩具一样的程序&#xff1f;走入职场后哪怕没有什么经验也可以把以下这些课外练习走一遍&#xff08;朋友的抱怨&#xff1a;学校课程总是从理论出发&#xff…