当前位置:网站首页>Mybaits:常用数据库操作(东软的操作)
Mybaits:常用数据库操作(东软的操作)
2022-06-22 15:38:00 【流楚丶格念】
1.常用数据库操作
老师没给上课的数据库和代码,下面的没运行,看不懂可以不学这篇,学下一篇
1.1.多条件查询
<select id="listEmp" parameterType="Emp" resultType="Emp">
select *
from emp
where job like concat('%',#{job},'%') and deptno=#{deptno}
order by empno
</select>
查询员工表,job含有Emp.job中字符并且deptno是Emp.deptno的员工,最后按照empno排序
Emp emp = new Emp();
emp.setJob("经");
emp.setDeptno(20);
List<Emp> list = mapper.listEmp(emp);
for(Emp e : list) {
System.out.println(e);
}
注意:
parameterType只有一个。所以,有多个参数时使用对象传值(这就是输入映射)。#{}中书写的是实体对象的属性名,所以要严格区分大小写。
1.2.转义字符查询
由于 <(小于号)是标签关键词,因此不能识别小于号。所以MyBatis中设计了一些转义字符,来代替一些特殊字符:
| 代码 | 转义字符 | 说明 |
|---|---|---|
< | < | 小于 |
> | > | 大于 |
& | & | 与 |
' | ’ | 单引号 |
" | " | 双引号 |
<select id="listEmpBySal" parameterType="double" resultType="Emp">
select * from emp where sal < #{sal} order by empno
</select>
List<Emp> list = mapper.listEmpBySal(2000.0);
for(Emp e : list) {
System.out.println(e);
}
1.3.返回单值查询
<select id="listEmpCount" resultType="int">
select count(*) from emp
</select>
int count = mapper.listEmpCount();
System.out.println(count);
注意:只有返回一行一列,resultType才能使用基本数据类型
1.4.插入(不获取主键)
<insert id="insertEmp1" parameterType="Emp">
insert into emp(ename,job,hiredate,deptno)
values(#{ename},#{job},#{hiredate},#{deptno})
</insert>
SqlSession sqlSession = Util.getSqlSessionFactory().openSession();
EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
Emp emp = new Emp();
emp.setEname("张三");
emp.setJob("职员");
emp.setHiredate("2020-09-04");
emp.setDeptno(10);
int result = mapper.insertEmp1(emp);
sqlSession.commit(); //注意:要commit提交
System.out.println(result);
注意:增删改都会返回int值,表示影响的行数。但是,insert标签中不能书写resultType属性
1.5.插入(获取主键)
<insert id="insertEmp2" parameterType="Emp">
<selectKey keyProperty="empno" resultType="int" order="AFTER">
select LAST_INSERT_ID()
</selectKey>
insert into emp(ename,job,hiredate,deptno)
values(#{ename},#{job},#{hiredate},#{deptno})
</insert>
SqlSession sqlSession = Util.getSqlSessionFactory().openSession();
EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
Emp emp = new Emp();
emp.setEname("张三");
emp.setJob("职员");
emp.setHiredate("2020-09-04");
emp.setDeptno(10);
int result = mapper.insertEmp2(emp);
sqlSession.commit();
System.out.println(result);
System.out.println(emp.getEmpno()); //获取返回的主键
注意:
- selectKey标签中的 select LAST_INSERT_ID() 语句就能获取生成的主键
- selectKey标签中的keyProperty属性就是主键名,MyBatis会自动将获取的主键封装给此属性。
- order的值有两种:BEFORE、AFTER
BEFORE:先获取主键,然后执行insert; 比如 Oracle数据库。
AFTER:先执行insert,然后获取主键; 比如 MySql数据库。
1.6.插入(获取主键)
<insert id="insertEmp3" parameterType="Emp" useGeneratedKeys="true" keyProperty="empno">
insert into emp(ename,job,hiredate,deptno)
values(#{ename},#{job},#{hiredate},#{deptno})
</insert>
SqlSession sqlSession = Util.getSqlSessionFactory().openSession();
EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
Emp emp = new Emp();
emp.setEname("张三");
emp.setJob("职员");
emp.setHiredate("2020-09-04");
emp.setDeptno(10);
int result = mapper.insertEmp3(emp);
sqlSession.commit();
System.out.println(result);
System.out.println(emp.getEmpno()); //获取返回的主键
useGeneratedKeys设置为true后,mybatis会使用JDBC的getGeneratedkeys方法获取由数据库内部自动生成的主键,并将该值赋值给由keyProperty指定的属性; 注意:此种方式只适合于有自增长列的数据库(mysql、sqlserver等)
1.7.修改
<update id="updateEmp" parameterType="Emp">
update emp set job=#{job},sal=#{sal} where empno=#{empno}
</update>
Emp emp = new Emp();
emp.setEmpno(7934);
emp.setJob("经理");
emp.setSal(2000.0);
int result = mapper.updateEmp(emp);
sqlSession.commit();
System.out.println(result);
注意:增删改都会返回int值,表示影响的行数。但是,insert标签中不能书写resultType属性
1.8.删除
<delete id="deleteEmp" parameterType="int">
delete from emp where empno=#{empno}
</delete>
int result = mapper.deleteEmp(7939);
sqlSession.commit();
System.out.println(result);
边栏推荐
- Scala equality
- LETV group payment system architecture sharing for processing 100000 high concurrent orders per second
- 以小见大:一个领域建模的简单示例,理解“领域驱动”。
- Gridhome, a must-have static site generator for beginners
- 基于.NetCore开发博客项目 StarBlog - (12) Razor页面动态编译
- The way to optimize spark performance -- solving N poses of spark data skew
- 代码扫描工具扫出的 Arrays.asList 使用BUG
- [C language] deeply analyze the relationship between pointer and array
- [deep anatomy of C language] keywords if & else & bool type
- MySQL stored procedure exception handling error code: 1337
猜你喜欢

Windows8.1 64 installed by mysql5.7.27

新手必会的静态站点生成器——Gridsome

Figure operation flow of HAMA BSP Model

试用了多款报表工具,终于找到了基于.Net 6开发的一个了

【阿里云服务器-安装mysql的5.6版本安装,重装】

MTLs guidelines for kubernetes engineers

In case of default import failure
Database mysql master-slave scheme

每秒處理10萬高並發訂單的樂視集團支付系統架構分享
![[C language] deeply analyze the relationship between pointer and array](/img/f3/432eeee17034033361e05dde67aac3.jpg)
[C language] deeply analyze the relationship between pointer and array
随机推荐
The way to optimize spark performance -- solving N poses of spark data skew
[wechat applet to obtain the height of custom tabbar] is absolutely available!!!
[MYSQL]一台windows电脑安装多个mysql-不同版本
Database mysql master-slave scheme
jsp學習之(二)---------jsp脚本元素和指令
Spark Streaming-Receiver启动和数据接收
What is a flush? Is online account opening safe?
Scala equality
[C language] deeply analyze the relationship between pointer and array
JSP learning (2) -- JSP script elements and instructions
Idea installation summary
Interface (optimization type annotation)
Team management | how to improve the thinking skills of technical leaders?
mysql5.7.27安装之windows8.1 64
[recruitment] [Beijing Zhongguancun / remote] [tensorbase][open source data warehouse] and other people do one thing
Read Apache shardingsphere
招行23型号UKey在win7上无法识别
STM32通过DMA进行ADC采集(HAL库)
新手必会的静态站点生成器——Gridsome
Qt笔记-QMap自定义键(key)