0
点赞
收藏
分享

微信扫一扫

Mybatis 映射文件

sunflower821 2022-02-20 阅读 124
javamybatis

Mapper 就是“映射”的意思,Mapper 文件时 Mybatis 中的 SQL 语句的配置文件,其会在运行时加载 SQL 语句并映射相应参数。在 Mybatis 的全局配置文件中,其中最后一项就是 mapper 文件的资源路径的配置,因为创建 SqlSessionFactory 时会加载全局配置文件,这说明 Mapper 映射文件会在创建伊始就会被加载了。

一、映射文件总体介绍

Mapper 映射文件,主要就是用来配置 SQL 映射语句的,根据不同的 SQL 语句性质,要使用不同的标签来包裹。

标签名称标签作用
insert用来映射插入语句
update用来映射更新语句
delete用来映射删除语句
select用来映射查询语句
resultMap自定义结果集映射
sql配置可以被其他语句引用的SQL语句块
cache命名空间的二级缓存设置
cache-ref其他命名空间缓存配置的引用

1.1 insert 标签

EmployeeMapper.xml

<insert id="addEmp">
     insert into tbl_employee (id, last_name, email, gender)
     values (#{id}, #{lastName}, #{email}, #{gender});
 </insert>

接口 EmployeeMapper.java

package com.example.mapper;

import com.example.pojo.Employee;

import java.util.List;

public interface EmployeeMapper {
    public boolean addEmp(Employee employee);
}

测试方法:

@Test
public void test04() throws IOException {
    SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
    SqlSession sqlSession = sqlSessionFactory.openSession();
    try{
        EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
        Employee employee = new Employee();
        employee.setLastName("zhangsan");
        employee.setEmail("zhangsan@123.com");
        employee.setGender("0");
        boolean addEmp = mapper.addEmp(employee);
        System.out.println(addEmp);
        // 需手动提交
        sqlSession.commit();
    } finally {
        sqlSession.close();
    }
}

控制台结果:

[main] [com.example.mapper.EmployeeMapper.addEmp]-[DEBUG] ==>  Preparing: insert into tbl_employee (id, last_name, email, gender) values (?, ?, ?, ?); 
[main] [com.example.mapper.EmployeeMapper.addEmp]-[DEBUG] ==> Parameters: null, zhangsan(String), zhangsan@123.com(String), 0(String)
[main] [com.example.mapper.EmployeeMapper.addEmp]-[DEBUG] <==    Updates: 1
true

1.2 update 标签

EmployeeMapper.xml

<update id="updateEmp">
    update tbl_employee set
    last_name=#{lastName},email=#{email},gender=#{gender}
    where id=#{id}
</update>

接口 EmployeeMapper.java

package com.example.mapper;

import com.example.pojo.Employee;

import java.util.List;

public interface EmployeeMapper {
    public Integer updateEmp(Employee employee);
}

测试方法:

@Test
public void test05() throws IOException {
   SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
   SqlSession sqlSession = sqlSessionFactory.openSession();
   try{
       EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
       Employee employee = mapper.getEmpById(8);
       employee.setLastName("lisi");
       employee.setEmail("lisi@123.com");
       employee.setGender("0");
       Integer updateEmp = mapper.updateEmp(employee);
       System.out.println(updateEmp);
       sqlSession.commit();
   } finally {
       sqlSession.close();
   }
}

控制台结果:

[main] [com.example.mapper.EmployeeMapper.getEmpById]-[DEBUG] ==>  Preparing: select * from tbl_employee where id = ? 
[main] [com.example.mapper.EmployeeMapper.getEmpById]-[DEBUG] ==> Parameters: 8(Integer)
[main] [com.example.mapper.EmployeeMapper.getEmpById]-[DEBUG] <==      Total: 1
[main] [com.example.mapper.EmployeeMapper.updateEmp]-[DEBUG] ==>  Preparing: update tbl_employee set last_name=?,email=?,gender=? where id=? 
[main] [com.example.mapper.EmployeeMapper.updateEmp]-[DEBUG] ==> Parameters: lisi(String), lisi@123.com(String), 0(String), 8(Integer)
[main] [com.example.mapper.EmployeeMapper.updateEmp]-[DEBUG] <==    Updates: 1
1

1.3 delete 标签

EmployeeMapper.xml

<delete id="deleteEmpById">
    delete from tbl_employee where id = #{id}
</delete>

接口 EmployeeMapper.java

package com.example.mapper;

import com.example.pojo.Employee;

import java.util.List;

public interface EmployeeMapper {
    public void deleteEmpById(Integer id);
}

测试方法:

 @Test
 public void test06() throws IOException {
     SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
     SqlSession sqlSession = sqlSessionFactory.openSession();
     try{
         EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
         mapper.deleteEmpById(7);
         sqlSession.commit();
     } finally {
         sqlSession.close();
     }
 }

控制台结果:

[main] [com.example.mapper.EmployeeMapper.deleteEmpById]-[DEBUG] ==>  Preparing: delete from tbl_employee where id = ? 
[main] [com.example.mapper.EmployeeMapper.deleteEmpById]-[DEBUG] ==> Parameters: 7(Integer)
[main] [com.example.mapper.EmployeeMapper.deleteEmpById]-[DEBUG] <==    Updates: 1

1.4 select 标签

EmployeeMapper.xml

<select id="getEmpById" resultType="employee">
    select * from tbl_employee where id = #{id}
</select>

接口 EmployeeMapper.java

package com.example.mapper;

import com.example.pojo.Employee;

import java.util.List;

public interface EmployeeMapper {
    public Employee getEmpById(Integer id);
}

测试方法:

@Test
public void test03() throws IOException {
     SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
     SqlSession sqlSession = sqlSessionFactory.openSession();
     try{
         EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
         Employee emp = mapper.getEmpById(1);
         System.out.println(emp);
     } finally {
         sqlSession.close();
     }
 }

控制台结果:

[main] [com.example.mapper.EmployeeMapper.getEmpById]-[DEBUG] ==>  Preparing: select * from tbl_employee where id = ? 
[main] [com.example.mapper.EmployeeMapper.getEmpById]-[DEBUG] ==> Parameters: 1(Integer)
[main] [com.example.mapper.EmployeeMapper.getEmpById]-[DEBUG] <==      Total: 1
Employee{id=1, lastName='tom', email='tom@123.com', gender='0'}

总结:
关于增删改:

  • Mybatis 允许增删改直接定义以下类型返回值:Integer、Long、Boolean、void
  • 需要手动提交数据 sqlSession.commit()。
    sqlSessionFactory.open() 为手动提交
    sqlSessionFactory.open(true) 为自动提交
举报

相关推荐

0 条评论