MyBatis查询所有

88 阅读1分钟

什么是 MyBatis?

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。

1.安装

如果使用 Maven 来构建项目,则需将下面的依赖代码置于 pom.xml 文件中:

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>x.x.x</version>
</dependency>

2.从 XML 中构建 SqlSessionFactory

每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例

String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

3.从SqlSessionFactory 中获取 SqlSession

既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。例如:

try (SqlSession session = sqlSessionFactory.openSession()) {
  Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);
}

查询

1.查询所有数据

1.编写接口方法:Mapper接口 2.编写SQL语句:SQL映射文件

1.编写接口方法
List<Brand>selectAll();
<!--
数据库的表字段名称和实体类的名称不一样,则不能自动封装数据,查询为空
*1.起别名:对于不一样的列名起别名,让别名和实体类的属性名一样
   *缺点:每次查询都要定义一次别名
*2.sql片段
    *缺点:不灵活
*3.resultMapper
   1.定义<resultMapper>标签
   2.在<select>标签中,使用resultMapper属性替换resultType属性
-->
2.编写SQL语句
1.<select id="selectAll" resultType="brand">
select * from tb_brand;
</select>
2.<select id="selectAll" resultType="brand">
select id,brand_name as brandName, company_name as companyName, ordered,status from tb_brand;
</select>
3.<!--
sql片段
-->
<sql id="brand_column">
id,brand_name as brandName, company_name as companyName, ordered,status from tb_brand;
</sql>
<select id="selectAll" resultType="brand">
select
<include refid="brand_column">from tb_brand;
</select>
<!--
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>
3.编写测试用例
@Test 
public void testSelectAll(){
//1.获取SqlSessionFactory
String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//2.获取SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//3.获取Mapper接口的代理对象
BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
//4.执行方法
List<Brand> brands = brandMapper.selectAll();
system.out.println(brands);
//5.释放资源
sqlSession.close();
}