为什么80%的码农都做不了架构师?>>>   

一、MyBatis基础操作

(1)不带返回值添加、更新、删除

不带返回值的添加、更新、删除非常的简单。

user.xml中配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.1//EN"  "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd
">
<mapper namespace="User"><insert id="add" parameterType="User">insert into t_user(username,password) values(#{username},#{password})</insert><update id="updateById" parameterType="User">update t_user set username=#{username},password=#{password} where id=#{id}</update><delete id="deleteById" parameterType="User">delete from t_user where id=#{id}</delete>

UserDao.java中代码如下:

//打开连接
sqlSession=sqlSessionFactory.openSession(); //SQL操作开始 ——————————
//添加
sqlSession.insert("add", user);
//更新
sqlSession.update("User.updateById", user);
//删除
sqlSession.delete("User.deleteById", id);
//SQL操作结束//提交数据库更新
sqlSession.commit();
//关闭连接
sqlSession.close();

当user.xml中的id不重复时,可以直接通过id进行调用,如果出现重复,需要按照“namespace.id”的格式调用

(2)查询单条记录

user.xml部分代码如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.1//EN"
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="User"><select id="getById" parameterType="User" resultType="User">select * from t_user where id=#{id} and 1=1</select>
</mapper>

UserDao.java部分代码如下所示:

sqlSession=sqlSessionFactory.openSession();
//查询单条记录
user=(User)sqlSession.selectOne("User.getById",id);
sqlSession.commit();
sqlSession.close();

(3)查询返回List集合

user.xml部分代码如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.1//EN"
"">
<mapper namespace="User"><select id="getAllUser" resultType="User">select * from t_user  </select>
</mapper>

UserDao.java部分代码如下所示:

List<User> users=null;
sqlSession=sqlSessionFactory.openSession();
//获取List集合
users=sqlSession.selectList("User.getAllUser");
sqlSession.commit();
sqlSession.close();

注意,这里的List的命名空间是java.util.List。

(4)查询返回自定义集合

有时候,我们不希望返回所有的集合,而是返回我们需要的数据,这时候,就可以对返回的数据进行自定义。

自定义返回的集合使用<resultMap>标签,如下所示:

<resultMap type="User" id="resultListUser"><id column="id" property="id" /><result column="username" property="username" /><result column="password" property="password" />
</resultMap>

然后通过resultMap="resultListUser"指定返回自定义的数据集合。

注意,resultMap和resultType不能同时存在。

user.xml部分代码如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.1//EN"
"">
<mapper namespace="User"><select id="getCustomAllUser" resultMap="resultListUser">select * from t_user</select><resultMap type="User" id="resultListUser"><id column="id" property="id" /><result column="username" property="username" /><result column="password" property="password" /></resultMap>
</mapper>

UserDao.java部分代码如下所示:

List<User> users=null;
sqlSession=sqlSessionFactory.openSession();
users=sqlSession.selectList("User.getCustomAllUser");
sqlSession.commit();
sqlSession.close();

(5)插入后返回主键

user.xml部分代码如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.1//EN"
"">
<mapper namespace="User"><insert id="insertAndGetId" useGeneratedKeys="true" keyProperty="Id" parameterType="User">insert into t_user(username,password) values(#{username},#{password})</insert>
</mapper>

在这里,useGeneratedKeys="true"表示使用主键自动生成,keyProperty="Id"表示主键的名称为“Id”。

UserDao.java部分代码如下所示:

int id=0;
sqlSession=sqlSessionFactory.openSession();
//插入后返回主键
sqlSession.insert("User.insertAndGetId", user);
sqlSession.commit();
sqlSession.close();
id= user.getId();

友情提示:添加、更新、删除默认的返回值都是受影响的行数。

(6)聚合查询

user.xml部分代码如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.1//EN"
"">
<mapper namespace="User"><select id="countAll" parameterType="User" resultType="int">select count(*) from t_user</select>
</mapper>

UserDao.java部分代码如下所示:

int count=0;
sqlSession=sqlSessionFactory.openSession();//聚合查询
count = Integer.parseInt(String.valueOf(sqlSession.selectOne("User.countAll")));
sqlSession.commit();
sqlSession.close();

(7)调用存储过程

略。

(8)多个参数值问题

在上面的例子中,我们曾经使用User实体来作为多个参数的传入载体。

在Mybatis中,传递多个参数有两种方式:Map对象和Model实体。

本例中,我们采用Map对象来演示:

user.xml部分代码如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.1//EN"
"">
<mapper namespace="User"><select id="params1" parameterType="map"  resultType="User">select * from t_user where username=#{username} and password=#{password}</select>
</mapper>

其中,map是java.util.Map的别名。

UserDao.java部分代码如下所示:

Map<String,Object> map= new HashMap<String, Object>();
map.put("username", "zhangsan");
map.put("password","444");
sqlSession=sqlSessionFactory.openSession();
users=sqlSession.selectList("User.params1",map);
sqlSession.commit();
sqlSession.close();

(9)多表查询返回一个结果集

本例中,我们使用t_user表和t_address表。

user.xml部分代码如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.1//EN"
"">
<mapper namespace="User"><select id="selecttables" resultMap="User_Address">select a.*,b.* from t_user a,t_address bwhere a.Id=b.UserId</select><resultMap type="com.uni2uni.www.Model.User_Address" id="User_Address"><id column="id" property="id" /><result column="Username" property="Username" /><result column="Password" property="Password" /><result column="UserId" property="UserId" /><result column="Address" property="Address" /></resultMap>
</mapper>

UserDao.java部分代码如下所示:

SqlSession sqlSession=null;
List<User_Address> models=null;
sqlSession=sqlSessionFactory.openSession();
models=sqlSession.selectList("User.selecttables");
sqlSession.commit();
sqlSession.close();

二、Demo

下载:http://pan.baidu.com/s/1qWwhx6W

转载于:https://my.oschina.net/wlb/blog/287818

MyBatis之CRUD详解相关推荐

  1. MyBatis SQL语句详解

    MyBatis SQL语句详解 1 CRUD标签 1.1 select 1.2 insert 1.3 update 1.4 delete 1.5 #{ }和${ }的区别 2 动态SQL 2.1 if ...

  2. 封装成jar包_通用源码阅读指导mybatis源码详解:io包

    io包 io包即输入/输出包,负责完成 MyBatis中与输入/输出相关的操作. 说到输入/输出,首先想到的就是对磁盘文件的读写.在 MyBatis的工作中,与磁盘文件的交互主要是对 xml配置文件的 ...

  3. MyBatis核心配置文件详解

    MyBatis核心配置文件详解 1.核心配置文件中的标签必须按照固定的顺序 2.properties标签 3.settings标签 4.typeAliases标签 5.environments标签 6 ...

  4. 如何配置Mybatis?(详解)

    如何配置Mybatis?(详解) 官网文档: https://mybatis.org/mybatis-3/zh/getting-started.html pom.xml <?xml versio ...

  5. Mybatis案例超详解

    Mybatis案例超详解 前言: 本来是想像之前一样继续跟新Mybatis,但由于种种原因,迟迟没有更新,快开学了,学了一个暑假,博客也更新了不少,我觉得我得缓缓,先整合一些案例练练,等我再成熟点理解 ...

  6. Mybatis的特性详解——动态SQL

    Mybatis的特性详解--动态SQL 前言 一.动态sql的元素 1.MyBatis if标签:条件判断 2.MyBatis choose.when和otherwise标签 3.MyBatis wh ...

  7. mybatis的原理详解

    mybatis的原理详解 原理图 执行的原理图如下图所示: 配置文件分析 config.xml: <?xml version="1.0" encoding="UTF ...

  8. MyBatis中resultMap详解

    MyBatis 中 resultMap 详解 resultMap 是 Mybatis 最强大的元素之一,它可以将查询到的复杂数据(比如查询到几个表中数据)映射到一个结果集当中.如在实际应用中,有一个表 ...

  9. Mybatis的入门详解

    mybatis简介 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为M ...

最新文章

  1. android handler作用,Android中Handler的作用
  2. 拯救你的久坐不起!用树莓派改造站立式办公桌:在随机时间升降,还有阻力检测功能...
  3. 2021年春季学期-信号与系统-第十五次作业参考答案-第五小题参考答案
  4. centos mysql 5.6.36_CentOS 6.9 升级MySQL 5.6.36到5.7.18
  5. 解决VS2019窗体设计器不显示
  6. 桔子浏览器电脑版不显示图片怎么办 看不到图片怎么解决
  7. clsq客户端android,Android NDK开发之 arm_neon.h文件ABI说明
  8. 计算机考试辽宁2020,报名辽宁2020年9月计算机考试流程
  9. 【软件】一个简单好用的取色器TakeColor(百度云免费下载链接)
  10. FL Studio最新汉化免费下载 水果音乐制作软件
  11. 如何快速找回丢失的数据?
  12. Docker容器dockerfile构建镜像
  13. 用css hack解决IE5 IE5.5 IE6 Firefox浏览器兼容性
  14. 【小月电子】ALTERA FPGA开发板系统学习教程-LESSON8 LCD1602液晶显示
  15. SPIR-V 研究:编译器基本原理(一)
  16. python中,获取设备网卡接口(ethx, mgmt)
  17. 【C++课程设计——自助点餐系统】主页及登录界面
  18. 【新书推荐】【2011.06】唐缺:不一样的推理密谋全集(套装共7册)
  19. mysql中update子查询,update 子查询使用介绍
  20. 任何产品需求,挖到最后都是人性

热门文章

  1. ELK菜鸟手记 (三) - X-Pack权限控制之给Kibana加上登录控制以及index_not_found_exception问题解决...
  2. 景观格局动态变化分析方法(基于ArcGIS、Fragstats、ENVI、ERDAS、Patch Analysis for ArcGIS) (2011-03-15 08:07:03)...
  3. android好用的第三方库2018使用总结
  4. Microsoft宣布发布GA版Azure Event Grid
  5. 彻底搞懂Java内存泄露
  6. asa hacker
  7. SCVMM 2008 R2 SP1 快速修改动态内存
  8. RHEL 5 设置 YUM
  9. Swift反射API及其用法
  10. 实例分析mysql用户登录