4、CURD操作

1、查询

  • 根据用户 Id查询用户
  1. 在UserMapper中添加对应方法
  1. public interface UserMapper {
  2. List<User> getUserList();
  3. List<User> getUserListById(int id);
  4. }

2、在UserMapper.xml中添加Select语句

  1. <select id="getUserListById" resultType="com.feng.pojo.User" parameterType="int">
  2. select * from User where id=#{id}
  3. </select>

3、测试类中测试

  1. @Test
  2. public void testgetUserById()
  3. {
  4. SqlSession sqlSession = MyBatisUtil.getSession();
  5. UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
  6. List<User> userList = userMapper.getUserListById(1);
  7. for (User user : userList) {
  8. System.out.println(user);
  9. }
  10. sqlSession.close();
  11. }
  • 根据用户名和密码获取用户

思路一:直接在方法中传递参数(注解)

1、在接口方法的参数前加 @Param属性

2、Sql语句编写的时候,直接取@Param中设置的值即可,不需要单独设置参数类型

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

思路二:使用万能的Map

1、在接口方法中,参数直接传递Map;

  1. User selectUserByMP(Map<String,Object> map);

2、编写sql语句的时候,需要传递参数类型,参数类型为map

  1. <select id="selectUserByMP" parameterType="map" resultType="com.deng.pojo.User">
  2. select * from user where name = #{username} and pwd = #{pwd}
  3. </select>

3、在使用方法的时候,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实现,如果参数比较少,直接传递参数即可

2、增加

1、在UserMapper接口中添加对应的方法

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

2、在UserMapper.xml中添加insert语句

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

3、测试

  1. @Test
  2. public void testAddUser() {
  3. SqlSession session = MybatisUtils.getSession();
  4. UserMapper mapper = session.getMapper(UserMapper.class);
  5. User user = new User(5,"王五","zxcvbn");
  6. int i = mapper.addUser(user);
  7. System.out.println(i);
  8. session.commit(); //提交事务,重点!不写的话不会提交到数据库
  9. session.close();
  10. }

注意点:增、删、改操作需要提交事务!

3、更新

我们一般使用update标签进行更新操作,它的配置和select标签差不多!

需求:修改用户的信息

1、同理,编写接口方法

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

2、编写对应的配置文件SQL

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

3、测试

  1. @Test
  2. public void testUpdateUser() {
  3. SqlSession session = MybatisUtils.getSession();
  4. UserMapper mapper = session.getMapper(UserMapper.class);
  5. User user = mapper.selectUserById(1);
  6. user.setPwd("asdfgh");
  7. int i = mapper.updateUser(user);
  8. System.out.println(i);
  9. session.commit(); //提交事务,重点!不写的话不会提交到数据库
  10. session.close();
  11. }

4、删除

我们一般使用delete标签进行删除操作,它的配置和select标签差不多!

需求:根据id删除一个用户

1、同理,编写接口方法

  1. //根据id删除用户
  2. int deleteUser(int id);

2、编写对应的配置文件SQL

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

3、测试

  1. @Test
  2. public void testDeleteUser() {
  3. SqlSession session = MybatisUtils.getSession();
  4. UserMapper mapper = session.getMapper(UserMapper.class);
  5. int i = mapper.deleteUser(5);
  6. System.out.println(i);
  7. session.commit(); //提交事务,重点!不写的话不会提交到数据库
  8. session.close();
  9. }

小结:

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

思考题

模糊查询like语句该怎么写?

第1种:在Java代码中添加sql通配符。

  1. string wildcardname = “%smi%”;
  2. list<name> names = mapper.selectlike(wildcardname);
  3. <select id=”selectlike”>
  4. select * from foo where bar like #{value}
  5. </select>

第2种:在sql语句中拼接通配符,会引起sql注入

  1. string wildcardname = smi”;
  2. list<name> names = mapper.selectlike(wildcardname);
  3. <select id=”selectlike”>
  4. select * from foo where bar like "%"#{value}"%"
  5. </select>

3、MyBatis教程之CURD操作的更多相关文章

  1. MyBatis 单表CURD操作(五)

    MyBatis的CURD操作 添加CURD接口方法 package mapper; import entity.UserEntity; import org.apache.ibatis.annotat ...

  2. springboot整合mybatis及封装curd操作-配置文件

    1 配置文件  application.properties  #server server.port=8090 server.address=127.0.0.1 server.session.tim ...

  3. WCF系列教程之WCF操作协定

    一.简介 1.在定义服务协定时,在它的操作方法上都会加上OperationContract特性,此特性属于OperationContractAttribute 类,将OperationContract ...

  4. 5、MyBatis教程之ResultMap

    6.ResultMap 要解决的问题:属性名和字段名不一致 1.查看之前的数据库的字段名 2.Java中的实体类设计 public class User { private int id; //id ...

  5. Pandas高级教程之:window操作

    目录 简介 滚动窗口 Center window Weighted window 加权窗口 扩展窗口 指数加权窗口 简介 在数据统计中,经常需要进行一些范围操作,这些范围我们可以称之为一个window ...

  6. HealthKit开发快速入门教程之HealthKit数据的操作

    HealthKit开发快速入门教程之HealthKit数据的操作 数据的表示 在HealthKit中,数据是最核心的元素.通过分析数据,人们可以看到相关的健康信息.例如,通过统计步数数据,人们可以知道 ...

  7. Mybatis学习第一天——Mybatis的安装配置以及基本CURD操作

    1.Mybatis下载 Mybatis是开源的持久层框架,能够度jdbc进行简单的封装,但其并不是完全的ORM(Object Relational Mapping,对象关系映射),无法脱离数据库进行适 ...

  8. 通过Mybatis原始Dao来实现curd操作

    环境的配置见我上一篇博客. 首先,在上一篇博客中,我们知道,SqlSession中封装了对数据库的curd操作,通过sqlSessionFactory可以创建SqlSession,而SqlSessio ...

  9. jQuery EasyUI教程之datagrid应用(三)

    今天继续之前的整理,上篇整理了datagrid的数据显示及其分页功能 获取数据库数据显示在datagrid中:jQuery EasyUI教程之datagrid应用(一) datagrid实现分页功能: ...

随机推荐

  1. 数理统计11:区间估计,t分布,F分布

    在之前的十篇文章中,我们用了九篇文章的篇幅讨论了点估计的相关知识,现在来稍作回顾. 首先,我们讨论了正态分布两个参数--均值.方差的点估计,给出了它们的分布信息,并指出它们是相互独立的:然后,我们讨论 ...

  2. 买车交税 All In One

    中国买车交税 All In One 消费税 增值税 车辆购置税 车船税 关税 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问! 原 ...

  3. adjust All In One

    adjust All In One 调整 https://www.adjust.com/ Maximize the impact of your mobile marketing Adjust is ...

  4. Adobe DreamWeaver CC 快捷键

    1 1 ADOBE DREAMWEAVER CC Shortcuts: DREAMWEAVER CC DOCUMENT EDITING SHORTCUTS Select Dreamweaver > ...

  5. js 快速排序 All In One

    js 快速排序 All In One 快速排序 / Quick Sort "use strict"; /** * * @author xgqfrms * @license MIT ...

  6. React Hooks: useReducer All In One

    React Hooks: useReducer All In One useReducer https://reactjs.org/docs/hooks-reference.html#usereduc ...

  7. Unicode & \u2028 & \u2029

    Unicode \u2028 & \u2029 https://stackoverflow.com/questions/16686687/json-stringify-and-u2028-u2 ...

  8. nginx proxy

    listen 80; server_name localhost; # 访问"localhost"的全部请求会被转发到"localhost:81" # loca ...

  9. Flutter使用WebSockets

    文档 注意是WebSockets而不是socket.io install dependencies: web_socket_channel: demo import 'dart:convert'; i ...

  10. Flutter Demo: 径向菜单动画

    video import 'dart:math'; import 'package:flutter/material.dart'; import 'package:vector_math/vector ...