什么是 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 映射文件 3.编写测试用例
1.散装参数:如果有多个参数,需要用 @Param("SQl 参数占位符名称")
/***条件查询
*/
1.编写接口方法
/**
*条件查询
* * 参数接收
* 散装参数:如果有多个参数,需要用@Param("SQl参数占位符名称")
* 对象参数
* map集合参数
*
*/
List<Brand> selectBycondition(@Param(status)int status,@Param("companyName")String companyName,@Param("brandName")String brandName);
复制代码
2.编写 SQL 语句
id:唯一标识
type:映射的类型,支持别名
-->
<resultMap id="brandResultMap" type="brand">
<result column="brand_name" property="brandName"/>//column:表的别名
<result column="company_name" property="companyName"/>//property:实体类的属性名
</resultMap>
<select id="selectByCondition" resultMap="brandResultMap">
select * from
where
status=#{status}
and company_name like#{companyName}
and brand_name like #{brandName};
</select>
id:完成主键字段的映射
result:完成一般字段的映射
复制代码
3.编写测试用例
@Test
public void testselectBycondition(){
//接收参数
int status = 1;
String companyName = "华为"
String brandName = "华为"
//处理参数
companyName = "%" + companyName+"%";
brandName = "%" + brandName+"%";
//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.selectByCondition(status,compantName,brandName)
system.out.println(brands);
//5.释放资源
sqlSession.close();
}
复制代码
2.对象参数
1.编写接口方法
List<Brand> selectByCondition(Brand brand);
复制代码
2.编写 SQL 语句
id:唯一标识
type:映射的类型,支持别名
-->
<resultMap id="brandResultMap" type="brand">
<result column="brand_name" property="brandName"/>//column:表的别名
<result column="company_name" property="companyName"/>//property:实体类的属性名
</resultMap>
<select id="selectByCondition" resultMap="brandResultMap">
select * from
where
status=#{status}
and company_name like#{companyName}
and brand_name like #{brandName};
</select>
id:完成主键字段的映射
result:完成一般字段的映射
复制代码
3.编写测试用例
@Test
public void testselectBycondition(){
//接收参数
int status = 1;
String companyName = "华为"
String brandName = "华为"
//处理参数
companyName = "%" + companyName+"%";
brandName = "%" + brandName+"%";
//封装对象
Brand brand = new Brand();
brand.setStatus(status);
brand.setCompanyName(companyName);
brand.setBrandName(brandName);
//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.selectByCondition(brand)
system.out.println(brands);
//5.释放资源
sqlSession.close();
}
复制代码
3.map 集合参数
1.编写接口方法
List<Brand> selectByCondition(Map map);
复制代码
2.编写 SQL 语句
id:唯一标识
type:映射的类型,支持别名
-->
<resultMap id="brandResultMap" type="brand">
<result column="brand_name" property="brandName"/>//column:表的别名
<result column="company_name" property="companyName"/>//property:实体类的属性名
</resultMap>
<select id="selectByCondition" resultMap="brandResultMap">
select * from
where
status=#{status}
and company_name like#{companyName}
and brand_name like #{brandName};
</select>
id:完成主键字段的映射
result:完成一般字段的映射
复制代码
3.编写测试用例
@Test
public void testselectBycondition(){
//接收参数
int status = 1;
String companyName = "华为"
String brandName = "华为"
//处理参数
companyName = "%" + companyName+"%";
brandName = "%" + brandName+"%";
//HashMap
Map map = new HashMap();
map.put("status",status);
map.put("companyName",companyName)
map.put("brandName",brandName)
brand.setBrandName(brandName);
//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.selectByCondition(map)
system.out.println(brands);
//5.释放资源
sqlSession.close();
}
复制代码
评论