Mybatis 学习笔记 Part03

1.传入参数与返回参数设置(查)

<!-- 根据 id 查询 -->
<select id="findById" resultType="com.itheima.domain.User" parameterType="int">select * from user where id = #{uid}
</select>resultType 属性:用于指定结果集的类型。parameterType 属性:用于指定传入参数的类型。sql语句中使用#{}字符: 它代表占位符,相当于原来 jdbc 部分所学的?,都是用于执行语句时替换实际的数据。具体的数据是由#{}里面的内容决定的。#{}中内容的写法:由于数据类型是基本类型,所以此处可以随意写

2.测试类结构的编写

public class MybastisCRUDTest {private InputStream in ;private SqlSessionFactory factory;private SqlSession session;private IUserDao userDao;@Testpublic void testFindOne() {//6.执行操作User user = userDao.findById(41);System.out.println(user);}@Before//在测试方法执行之前执行public void init()throws Exception {//1.读取配置文件in = Resources.getResourceAsStream("SqlMapConfig.xml");//2.创建构建者对象SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();//3.创建 SqlSession 工厂对象factory = builder.build(in);//4.创建 SqlSession 对象session = factory.openSession();//5.创建 Dao 的代理对象userDao = session.getMapper(IUserDao.class);}@After//在测试方法执行完成之后执行public void destroy() throws Exception{session.commit();//7.释放资源session.close();in.close();}
}

3.映射配置文件mapper.xml的配置

<!-- 保存用户-->
<insert id="saveUser" parameterType="com.itheima.domain.User">insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address})
</insert>parameterType 属性:代表参数的类型,因为我们要传入的是一个类的对象,所以类型就写类的全名称。sql语句中使用#{}字符:它代表占位符,相当于原来 jdbc 部分所学的?,都是用于执行语句时替换实际的数据。具体的数据是由#{}里面的内容决定的。#{}中内容的写法:由于我们保存方法的参数是 一个 User 对象,此处要写 User 对象中的属性名称。它用的是 ognl 表达式。ognl 表达式:它是 apache 提供的一种表达式语言,全称是:Object Graphic Navigation Language 对象图导航语言。它是按照一定的语法格式来获取数据的。语法格式就是使用 #{对象.对象}的方式。#{user.username}它会先去找 user 对象,然后在 user 对象中找到 username 属性,并调用getUsername()方法把值取出来。但是我们在 parameterType 属性上指定了实体类名称,所以可以省略 user.而直接写 username。

4.手动提交事务的方法

打开 Mysql 数据库发现并没有添加任何记录,原因是什么?这一点和 jdbc 是一样的,我们在实现增删改时一定要去控制事务的提交,那么在 mybatis 中如何控制事务提交呢?可以使用:session.commit();来实现事务提交。加入事务提交后的代码如下:@After//在测试方法执行完成之后执行
public void destroy() throws Exception{session.commit();//7.释放资源session.close();in.close();
}

5.自增的用户id值返回(增)

新增用户后,同时还要返回当前新增用户的 id 值,因为 id 是由数据库的自动增长来实现的,所以就相
当于我们要在新增后将自动增长 auto_increment 的值返回。<insert id="saveUser" parameterType="USER"><!-- 配置保存时获取插入的 id --> <selectKey keyColumn="id" keyProperty="id" resultType="int">select last_insert_id();</selectKey>insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address})
</insert>

6.(改)

<!-- 更新用户 -->
<update id="updateUser" parameterType="com.itheima.domain.User">update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}
</update>

7.(删)

<!-- 删除用户 -->
<delete id="deleteUser" parameterType="java.lang.Integer">delete from user where id = #{uid}
</delete>

8.模糊查询

第一种方法:

List<User> users = userDao.findByName("%王%");
<!-- 根据名称模糊查询 -->
<select id="findByName" resultType="com.itheima.domain.User" parameterType="String">select * from user where username like #{username}
</select>

​ 在控制台输出的执行 SQL 语句如下:

​ 我们在配置文件中没有加入%来作为模糊查询的条件,所以在传入字符串实参时,就需要给定模糊查询的标识%。配置文件中的#{username}也只是一个占位符,所以 SQL 语句显示为“?”。

第二种方法:

List<User> users = userDao.findByName("王")
<!-- 根据名称模糊查询 -->
<select id="findByName" parameterType="string" resultType="com.itheima.domain.User">select * from user where username like '%${value}%'
</select>

​ 我们在上面将原来的#{}占位符,改成了value。注意如果用模糊查询的这种写法,那么{value}。注意如果用模糊查询的这种写法,那么value。注意如果用模糊查询的这种写法,那么{value}的写法就是固定的,不能写成其它名字。

​ 在控制台输出的执行 SQL 语句如下:

​ 可以发现,我们在程序代码中就不需要加入模糊查询的匹配符%了,这两种方式的实现效果是一样的,但执行的语句是不一样的。

总结:#{}和${}的区别

#{}表示一个占位符号

​ 通过#{}可以实现 preparedStatement 向占位符中设置值,自动进行 java 类型和 jdbc 类型转换,#{}可以有效防止 sql 注入。 #{}可以接收简单类型值或 pojo 属性值。 如果 parameterType 传输单个简单类型值,#{}括号中可以是 value 或其它名称。

${}表示拼接 sql串

​ 通过${}可以将 parameterType 传入的内容拼接在 sql 中且不进行 jdbc 类型转换, 可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,{}可以接收简单类型值或 pojo 属性值,如果 parameterType 传输单个简单类型值,可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,{}括号中只能value。

9.Mybatis与JDBC编程的比较

    1.数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。解决:在 SqlMapConfig.xml 中配置数据链接池,使用连接池管理数据库链接。2.Sql 语句写在代码中造成代码不易维护,实际应用 sql 变化的可能较大,sql 变动需要改变 java 代码。解决:将 Sql 语句配置在 XXXXmapper.xml 文件中与 java 代码分离。3.向 sql 语句传参数麻烦,因为 sql 语句的 where 条件不一定,可能多也可能少,占位符需要和参数对应。解决:Mybatis 自动将 java 对象映射至 sql 语句,通过 statement 中的 parameterType 定义输入参数的类型。4.对结果集解析麻烦,sql 变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成 pojo 对象解析比较方便。解决:Mybatis 自动将 sql 执行结果映射至 java 对象,通过 statement 中的 resultType 定义输出结果的类型。

10.Mybatis的参数深入(QureyVo)

​ 基 本 类 型 和 String 我 们 可 以 直 接 写 类 型 名 称 , 也 可 以 使 用 包 名 . 类 名 的 方 式 , 例 如 :java.lang.String。

​ 实体类类型,目前我们只能使用全限定类名。究其原因,是 mybaits 在加载时已经把常用的数据类型注册了别名,从而我们在使用时可以不写包名,

​ 而我们的是实体类并没有注册别名,所以必须写全限定类名。在今天课程的最后一个章节中将讲解如何注册实体类的别名。

传入pojo包装对象

​ 开发中通过 pojo 传递查询条件 ,查询条件是综合的查询条件,不仅包括用户查询条件还包括其它的查询条件(比如将用户购买商品信息也作为查询条件),这时可以使用包装对象传递输入参数。

​ Pojo 类中包含 pojo

编写QueryVo

public class QueryVo implements Serializable {private User userpublic User getUser() {return user; }public void setUser(User user) {this.user = user; }
}

持久层接口

List<User> findByVo(QueryVo vo);

持久层映射文件

<!-- 根据用户名称模糊查询,参数变成一个 QueryVo 对象了 -->
<select id="findByVo" resultType="com.itheima.domain.User"parameterType="com.itheima.domain.QueryVo">select * from user where username like #{user.username};
</select>

Mybatis学习笔记【part03】增删改查相关推荐

  1. MyBatis学习--简单的增删改查

    jdbc程序 在学习MyBatis的时候先简单了解下JDBC编程的方式,我们以一个简单的查询为例,使用JDBC编程,如下: 1 Public static void main(String[] arg ...

  2. mongodb学习笔记之增删改查作指令

    1: mongo入门命令 1.1: show dbs  查看当前的数据库 1.2 use databaseName 选库 1.2 show tables/collections 查看当前库下的coll ...

  3. servlet mysql insert_servlet+mybatis 实现mysql的增删改查实例

    古人云:温故而知新.趁周末,重新来学习了一遍servlet + mybatis 实现mysql的增删改查,算是对自己学习的一个总结和记录. 开门见山,首先我们来看一下项目目录结构: 不难发现这是一个m ...

  4. Java中的sqlsession_java相关:MyBatis中SqlSession实现增删改查案例

    java相关:MyBatis中SqlSession实现增删改查案例 发布于 2020-6-13| 复制链接 摘记: 前言     开博客这是第一次写系列文章,从内心上讲是有点担心自己写不好,写不全,毕 ...

  5. 极其方便的使用Mybatis单表的增删改查

    [活动]Python创意编程活动开始啦!!!      CSDN日报20170427 --<如何在没有实际项目经验的情况下找到工作>      深入浅出,带你学习 Unity 目录(?)[ ...

  6. ❤️使用Mybatis对数据库进行增删改查!!!

    ❤️使用Mybatis对数据库进行增删改查!!! ❤️namespace的用法 namespace中的包名要和接口一致: ❤️select用法 id:就是对应的namespace的方法名 result ...

  7. 用Spring+Mybatis写一个数据库增删改查

    用Spring+Mybatis写一个数据库增删改查 总体结构 ClassBiz.java package com.gxj.biz;import java.util.List;import com.gx ...

  8. mybatis --入门 单表增删改查-curd

    目录 1. mybatis 环境搭建 2. 实体类映射文件配置(写sql) 3. mybatis核心配置文件 (环境配置) 4. 测试 mybatis document https://mybatis ...

  9. 利用Mybatis对数据库进行增删改查操作

    文章目录 mybatis模糊查找 先来了解一下 #{}和${}的使用 parameterType和resultType的使用 selectOne和selectList的使用 mysql自增主键返回 方 ...

  10. 基于springboot+thymeleaf+mybatis的员工管理系统 —— 增删改查

    员工管理系统 - 增删改查 entity 查询所有功能 查询所有的页面 emplist.html 保存员工 保存员工的页面 addEmp.html 删除员工 修改员工 根据id查询员工 修改员工信息 ...

最新文章

  1. Debian 9.x “stretch“ 解决 /etc/rc.local 开机启动问题
  2. tcp序列号为什么是随机的_每个开发人员都应该掌握的TCP知识
  3. Win10修改防火墙入站规则
  4. 2008年1月19日 微软(北京).NET俱乐部 线下休闲活动-滑雪
  5. 为什么我开发的SAP UI5应用里的group by 功能不工作?
  6. mysql闩_Oracle闩:Cache Buffers chains
  7. Win7环境下,用VHD安装Win8,实现双系统!
  8. 在MAC上安装mysql
  9. 过来人给Java初学者的建议!
  10. 黑客是怎么攻击网站的(网站渗透入侵全部教程)
  11. vue3 ts three 动画 骨骼动画 人物动画 模型动画
  12. 搜索引擎算法之 Query Analysis
  13. poi根据模版生成多页word,并压缩下载
  14. 开发U3V时遇到bus hound报babble detect错误
  15. [codeforces 1312A] Two Regular Polygons 整除
  16. 苹果HomeKit与谷歌 Home对比:谁是最佳选择?
  17. 科林明伦杯”哈尔滨理工大学第十届程序设计竞赛B(减成1)
  18. COLLATE LOCALIZED ASC 按本地语言进行排序
  19. C# USB转串口编程 - 查找COM口
  20. 半导体技术科普:解读第三代半导体及宽禁带半导体

热门文章

  1. 软件测试——黑盒测试基本方法
  2. load-time-weaver spring-configured
  3. NOI:1978 生理周期
  4. 递归神经网络之父讲述现代人工智能简史
  5. 怎么解决allegro单位转换后出现DRC错误
  6. 是什么让沃尔玛发现了尿布和啤酒之间的关系呢?
  7. 从逐笔成交分析主力异动
  8. Beosin成都链安态势感知安全预警:游戏项目方需注意随机数安全,警惕薅羊毛攻击...
  9. EXCEL中设置固定行列
  10. OpenStack与SDN控制器的集成