Mybatis之配置文件与映射文件的“那些事”,你真的知道吗?(下)

简介: Mybatis之配置文件与映射文件的“那些事”,你真的知道吗?(下)

2.3.2 delete标签

功能:

定义删除sql语句

用法案例:

使用delete标签在数据库中删除员工编号为4的数据

①在EmployeeMapper接口中先定义删除数据的方法

代码示例如下:

//删除员工(根据员工编号删除对应的员工信息)
public void deleteEmployee(int empId);

②在上述接口对应的映射文件中使用delete标签

代码示例如下:

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

③测试

代码示例如下:

@Test
public void testDeleteEmployee(){
    try {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //通过SqlSessionFactory对象调用openSession();
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //获取EmployeeMapper的代理对象
        EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
        //删除员工编号为4的员工信息
        employeeMapper.deleteEmployee(4);
        //开启事务,数据才能真正存进数据库中
        sqlSession.commit();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

2.3.3 update标签

功能:

定义修改sql语句

用法案例:

使用update标签修改员工编号为2的相关员工数据

修改前的数据:

①在EmployeeMapper接口中先定义修改数据的方法

代码示例如下:

//修改员工数据
public void updateEmployee(Employee employee);

②在上述接口对应的映射文件中使用update标签

代码示例如下:

<update id="updateEmployee">
    update tbl_employee
    set email=#{email} , salary=#{salary}
    where id=#{id}
</update>

③测试

@Test
public void testUpdateEmployee(){
    try {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //通过SqlSessionFactory对象调用openSession();
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //获取EmployeeMapper的代理对象
        EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
        //通过调用代理对象去执行删除,这点和当初在Dao层新建接口,接口的实现类去实现删除的功能很像,代理对
        //象就相当于当初接口的实现类一样,但是我并没有写接口的实现类,但在mybatis框架中就真真切切的实现了
        //删除的功能,究其原因,应该是mybatis在底层就帮我实现了,但是具体是怎么实现的,我暂时不知道
        //修改员工编号为2的员工部分信息
        employeeMapper.updateEmployee(new Employee(2,"hdjs@qq.com",120.0));;
        //开启事务,数据才能真正存进数据库中
        sqlSession.commit();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

2.3.4 select标签

功能:

定义查询sql语句

用法案例:

使用select标签查询数据库中所有的员工信息

①在EmployeeMapper接口中先定义查看所有的员工数据的方法

代码示例如下:

//查看所有的员工信息
public List<Employee> showAllEmployee();

②在上述接口对应的映射文件中使用select标签

代码示例如下:

<!--  查看所有的员工信息  -->
<!-- 如果resultType中的值是一个类的类型,如果之前定义它的别名,这里可填写该类的别名,毕竟有时类的全名太长了   -->
    <select id="showAllEmployee" resultType="mybatis.pojo.Employee">
        select
            id,
            last_name ,
            email,
            salary
        from
            tbl_employee
    </select>

注意:

在resultType中,期望从这条语句中返回结果的类全限定名或别名,如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身的类型。 resultType 和 resultMap 之间只能选其一使用。

③测试

@Test
    public void testShowAllEmployee(){
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            //通过SqlSessionFactory对象调用openSession();
            SqlSession sqlSession = sqlSessionFactory.openSession();
            //获取EmployeeMapper的代理对象
            EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
            List<Employee> employees = employeeMapper.showAllEmployee();
            for (Employee employee : employees) {
                System.out.println(employee);
            }
/*
            //开启事务,数据才能真正存进数据库中
            sqlSession.commit();
*/
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

备注:以下子标签的详细功能用法将在接下来的序列文章中详细探讨,这里不做赘述

2.3.5 Sql标签

功能:

定义可重用的SQL语句块

2.3.6 cache标签

功能:

设置当前命名空间的缓存配置

2.3.7 cache-ref标签

功能:

设置其他命名空间的缓存配置

2.3.8 resultMap标签

功能:

描述如何从数据库结果集中加载对象

注意:

在使用多表查询的场景上,resultType解决不了,就用resultMap

2.4 映射文件中常用的属性

2.4.1 resultType

功能描述:

设置期望结果集返回类型【全类名或别名】

注意:

如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身的类型。

resultType和resultMap之间只能同时使用一个

2.5 获取主键自增数据

获取主键自增数据需要用到以下两个属性

  • useGeneratedKeys:启用主键生成策略
  • keyProperty:设置存储属性值

用法案例:基于EmployeeMapper接口中的插入数据的方法,对其映射文件中原有的insert标签内,添加以上两个属性,使在插入数据时获得其自增主键

①在EmployeeMapper接口中书写插入数据的方法

代码示例如下:

//添加员工
public void insertEmployee(Employee employee);

②在EmployeeMapper接口对应的映射文件中对使用inset标签添加获取主键自增数据的两个属性

代码示例如下:

<!--  useGeneratedKeys="true" keyProperty="id" : 启用主键生成策略,返回的结果集中包含自动生成主键的信息,并将其赋值给实体类对象中的 id 属性  -->
    <insert id="insertEmployee" useGeneratedKeys="true" keyProperty="id">
        insert into
            tbl_employee(last_name,email,salary)
        <!--  这里是要将employee对象中的属性值传到mysql中    -->
        values(#{lastName},#{email},#{salary})
    </insert>

③测试

代码示例如下

@Test
public void testInsertKeyEmployee(){
    try {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //通过SqlSessionFactory对象调用openSession();
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //获取EmployeeMapper的代理对象
        EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
        Employee employee=new Employee("李四1","sshdfjf@163.com",9000.0);
        employeeMapper.insertEmployee(employee);
        //当执行插入sql后,获取新增员工的主键(员工编号)
        System.out.println("employee.getId() : "+employee.getId());
        //开启事务,数据才能真正存进数据库中
        sqlSession.commit();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

2.6 获取数据库受影响行数

如何获取数据库受影响行数?

直接将接口中相应方法的返回值设置为int或boolean即可

  • int代表受影响行数
  • boolean代表是否影响了数据库,true代表影响了数据库,false则代表无

用法案例:在插入数据时获取数据库受影响的行数

①基于2.5小节中用法案例的代码,仅仅修改Mapper接口中返回值的类型为int

代码示例如下:

//修改Mapper接口中返回值的类型为int
//添加员工
public int insertEmployee(Employee employee);

②测试代码做相应的微调并测试

//测试代码做相应的微调
@Test
public void testInsertKeyEmployee(){
    try {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //通过SqlSessionFactory对象调用openSession();
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //获取EmployeeMapper的代理对象
        EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
        Employee employee=new Employee("李四1","sshdfjf@163.com",9000.0);
        //获取返回值i(影响数据库的行数)
        int i = employeeMapper.insertEmployee(employee);
        System.out.println("影响数据库的行数: "+i);
        //当执行插入sql后,获取新增员工的主键(员工编号)
        System.out.println("employee.getId() : "+employee.getId());
        //开启事务,数据才能真正存进数据库中
        sqlSession.commit();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

相关文章
|
16天前
|
XML Java 数据库连接
mybatis中在xml文件中通用查询结果列如何使用
mybatis中在xml文件中通用查询结果列如何使用
20 0
|
1月前
|
XML Oracle Java
mybatis反向生成实体类、dao层以及映射文件
mybatis反向生成实体类、dao层以及映射文件
13 1
|
1月前
|
XML Java 数据库连接
mybatis环境搭建步骤(含配置文件代码)
mybatis环境搭建步骤(含配置文件代码)
15 1
|
14小时前
|
SQL Java 数据库连接
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
|
4天前
|
XML Java 数据库连接
Javaweb之Mybatis的XML配置文件的详细解析
Javaweb之Mybatis的XML配置文件的详细解析
13 0
|
1月前
|
Java 数据库连接 mybatis
Mybatis+mysql动态分页查询数据案例——Mybatis的配置文件(mybatis-config.xml)
Mybatis+mysql动态分页查询数据案例——Mybatis的配置文件(mybatis-config.xml)
20 1
|
1月前
Mybatis+mysql动态分页查询数据案例——配置映射文件(HouseDaoMapper.xml)
Mybatis+mysql动态分页查询数据案例——配置映射文件(HouseDaoMapper.xml)
15 1
|
1月前
|
Java 数据库连接 mybatis
mybatis简单案例源码详细【注释全面】——Dao层映射文件(UserMapper.xml)【重要】
mybatis简单案例源码详细【注释全面】——Dao层映射文件(UserMapper.xml)【重要】
10 0
|
1月前
|
SQL Java 数据库连接
Mybatis中Mapper.xml 文件使用注释遇到的坑
Mybatis中Mapper.xml 文件使用注释遇到的坑
|
1月前
|
SQL Java 数据库连接
挺详细的spring+springmvc+mybatis配置整合|含源代码
挺详细的spring+springmvc+mybatis配置整合|含源代码
42 1