Mybaits:常用数据库操作(东软的操作)

Posted 流楚丶格念

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybaits:常用数据库操作(东软的操作)相关的知识,希望对你有一定的参考价值。

文章目录

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);

注意:

  1. parameterType只有一个。所以,有多个参数时使用对象传值(这就是输入映射)。
  2. # 中书写的是实体对象的属性名,所以要严格区分大小写。

1.2.转义字符查询

由于 <(小于号)是标签关键词,因此不能识别小于号。所以MyBatis中设计了一些转义字符,来代替一些特殊字符:

代码转义字符说明
&lt;<小于
&gt;>大于
&amp;&
&apos;单引号
&quot;"双引号
<select id="listEmpBySal" parameterType="double" resultType="Emp">
    select * from emp where sal &lt; #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());      //获取返回的主键

注意:

  1. selectKey标签中的 select LAST_INSERT_ID() 语句就能获取生成的主键
  2. selectKey标签中的keyProperty属性就是主键名,MyBatis会自动将获取的主键封装给此属性。
  3. 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);
开发者涨薪指南 48位大咖的思考法则、工作方式、逻辑体系

以上是关于Mybaits:常用数据库操作(东软的操作)的主要内容,如果未能解决你的问题,请参考以下文章

Mybaits-Plus操作CRUD

Mybaits-Plus操作CRUD

spring boot + mybaits 操作数据库

mybaits-plus笔记

mybaits-plus笔记

springboot 整合mybaits实现crud操作(含分页)案例