MyBatis框架简介
1.什么是MyBatis(iBatis-->MyBatis)
MyBatis是对JDBC技术封装,简化数据库操作代码.
2.MyBatis体系结构(看图tts,不过没讲,有点深奥;看mybatis.png图)
MyBatis封装了一下功能:
--a.封装了建立连接,设置参数执行SQL,释放连接过程
(提供连接参数,SQL,SQL参数值)
--b.封装了查询结果映射成实体对象过程
(实体类属性名与数据表字段名保持一致)
//部份代码 Emp emp = new Emp(); emp.setName(rs.getString("name")); ............... findById-->Emp-->sqlSession.selectOne() findAll-->List<Emp>-->sqlSession.selectList()
--c.封装了SQL语句中参数设置过程
(提供SQL时,参数想给SQL映射,利用#{属性名}替代?)
Ref: #{}这里只是占位符的作用,注意和${}的区别.
insert into Emp values (#{属性名},?,?,?,?) pst = conn.prepareStatement(sql); pst.setString(1,"tom"); pst.setString(2,20); ......
***开发者使用需要做以下工作***:
--搭建MyBatis框架环境
--根据表写实体类(名称一致,少一些麻烦?)
--根据操作写SQL(使用#{属性}替代?)
--利用SqlSession调用操作(提供SQL参数)
3.MyBatis配置文件
a) SqlMapConfig.xml(主配置文件[1个])
定义连接参数,框架参数,加载SQL文件
b) sqlMap.xml文件(定义SQL语句的XML文件[可以多个])
c) 实体类.java
4.框架API简介
a) SqlSessionFactoryBuilder:该对象负责根据MyBatis配置文件SqlMapConfig.xml构建SqlSessionFactory实例
b) SqlSessionFactory:核心.创建SqlSession对象实例
c) SqlSession:包含了所有执行SQL操作的方法(如下),用于执行已映射的SQL语句
sqlSession.selectOne();
sqlSession.selecList("findAll")
sqlSession.insert()
sqlSession.update()
sqlSession.delete()
二.MyBatis基本应用
返回Map查询
<select parameterType="int" resultType="map" id="findNameById"> SELECT cost_id,name FROM cost WHERE cost_id=#{id} </select>
------------------------------TestCase部分代码--------------------
Map<String, Object> map = sqlSession.selectOne("findSomeById", 1);
1)Mapper映射器:开发者创建绑定映射语句的接口,映射器接口的实例可以从SqlSession中获得
Mapper接口中的方法名要和SqlMap.xml中的SQL的id保持一致
2)在SqlMap.xml定义<select>操作时,如果查询结果字段名和Java POJO属性不一致时
要使用<resultMap>元素指定映射关系[解决了表中字段和实体类中属性不同名的问题]
<select id="findAll" resultMap="deptMap"> SELECT deptno,name,loc FROM dept </select> <resultMap id="deptMap" type="org.tarena.entity.Dept"> <result property="no" column="DEPTNO"> <result property="name" column="DNAME"> <result property="loc" column="LOC"> </resultMap>