SSM框架-----Mybatis篇
三.Mybatis
1.SpringJdbc
1.1 SpringJdbc是什么?
是Spring框架对jdbc的封装.目的是为了简化代码,提高质量效率,比如访问数据库要先连接跟关闭连接都已经写好了。
1.2 怎么用?
step1.导spring-webmvc,spring-jdbc,ojdbc,dbcp,junit
step2.添加配置文件,spring容器表配置JdbcTemplate
配置就相当于调用JdbcTemplate的方法访问连接了数据库. Dao封装一个内部类实现RowMapper< T >接口,有结果集,查询语句必用
jt.update(sql,args); ++ jt.query(sql,new EmpRowMapper());返回一个集合
jt.queryForObject(sql, args,new EmpRowMapper());返回一个员工数据
2 Mybatis
2.1 Mybtis是什么?——是对jdbc的封装,开源的持久层框架
2.2 怎么用?
step1.导mybatis,ojdbc,junit
step2.添加配置文件
step3.实体类(属性名跟表的字段名一样,不计大小写)
step4.添加一个映射文件(主要是一些sql语句)
step5.调用SqlSession提供的方法来访问数据库
没有entity也可以通过返回的Map类型获得,Map封装的都是大写的key,如map.get("NAME"),resultType可以=m(简写)
2.2 Mybatis的基本原理
a.SqlSessionFactory通过读取MyBatis配置文件(SqlMapConfig.xml),创建一个Map(key是sql的id,值是PreparedStatement对象)
b.调用SqlSession对象提供的方法来执行sql,SqlSession对象会依据 sqlId在Map中找到对应的PreparedStatement对象,然后执行相应的方法(比如executeUpdate等)
c.如果执行的是查询,对结果的处理分两步:.
第一步,是将一条记录中存放的数据先添加到一个对应的Map对象里面(以字段名作为key,以字段值作为value)
第二步,会将Map对象存放的数据添加到对应的实体对象里面(这也是为什么要求实体类的属性名必须与表的字段名要求一致的原因)
解决entity实体类属性名跟数据库表的字段不一样的情况
方法一: 使用别名 select id empNo,name ename,salary,age from lin_emp where id=#{num}
方法二: 使用resultMap
2.3 Mapper映射器
2.3.1 Mapper映射器是什么?
是一个符合映射文件要求的接口,它跟上面讲的映射文件是互相关联的叫映射器。MyBatis会自动生成一个符合该接口要求的对象,只需要调用该对象的方法,就可以访问数据库
2.3.2 如何写?
step1.方法名必须跟sqlId一样
step2.参数类型必须跟parameterType一样
step3.返回类型必须跟resultType一样
2.4 Spring集成MyBatis(使用Mapper映射器,没有附上映射文件跟映射器图片,上面有这2图)
step1.导spring-webmvc,mybatis,mybatis-spring,spring-jdbc,ojdbc,dbcp,junit
step2.添加Spring配置文件,MyBatis配置文件就不需要了,使用SqlSessionFactoryBean来代替
step3.实体类 + 映射文件 + Mapper映射器 + 配置MapperScannerConfigurer该bean会调用sqlsession的getMapper方法来获得映射器的实现对象,并且会将这些对象添加到Spring容器里面(默认id是首字母小写的接口名,或者加个持久注解)