Mybatis学习笔记【part03】增删改查
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】增删改查相关推荐
- MyBatis学习--简单的增删改查
jdbc程序 在学习MyBatis的时候先简单了解下JDBC编程的方式,我们以一个简单的查询为例,使用JDBC编程,如下: 1 Public static void main(String[] arg ...
- mongodb学习笔记之增删改查作指令
1: mongo入门命令 1.1: show dbs 查看当前的数据库 1.2 use databaseName 选库 1.2 show tables/collections 查看当前库下的coll ...
- servlet mysql insert_servlet+mybatis 实现mysql的增删改查实例
古人云:温故而知新.趁周末,重新来学习了一遍servlet + mybatis 实现mysql的增删改查,算是对自己学习的一个总结和记录. 开门见山,首先我们来看一下项目目录结构: 不难发现这是一个m ...
- Java中的sqlsession_java相关:MyBatis中SqlSession实现增删改查案例
java相关:MyBatis中SqlSession实现增删改查案例 发布于 2020-6-13| 复制链接 摘记: 前言 开博客这是第一次写系列文章,从内心上讲是有点担心自己写不好,写不全,毕 ...
- 极其方便的使用Mybatis单表的增删改查
[活动]Python创意编程活动开始啦!!! CSDN日报20170427 --<如何在没有实际项目经验的情况下找到工作> 深入浅出,带你学习 Unity 目录(?)[ ...
- ❤️使用Mybatis对数据库进行增删改查!!!
❤️使用Mybatis对数据库进行增删改查!!! ❤️namespace的用法 namespace中的包名要和接口一致: ❤️select用法 id:就是对应的namespace的方法名 result ...
- 用Spring+Mybatis写一个数据库增删改查
用Spring+Mybatis写一个数据库增删改查 总体结构 ClassBiz.java package com.gxj.biz;import java.util.List;import com.gx ...
- mybatis --入门 单表增删改查-curd
目录 1. mybatis 环境搭建 2. 实体类映射文件配置(写sql) 3. mybatis核心配置文件 (环境配置) 4. 测试 mybatis document https://mybatis ...
- 利用Mybatis对数据库进行增删改查操作
文章目录 mybatis模糊查找 先来了解一下 #{}和${}的使用 parameterType和resultType的使用 selectOne和selectList的使用 mysql自增主键返回 方 ...
- 基于springboot+thymeleaf+mybatis的员工管理系统 —— 增删改查
员工管理系统 - 增删改查 entity 查询所有功能 查询所有的页面 emplist.html 保存员工 保存员工的页面 addEmp.html 删除员工 修改员工 根据id查询员工 修改员工信息 ...
最新文章
- Debian 9.x “stretch“ 解决 /etc/rc.local 开机启动问题
- tcp序列号为什么是随机的_每个开发人员都应该掌握的TCP知识
- Win10修改防火墙入站规则
- 2008年1月19日 微软(北京).NET俱乐部 线下休闲活动-滑雪
- 为什么我开发的SAP UI5应用里的group by 功能不工作?
- mysql闩_Oracle闩:Cache Buffers chains
- Win7环境下,用VHD安装Win8,实现双系统!
- 在MAC上安装mysql
- 过来人给Java初学者的建议!
- 黑客是怎么攻击网站的(网站渗透入侵全部教程)
- vue3 ts three 动画 骨骼动画 人物动画 模型动画
- 搜索引擎算法之 Query Analysis
- poi根据模版生成多页word,并压缩下载
- 开发U3V时遇到bus hound报babble detect错误
- [codeforces 1312A] Two Regular Polygons 整除
- 苹果HomeKit与谷歌 Home对比:谁是最佳选择?
- 科林明伦杯”哈尔滨理工大学第十届程序设计竞赛B(减成1)
- COLLATE LOCALIZED ASC 按本地语言进行排序
- C# USB转串口编程 - 查找COM口
- 半导体技术科普:解读第三代半导体及宽禁带半导体