MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架,几乎消除了所有的 JDBC 代码和参数的手工设置以及结果集的处理,通过XML(sqlMapConfig)或注解配置数据源和原始映射,MyBatis通过SqlSession连接和操作数据源
SqlSession的获得
1、获取数据源
String resource = "sqlMapConfig.xml" //sqlMapConfig.xml是Mybatis的核心文件,可以配置数据源 和 映射的Mapper.xml文件的地址
InputStream inputStream = Resources.getResourceAsStream(ressource); //通过数据源获取输入流
2、获取SqlSession
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuild().Bulid(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
操作数据
sqlSession.select("namespace.id",[参数])
sqlSession.selectList("namespace.id",[]);
sqlSession.insert("namespace.id", [参数]); sqlSession.commit();//默认是不自动提交,必须手工提交;不提交,不会得到更新
sqlSession.update("namespace.id", [参数]); sqlSession.commit();//同上
sqlSession.delete("namespace.id", [参数]); sqlSession.commit();//同上
映射文件 Mapper.xml 的总结:
① 设置 namespace 命名空间,目的是为了区分映射文件中的方法;
② 结果集 resultMap 是 MyBatis 最大的特色,对象的 ORM 就由其来转换:
- 在结果集中,包括主键 id 和 普通属性 result;
- 在结果集中,常用的两个属性分别为:property,表示实体的属性;column,表示 SQL 查询的结果集的列。
③ 在映射文件中,常用的标签有四个,分别为: select、insert、update 和 delete:
- 每个标签中都有 id 属性,在同一个 mapper 文件中 id 不允许重复;
- 参数 parameterMap 已经被废弃,现在其存在的目的就是为了兼容前期的项目;现在用Map或者包装值对象来设置复杂参数;
- 参数 parameterType 支持很多的类型,例如 int、Integer、String、Double、List、Map 或者实体对象等;
- 返回值 resultType 用于简单的类型;
- 返回值 resultMap 用于复杂的类型;
- 当参数和返回值是集合的时候,其声明的是集合中的元素类型;
- SQL 语句不区分大小写,它默认使用 PrepareStatement,预编译,可以防止 SQL 注入。
赋别名
在 Mapper.xml 文件中可以简写调用别名,例如:
<insert id="insert" parameterType="Person"><!-- 赋别名 -->
当然,提前需要我们在 sqlMapConfig.xml 中先定义别名,在这里,特别需要注意标签的顺序,如果标签的顺序出错,程序就会报错:
<typeAliases> <typeAlias type="yeepay.payplus.Person" alias="Person"/> </typeAliases>