前置条件请查看:在Idea中使用mybatis查询mysql中的数据-CSDN博客
https://blog.csdn.net/forClash/article/details/139604687
目录
前置条件请查看:在Idea中使用mybatis查询mysql中的数据-CSDN博客https://blog.csdn.net/forClash/article/details/139604687
1.定义与SQL映射文件同名的Mapper接口,并将Mapper接口与SQL映射文件放置在同一目录下
2.设置SQL映射文件的namespace属性为Mapper接口全限定名
3.在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并且保持参数类型和返回值类型一致
1) 通过SqlSession的getMapper方法获取 Mapper接口的代理对象
1、什么是Mapper代理开发?
在MyBatis中,Mapper接口作为数据访问层,它声明了操作数据库的方法。Mapper代理开发是指MyBatis会自动为Mapper接口生成代理实现类,开发者只需编写接口方法声明即可。这种方式大大简化了开发步骤。
2、为什么要使用Mapper代理开发?
- 减少了编写SQL映射文件的工作量。接口方法与映射文件一一对应,更易维护。
- 提高代码的可读性和可维护性。接口方法名称能直接表达业务语义。
- 支持动态SQL生成,提高了灵活性。
- 方便集成其他框架,如Spring。
3、如何使用Mapper代理开发?
1.定义与SQL映射文件同名的Mapper接口,并将Mapper接口与SQL映射文件放置在同一目录下
说人话就是:创建接口,放统一目录。
1.1创建Mapper接口
1.2文件放在同一目录
1.2.1右键点击BrandMapper, 左键点击 CopyPath
1.2.2Path From Source Root 后面就是BrandMapper的路径
1.2.3根据BrandMapper的路径,在resources目录下创建相同的包结构
2.设置SQL映射文件的namespace属性为Mapper接口全限定名
代码如下:
<?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.it.mapper.BrandMapper">
<select id="selectAll" resultType="com.it.pojo.Brand">
select * from tb_brand;
</select>
</mapper>
3.在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并且保持参数类型和返回值类型一致
Mapper接口中定义方法代码如下:
package com.it.mapper;
import com.it.pojo.Brand;
import java.util.List;
public interface BrandMapper {
List<Brand> selectAll();
}
在mybatis-config.xml中设置SQL映射文件
代码如下:
<?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.it.pojo"/>
</typeAliases>-->
<environments default="development">
<!--
environments:配置数据库连接环境信息。可以配置多个environment,
通过default属性切换不同的environment
-->
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!--数据库连接信息-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///db1?useSSL?false"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--加载sql映射文件-->
<mapper resource="com/it/mapper/BrandMapper.xml"/>
</mappers>
</configuration>
4.编码
1) 通过SqlSession的getMapper方法获取 Mapper接口的代理对象
2) 调用对应方法完成sql的执行
代码如下:
package com.it;
import com.it.mapper.BrandMapper;
import com.it.pojo.Brand;
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;
/*
* Mapper代理开发
* */
public class MybatisMapperDemo2 {
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
// List<Brand> brands = sqlSession.selectList("testname.selectAll");
//3.获取UserMapper接口的代理对象
BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
List<Brand> brands = brandMapper.selectAll();
System.out.println(brands);
//4.释放资源
sqlSession.close();
}
}
运行结果:
细节:如果Mapper接口名称和SQL映射文件名称相同,并且在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载。
<?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.it.pojo"/>
</typeAliases>-->
<environments default="development">
<!--
environments:配置数据库连接环境信息。可以配置多个environment,
通过default属性切换不同的environment
-->
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!--数据库连接信息-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///db1?useSSL?false"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--加载sql映射文件-->
<!--<mapper resource="com/it/mapper/BrandMapper.xml"/>-->
<!--使用Mapper代理方式的规范后,可使用包扫描-->
<package name="com.it.mapper"/>
</mappers>
</configuration>