Mybatis从小白到小黑(二)Mybatis增删改查,这一篇足以

简介: Mybatis实现增删改查很简单,在前面一篇博客中已经把mybatis的环境搭建完成,这里就直接进行增删改查

微信搜索《Java鱼仔》,每天一个技术难点不错过


在前面一章中我们对mybatis的基本环境进行了配置,并实现了最简单的select语句查询,在这一章中,我将对Mybatis实现更多复杂查询以及优化进行讲解。


(一)xml结构分析


通过下面这个例子先对mapper.xml结构进行讲解


<mappernamespace="com.javayz.mapper.UserMapper"><selectid="getUserById"resultType="com.javayz.pojo.User"parameterType="int">        select * from user where id=#{id};
</select></mapper>

namespace:在XXXmapper.xml中,我们首先需要通过namespace定位接口,这里要填的是这个xml所对应的接口全限定名。


id:id对应于namespace接口下的方法名


resultType:resultType对应于返回值类型,这里返回的是User,就需要写上User的全限定名。


parameterType:参数类型,这里我们通过id查询,所以参数填写的是int 另外还有一个面试题中会出现的问题,#{}和${}有什么区别:


1、#{  }是预编译处理,MyBatis在处理#{  }时,它会将sql中的#{  }替换为?,然后调用PreparedStatement的set方法来赋值;


2、${  }是字符串替换, MyBatis在处理${  }时,它会将sql中的${  }替换为变量的值。


更多关于xml映射的内容可以参考官方中文文档对这部分的解释,十分详细。


mybatis.org/mybatis-3/z…


(二)Mybatis基本增删改查


Mybatis实现增删改查很简单,在前面一篇博客中已经把mybatis的环境搭建完成,这里就直接进行增删改查:


首先在UserMapper下新建四个接口实现增删改查:


publicinterfaceUserMapper {
//根据id查询用户UsergetUserById(intid);
//插入一个用户intinsertUser(Useruser);
//更新用户名intupdateUser(Useruser);
//删除该用户intdeleteUser(intid);
}

在对应的UserMapper.xml中编写sql

<mappernamespace="com.javayz.mapper.UserMapper"><selectid="getUserById"resultType="com.javayz.pojo.User"parameterType="int">        select * from user where id=#{id};
</select><insertid="insertUser"parameterType="com.javayz.pojo.User">        insert into user(id,name) values(#{id},#{name});
</insert><updateid="updateUser"parameterType="com.javayz.pojo.User">        update user set name = #{name} where id = #{id};
</update><deleteid="deleteUser"parameterType="int">        delete from user where id = #{id};
</delete></mapper>

最后编写测试类

@TestpublicvoidtestAll(){
//获取SqlSessionSqlSessionsqlSession=MybatisUtils.getSqlSession();
//执行SqlUserMappermapper=sqlSession.getMapper(UserMapper.class);
//测试查询Useruser=mapper.getUserById(1);
System.out.println(user);
//测试新增Useruser2=newUser(3,"javayz2");
mapper.insertUser(user2);
//注意增删改之后需要调用commit方法sqlSession.commit();
System.out.println(mapper.getUserById(3));
//测试修改Useruser3=newUser(3,"javayz3");
mapper.updateUser(user3);
sqlSession.commit();
System.out.println(mapper.getUserById(3));
//测试删除mapper.deleteUser(3);
sqlSession.commit();
System.out.println(mapper.getUserById(3));
}

最后结果如下:


网络异常,图片无法展示
|


需要注意的是,在增删改之后,需要执行sqlSession.commit();提交事务。


(三)使用Map传入更多参数


在前面基本增删改查中,我们传入的parameterType都是一种类型,比如int,或者是User,但是更多时候我们传入sql中的参数不会这样简单,所以Map很完美的解决了这个问题。


新建一个传入map新建用户的接口方法:


//使用map插入一个用户intinsertUserByMap(Map<String,Object>map);

在对应的xml中编写sql语句,注意将parameterType替换为map

<insertid="insertUserByMap"parameterType="map">    insert into user(id,name) values(#{id},#{name});
</insert>

这里传入的值就是map里定义的键值对,map传递数据,只需要取出对应的key就可以了,测试一下:


@TestpublicvoidtestInsertByMap(){
SqlSessionsqlSession=MybatisUtils.getSqlSession();
UserMappermapper=sqlSession.getMapper(UserMapper.class);
Map<String,Object>map=newHashMap<String, Object>();
map.put("id",4);
map.put("name","javayz4");
mapper.insertUserByMap(map);
sqlSession.commit();
}

(四)基于注解的开发实现


基于注解的开发可以让代码逻辑变得很简单,但对于稍微复杂一点的语句,Java 注解不仅力不从心,还会让你本就复杂的 SQL 语句更加混乱不堪,因此如何选择,需要考虑业务场景:


4.1 配置文件中引入接口类

<mappers><mapperclass="com.javayz.mapper.UserMapper"/></mappers>
publicinterfaceUserMapper {
//根据id查询用户@Select("select * from user where id=#{id}")
UsergetUserById(intid);
}

4.3 测试

@TestpublicvoidtestSelect(){
//获取SqlSessionSqlSessionsqlSession=MybatisUtils.getSqlSession();
//执行SqlUserMappermapper=sqlSession.getMapper(UserMapper.class);
Useruser=mapper.getUserById(4);
System.out.println(user);
sqlSession.close();
}

增删改查示例:

//根据id查询用户@Select("select * from user where id=#{id}")
UsergetUserById(intid);
//新增用户@Insert("insert into user values(#{id},#{name})")
intinsertUser(@Param("id")intid,@Param("name")Stringname);
//更新数据@Update("update user set name='java6' where id=#{id}")
intupdateUserById(intid);
//删除数据@Delete("delete from user where id=#{id}")
intdeleteUserById(intid);

在新增用户中,我们这里使用到了@Param注解:当有两个或两个以上参数的时候,必须要加上@Param注解


(五)总结


到这里为止,你已经可以用Mybatis进行增删改查,如果只是做业务,这些就足够了,但是我们怎么只能满足于此,下面开始对Mybatis进行更深入的讲解。



相关文章
|
7月前
|
存储 Java 数据库连接
MyBatis-Plus 基础操作指南:实现高效的增删改查
MyBatis-Plus 基础操作指南:实现高效的增删改查
602 0
|
7月前
|
SQL Java 数据库连接
初识MyBatis(搭建MyBatis、简单增删改查、核心配置文件讲解及获取参数值)
初识MyBatis(搭建MyBatis、简单增删改查、核心配置文件讲解及获取参数值)
141 0
|
7月前
|
SQL Java 数据库连接
用springboot mybatis写一个增删改查
用springboot mybatis写一个增删改查
71 0
|
7月前
|
SQL JavaScript Java
springboot+springm vc+mybatis实现增删改查案例!
springboot+springm vc+mybatis实现增删改查案例!
|
6月前
|
SQL 存储 Java
基于MyBatis的增删改查操作
基于MyBatis的增删改查操作
47 1
|
3月前
|
SQL XML Java
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
文章介绍了MyBatis的简单增删改查操作,包括创建数据表、实体类、配置文件、Mapper接口及其XML文件,并解释了`#{}`预编译参数和`@Param`注解的使用。同时,还涵盖了resultType与resultMap的区别,并提供了完整的代码实例和测试用例。
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
|
6月前
|
SQL 存储 Java
基于MyBatis的增删改查的基础操作
基于MyBatis的增删改查的基础操作
41 0
|
3月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
70 1
|
5月前
|
Java 数据库连接 数据库
mybatis plus 中增删改查及Wrapper的使用
mybatis plus 中增删改查及Wrapper的使用
261 3
|
4月前
|
druid Java 数据库连接
SpringBoot项目整合MybatisPlus持久层框架+Druid数据库连接池,以及实现增删改查功能
SpringBoot项目整合MybatisPlus和Druid数据库连接池,实现基本的增删改查功能。
400 0