3.26 mybatis
mybatis 简化orm映射, 进行数据的增删改查,
表 emp (列1,列2,...) 与 java 类 Emp (属性1,属性2,....) 进行 映射
表中的列 不区分大小写-------------列名
类中的属性 区分大小写--------------属性名
mybatis的准备工作: mysql 可用, emp ,dept 两张表
a. 添加依赖: pom.xml
增加 mybatis 依赖
增加 mysql连接java的依赖, 注意 mysql的版本问题
增加 junit的依赖
b. 配置文件
spring 配置 src/main/resources 下 推荐 applicationContext.xml
mybatis 配置 src/main/resources 下 推荐 mybatis-config.xml
c. 将数据库的表 与 类进行 对应
体现 封装, 属性的get/set, 全参及无参构造, 重写 toString()
数据库 表
实体层 一般 用 entity或pojo 做包名 java.util.Date
d. mybatis-config.xml
i. 配置 环境environment
ii. mybatis 充当 dao层 即 数据访问层,
从mybatis 开始 不建议 使用dao 而是用mapper
1. 定义接口, 一般 包 用mapper, 注意: 不需要编写实现类,
查询全部的部门信息
2.编写 映射文件 xxxxMapper.xml
让 接口 与 mapper.xml 产生关系: 配置 namespace="接口所在的全路径的包名.接口名"
配置别名: typeAliases 一般推荐使用 package, package="实体层所在的包"
配置 映射器: mappers, mapper 推荐使用package, package="xxxxMapper.xml所在的路径"
e. 进行测试
3.27 带参数的查询----------------- 重点
mybatis的执行流程:
首先 加载 mybatis-config.xml,
即 预先加载 xxxMapper.xml文件
当在测试类中调用接口xxxMapper.java中的方法时,会通过xxxMapper.xml的namespace
找到对应的接口, 当调用方法时,执行 xxxMapper.xml 中id 为调用的方法名的sql语句
进行 执行,并返回结果
查询全部数据
List<Dept> findAll();
带参数的查询:
带一个基本数据类型或String参数: #{任意字符} , 配置 id,resultType及parameterType
带2个参数: 配置 id,resultType
第一种写法: #{arg0} 取第一个参数值
#{arg1} 取 第二个参数值
#{arg2} 取 第三个参数
如果使用 arg+索引, 索引从0开始
第二种写法: #{param1} 取第一个参数值
#{param2} 取 第二个参数值
#{param3} 取 第三个参数值
如果使用 param+个数, 个数从1开始
第三种写法: 修改接口中的方法的参数的写法--------------- 推荐
在 参数的类型前 增加 @Param("参数名")
在xxxMapper.xml 中使用 #{参数名} 获取参数值
带一个对象类型参数: 一般方法的参数 最多不要超过3个,
这种方式 一般用于 添加或者 修改操作,
增加insert, 修改 update, 删除 delete 必须手动进行事务提交
因为 把一个对象作为方法的参数,在xxxMapper.xml文件中使用 #{属性名} 的方式获取值
注意: 列名 不区分大小写
属性名 区分大小写
添加 部门信息 -- insert----
dept(id,name) id 是 主键, 自增---- 值 由mysql 提供,
emp(eno,ename,borndate,phone,deptid) eno 是主键,自增 ---值 由mysql 提供,
新增: sql
新增的sql 的语法:
insert into 表名(列名1,列名2,列名3,.....)
values (值1,值2,值3,.....)
添加 部门
int save(String name); 或者 int save(Dept dept)
添加 员工
int save(Emp emp);
带三个参数 : 同 带2个参数的,
1. 根据部门编号 查询部门名称----------------带一个参数的查询
String findById(int id);
Dept findById(int id); ---- 因为部门编号为 主键, 主键是唯一的,因此 返回值最多一个
练习, 根据 员工编号 查询 员工信息
2. 根据 员工电话及 姓名 进行 模糊查询员工信息------- 返回值 可能1个,0个,多个,------------带两个参数的查询
List<Emp> find(String name,String phone);
List<Emp> find(String name,int eno);
练习:
1.查询员工中 姓李的员工信息--- 一个参数
List<Emp> findByName(String name);
select * from emp where ename like '李%'
2. 查询 员工姓名中包含 国字的员工信息---- 一个参数
List<Emp> findByName2(String name);
select * from emp where ename like '%国%'
3. 按照员工编号及电话 进行 模糊查询 --- 2个参数
List<Emp> findByName2(int eno,String phone);
select * from emp where eno=2 and phone like '39'
4. 添加部门
int save(Dept dept)
3.28 mybatis 中的 ${} 与 #{} 区别
1. ${} 与 #{} 区别
insert into dept(name)
values('测试数据')
在 xxxxMapper.xml 中
insert into dept(name)
values(#{name})
insert into dept(name)
values('${name}')
综上 所知:
第一个区别: #{} 会自动为 字符串类型的数据 增加 单引号 '',
${} 不会为字符串类型的数据 增加 单引号 ,他则是 原样输出
如果 列是字符串 则 可以 使用 '${}' 等价于 #{}
第二个区别: #{} 可以防止sql 注入, 在sql时 使用的时问号 ?,安全性高
${} 是 原样输出 ,不会使用到 ?,
第三个区别:
因为${} 不会自动增加 单引号, 因此他常常用于 列的排序
sql 排序
select * from 表名 order by 列名 asc|desc;
对数据库中的emp表的数据进行排序
如果传递的值是 eno 则按照eno 进行 降序显示
如果传递的值是 deptid 则按照deptid 进行 降序显示
List<Emp> findOrder(String order);
练习1:
要求 如果传递的 id 则按照 id 降序 查询 所有的部门信息
如果 传递的是 name 则 按照 name 降序 查询所有的部门信息
练习2:
要求按照 eno 进行 降序, deptid 进行降序查询 所有的员工信息
使用junit进行单元测试, 包含项目源码及笔记
64 浏览量
2024-04-12
08:12:14
上传
评论
收藏 16KB RAR 举报
射手座的程序媛
- 粉丝: 1702
- 资源: 136