Mapper代理开发
学习路线:Mybatis快速入门->Mapper代理开发
->Mybatis练习(按值单条件查询)
->Mybatis练习(多条件查询)
->Mybatis练习(增加,删除,修改)
概述
Mybatis 官网推荐使用 Mapper 代理的方式进行开发,他们的区别如下。
下面是实用Mybatis开发与使用Mapper代理,可以看出在第二张图,也就是Mapper代理的开发方式里面,没有了第一种的名字空间的引入,这可以大大的提高代码的维护效率。
具体操作
- 文件结构
- UserMapper.xml
- 在 resources 下创建 com/study/mapper 目录,并在该目录下创建 UserMapper.xml 映射配置文件。
配置内容:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- namespace:名称空间 --> <mapper namespace="com.itheima.mapper.BrandMapper"> <!-- 数据库表的字段名称 和 实体类的属性名称 不一样,则不能自动封装数据 * 起别名:对不一样的列名起别名,让别名和实体类的属性名一样 * 缺点:每次查询都要定义一次别名 * sql片段 * 缺点:不灵活 * resultMap: 1. 定义<resultMap>标签 2. 在<select>标签中,使用resultMap属性替换 resultType属性 --> <!-- id:唯一标识 type:映射的类型,支持别名 --> <resultMap id="brandResultMap" type="brand"> <!-- id:完成主键字段的映射 column:表的列名 property:实体类的属性名 result:完成一般字段的映射 column:表的列名 property:实体类的属性名 --> <result column="brand_name" property="brandName"/> <result column="company_name" property="companyName"/> </resultMap> <select id="selectAll" resultMap="brandResultMap"> select * from tb_brand; </select> </mapper>
mybatis-config.xml配置文件内容:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <typeAliases> <package name="com.study.pojo"/> </typeAliases> <!-- environments:配置数据库连接环境信息。可以配置多个environment,通过default属性切换不同的environment --> <environments default="database1"> <!-- 这里需要注意的是 environments标签中可以存在多个environment 代表多个数据库环境,然后default就是一个默认值,我这里把默认值设置成了 第一个数据库database1 --> <environment id="database1"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <!--数据库连接信息--> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=GMT%2B8&useOldAliasMetadataBehavior=true"/> <property name="username" value="root"/> <property name="password" value="12345"/> </dataSource> </environment> </environments> <mappers> <!--加载sql映射文件--> <!-- <mapper resource="UserMapper.xml"/>--> <!--Mapper代理方式--> <package name="com.study.mapper"/> </mappers> </configuration>
- 在 com.study.mapper 包下创建 UserMapper接口,代码如下:
package com.study.mapper; import com.study.pojo.User; import java.util.List; public interface UserMapper { List<User> selectAll(); User selectById(int id); }
- 创建测试类
import com.study.mapper.UserMapper; import com.study.pojo.User; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.InputStream; import java.util.List; public class MyBatisDemo { public static void main(String[] args) throws IOException { //1. 加载mybatis的核心配置文件,获取 SqlSessionFactory String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //2. 获取SqlSession对象,用它来执行sql SqlSession sqlSession = sqlSessionFactory.openSession(); //3. 执行sql //3.1 获取UserMapper接口的代理对象 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); List<User> users = userMapper.selectAll(); System.out.println(users); //4. 释放资源 sqlSession.close(); } }
运行结果:







