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

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

使用@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

springboot 中使用 Mybatis 注解 配置 详解相关推荐

  1. Spring Boot中使用MyBatis注解配置详解

    之前在Spring Boot中整合MyBatis时,采用了注解的配置方式,相信很多人还是比较喜欢这种优雅的方式的,也收到不少读者朋友的反馈和问题,主要集中于针对各种场景下注解如何使用,下面就对几种常见 ...

  2. SpringBoot配置文件中spring.profiles.active配置详解

    SpringBoot配置文件中spring.profiles.active配置详解 1.多环境配置 我们在开发Spring Boot应用时,通常同一套程序会被应用和安装到几个不同的环境,比如:开发.测 ...

  3. spring之旅第四篇-注解配置详解

    spring之旅第四篇-注解配置详解 一.引言 最近因为找工作,导致很长时间没有更新,找工作的时候你会明白浪费的时间后面都是要还的,现在的每一点努力,将来也会给你回报的,但行好事,莫问前程!努力总不会 ...

  4. Linux中Nginx安装与配置详解及常见问题

    3 Nginx安装 3.1 安装前的准备     1)准备 pcre-8.12.tar.gz.该文件为正则表达式库.让nginx支持rewrite需要安装这个库.     2) 准备 nginx-1. ...

  5. servlet过滤器中的注解配置详解

    文章目录 注解配置@WebFilter中的属性 1. urlPatterns 2. initParams 3. dispatcherTypes 多个过滤器的执行顺序 销毁阶段的触发机制 注解配置@We ...

  6. AOP底层原理与注解配置详解

    注解开发AOP制作步骤: 在XML格式基础上 导入坐标(伴随spring-context坐标导入已经依赖导入完成 开启AOP注解支持 配置切面@Aspect 定义专用的切入点方法,并配置切入点@Poi ...

  7. Http请求中Content-Type讲解以及在Spring MVC注解中produce和consumes配置详解

    转载自https://blog.csdn.net/shinebar/article/details/54408020 引言: 在Http请求中,我们每天都在使用Content-type来指定不同格式的 ...

  8. 从Spring到SpringBoot构建WEB MVC核心配置详解

    目录 理解Spring WEB MVC架构的演变 认识Spring WEB MVC 传统时代的Spring WEB MVC 新时代Spring WEB MVC SpringBoot简化WEB MVC开 ...

  9. SpringMVC原理及非注解配置详解

    如需转发请标明出处:http://www.cnblogs.com/gudu1/p/7222556.html 1. Spring介绍 Spring MVC是Spring提供的一个强大而灵活的web框架. ...

最新文章

  1. 7. Query Expressions(查询表达式)
  2. js获取asp.net服务器端控件Label,TextBox,RadioButtonList,DropDownList的值
  3. 皮一皮:这是传说盖浇饭中的天花板~白粥盖浇饭...
  4. 计算机网络学习--交换机和路由器转发数据原理
  5. 关于Transformer,面试官们都怎么问?
  6. wx:for-item循环数组失败
  7. 批处理之坑爹的感叹号和变量延迟扩展
  8. 第5章 Python 数字图像处理(DIP) - 图像复原与重建6 - 椒盐噪声
  9. java criteria exist_Java Criteria.addExists方法代碼示例
  10. Mac升级emacs26
  11. 十、Oracle学习笔记:基本查询语句各子句用法
  12. python计算器算法_Python数学运算入门把Python当作计算器
  13. Golang ------ torrent文件解析
  14. 零基础入门:基于开源WebRTC,从0到1实现实时音视频聊天功能
  15. 量子计算机的成熟度模型,全球首家:紫光展锐通过 TMMi 软件测试成熟度模型集成 5 级认证...
  16. opensparc中的crossbar
  17. css音量调节,CSS3 音量调节旋钮
  18. 【设计】死区时间控制
  19. 水清冷冷:PSCC2019/PSCC2020安装教程和学习技巧(附工具)
  20. Rstudio的安装操作

热门文章

  1. 【转】2.1 SharePoint服务器端对象模型 之 访问网站和列表数据(Part 1)
  2. 多标签文本分类数据集_标签感知的文档表示用于多标签文本分类(EMNLP 2019)...
  3. JAVA-入门(内含jdk配置)
  4. REVERSE-PRACTICE-BUUCTF-2
  5. 【UVALive - 3126】Taxi Cab Scheme (二分图,最小路径覆盖)
  6. php实现播放直播_PHP直播技术分享(一:实现直播)
  7. mysql权重怎么配置_mysql如何按权重查询数据啊?
  8. 任意阶魔方阵matlab程序,【精品】任意阶魔方阵算法(c语言)
  9. linux emule 编译 wx-config --libs,LeezPi-RK3399_Android9编译说明
  10. kettle增加字段报错_【实战】使用 Kettle 工具将 mysql 数据增量导入到 MongoDB 中