提示:

Mapper配置文件的命名空间为对应接口包名+接口名字,这个经常会忘记和搞错的!!


select标签

在接口中编写三个查询方法

  1. //获取全部用户
    List<User> selectUser();
  2.  
  3. //根据id查询用户
    User getUserByID(int id);
  4.  
  5. //根据一个对象查询
    User getUserByUser(User user);

标签信息

  1. <select id="" parameterType="" resultType="" resultMap="">
  2. -- sql语句 (#{name}--这个格式能获取方法参数与sql语句整合)
  3. </select>

id:对应接口对应方法名字

parameterType:为参数类型

resultType:查询结果返回类型

resultMap:手动映射查询结果(之后随笔会介绍)

UserMapper.xml中select语句:

  1. <select id="selectUser" resultType="com.ttt.pojo.User" >
  2. select * from mybatis.user
  3. </select>
  4.  
  5. <select id="getUserByID" parameterType="int" resultType="com.ttt.pojo.User">
  6. select * from mybatis.user where id=#{id}
  7. </select>
  8.  
  9. <select id="getUserByUser" parameterType="com.ttt.pojo.User" resultType="com.ttt.pojo.User">
  10. select * from mybatis.user where name=#{name}
  11. </select>

1、若返回结果为一个集合,那么返回类型就填返回集合里对象类型。

2、在接口方法的参数前加 @Param属性 ,Sql语句编写的时候,直接取@Param中设置的值即可,不需要单独设置参数类型

例如:

  1. //通过密码和名字查询用户
  2. User selectUserByNP(@Param("username") String username,@Param("pwd") String pwd);
  3. /*
  4. <select id="selectUserByNP" resultType="com.ttt.pojo.User">
  5. select * from user where name = #{username} and pwd = #{pwd}
  6. </select>
  7. */

测试语句:

  1. @Test
  2. public void test01(){
  3. SqlSession sqlSession = MybatisUtils.getSqlSession();
  4.  
  5. UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
  6. List<User> users1 = userMapper.selectUser();
  7. User user2 = userMapper.getUserByID(1);
  8. User user3 = userMapper.getUserByUser(new User(1, "黑子", "123456"));
  9.  
  10. System.out.println("selectUser方法结果:");
  11. for (User user : users1) {
  12. System.out.println(user);
  13. }
  14.  
  15. System.out.println("getUserByID方法结果:");
  16. System.out.println(user2);
  17.  
  18. System.out.println("getUserByUser方法结果:");
  19. System.out.println(user3);
  20.  
  21. sqlSession.close();
  22. }

test


insert标签:

1、在接口添加方法

  1. //insert一个用户
  2. int addUser(User user);

2、UserMapper.xml中insert语句

  1. <insert id="addUser" parameterType="com.ttt.pojo.User">
  2. insert into user(id, name, pwd) values (#{id}, #{name}, #{pwd})
  3. </insert>

3、测试

  1. @Test
  2. public void test04(){
  3. SqlSession sqlSession = MybatisUtils.getSqlSession();
  4. UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
  5.  
  6. userMapper.addUser(new User(4,"demo", "1234" ));
  7. sqlSession.commit();
  8.  
  9. sqlSession.close();
  10. }

test


update标签

1、接口添加方法

  1. //修改用户
  2. int updateUser(User user);

2、UserMapper.xml中update语句

  1. <update id="updateUser" parameterType="com.ttt.pojo.User">
  2. update user set name = #{name}, pwd=#{pwd} where id=#{id} </update>

注:update语句没有返回标签

3、测试

  1. @Test
  2. public void test05(){
  3. SqlSession sqlSession = MybatisUtils.getSqlSession();
  4. UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
  5.  
  6. userMapper.updateUser(new User(4, "绿员君", "123456"));
  7. sqlSession.commit();
  8.  
  9. sqlSession.close();
  10. }

test


delete标签

1、接口中添加方法

  1. //删除一个用户
  2. int deleteUser(int id);

2、UserMapper.xml中delete语句

  1. <delete id="deleteUser" parameterType="int">
  2. delete from mybatis.user where id=#{id};
  3. </delete>

3、测试

  1. @Test
  2. public void test06(){
  3. SqlSession sqlSession = MybatisUtils.getSqlSession();
  4. UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
  5.  
  6. userMapper.deleteUser(4);
  7. sqlSession.commit();
  8.  
  9. sqlSession.close();
  10. }

test


传参技巧--万能map

  1. 在接口方法中,参数直接传递Map  
      1. User selectUserByNP2(Map<String,Object> map);
  1. 编写sql语句的时候,需要传递参数类型,参数类型为map

      1. <select id="selectUserByNP2" parameterType="map" resultType="com.ttt.pojo.User">
      2. select * from user where name = #{username} and pwd = #{pwd}
      3. </select>
  2. 在使用方法的时候,Map的 key 为 sql中取的值即可,没有顺序要求!

    1. Map<String, Object> map = new HashMap<String, Object>();
    2. map.put("username","小明");
    3. map.put("pwd","123456");
    4. User user = mapper.selectUserByNP2(map);

  如果参数太多,我们可以使用map实现,而参数太少了,就直接传递参数即可。


小结:

  • 所有的增删改操作都需要提交事务!
  • 接口所有的普通参数,尽量都写上@Param参数,尤其是多个参数时,必须写上!
  • 有时候根据业务的需求,可以考虑使用map传递参数!
  • 为了规范操作,在SQL的配置文件中,我们尽量将Parameter参数和resultType都写上!

Mybatis:CRUD操作的更多相关文章

  1. MyBatis crud操作

    Test2.java package com.mycom.mybatis_1.crud; import java.util.List; import org.apache.ibatis.session ...

  2. 使用MyBatis对表执行CRUD操作

    一.使用MyBatis对表执行CRUD操作——基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: <?xml version="1.0&quo ...

  3. MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作(转载)

    本文转载自:http://www.cnblogs.com/jpf-java/p/6013540.html 上一篇博文MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybati ...

  4. MyBatis入门学习教程-使用MyBatis对表执行CRUD操作

    上一篇MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对use ...

  5. MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

    一.使用MyBatis对表执行CRUD操作--基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: 1 <?xml version="1.0&q ...

  6. MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

    上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对u ...

  7. mybatis(二)执行CRUD操作的两种方式配置和注解

    一.使用MyBatis对表执行CRUD操作——基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: <?xml version="1.0&quo ...

  8. MyBatis学习总结_02_使用MyBatis对表执行CRUD操作

    一.使用MyBatis对表执行CRUD操作——基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: 1 <?xml version="1.0&q ...

  9. 【转】MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

    [转]MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作 上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据, ...

  10. Mybatis的学习总结二:使用Mybatis对表进行CRUD操作【参考】

    一.使用Mybatis对表进行CRUD操作------基于XML的实现 1.定义SQL的映射文件 2.在conf.xml中进行注册. 2.创建测试类 [具体过程参考:Mybatis的学习总结一] 二. ...

随机推荐

  1. Hadoop 学习笔记之 Incompatible namespaceIDs问题

    Hadoop重新格式化后,仍然datanode启动失败,查看log: org.apache.hadoop.hdfs.server.datanode.DataNode: Java.io.IOExcept ...

  2. MySQL8安装及使用当中的一些注意事项

    前言 这两天构建新项目,在本地安装的mysql8(本地环境windows),期间忘了密码,又卸载重装了一番,然后捣鼓了一顿授权给别人访问,最后磕磕绊绊的搞好了,下面是在这过程中遇到的问题及解决办法小结 ...

  3. Spring Boot (十四): 响应式编程以及 Spring Boot Webflux 快速入门

    1. 什么是响应式编程 在计算机中,响应式编程或反应式编程(英语:Reactive programming)是一种面向数据流和变化传播的编程范式.这意味着可以在编程语言中很方便地表达静态或动态的数据流 ...

  4. 利用procedure批量插入数据

    正文   要求在页面查询到5000条数据,为了方便插入,准备用shell脚本写curl命令调用自己写的代码接口,但是速度慢,而且写的时候遇到点儿小问题,故用sql语句写了这个功能   由于operat ...

  5. hibernate 搭建框架

    需要用的包 Hibernate的日志记录: * Hibernate日志记录使用了一个slf4j: * SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具 ...

  6. Spring Boot 常用注解汇总

    一.启动注解 @SpringBootApplication @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documen ...

  7. 章节十七章、2- 给执行失败的case截图

    一.案例演示 1.首先我们把截图的方法单独进行封装方便以后调用. package utilities; import java.io.File; import java.io.IOException; ...

  8. java位运算,逻辑运算符

    位运算逻辑运算符包括: 与(&),非(~),或(|),异或(^). &:  条件1&条件2  ,只有条件1和条件2都满足, 整个表达式才为真true,  只要有1个为false ...

  9. 华为路由vlan划分透传和回城路由配置

    整整一个星期才整明白,刚开始是路由器ip地址配置在 interface Ethernet0/0/0这个接口能配置但不能用,死在了回城路由上,pc1 ping pc2就是不同,很疑惑,请教了大神,原来没 ...

  10. Spring Security 入门 (二)

    我们在篇(一)中已经谈到了默认的登录页面以及默认的登录账号和密码. 在这一篇中我们将自己定义登录页面及账号密码. 我们先从简单的开始吧:设置自定义的账号和密码(并非从数据库读取),虽然意义不大. 上一 ...