ps切图做网站,17网一起做网店普宁站,网站开发 犯法,性价比高的服务器一. 为什么要使用Mybatis?
1.1 jdbc的使用步骤 首先#xff0c;在pox.xml中引入MySQl驱动的依赖 第一步, Class.forName 注册驱动 第二步#xff0c;获取一个Connection。 第三步#xff0c;创建一个Statement对象。 第四步#xff0c;execute()方法执行SQL。execute()方…一. 为什么要使用Mybatis?
1.1 jdbc的使用步骤 首先在pox.xml中引入MySQl驱动的依赖 第一步, Class.forName 注册驱动 第二步获取一个Connection。 第三步创建一个Statement对象。 第四步execute()方法执行SQL。execute()方法返回一个ResultSet结果集。 第五步通过ResultSet获取数据给POJO的属性赋值。 最后关闭数据库相关的资源包括ResultSet,Statement,Connection
1.2 jdbc使用存在哪些问题 重复代码 资源管理 结果集处理 SQL耦合处理业务逻辑和处理数据的代码是耦合在一起的
1.3 jdbc问题的解决 Apache在2003年Commons DbUtils工具类简化对数据库的操作。 DbUtils提供了一个QueryRunner类它对数据库的增删改查的方法进行了封装。 private static QueryRunner queryRunner;在QueryRunner的构造函数里面可以传入一个数据源比如这里用Hikari这样我们就不需要再去写各种创建和释放连接的代码了。
queryRunner new QueryRunner(dataSource);通过这个工具类提供获取QueryRunner实例的方法。 方法封装解决了重复代码的问题出入数据源解决了资源管理的问题。 怎么把结果集转换为对象呢比如转换成POJO或者List或者Map? 肯定不能一个属性去set或者put . 我希望做到的是只要指定一个类型它就可以自动把结果集给我转换为这种类型。 为了避免给每种类型创建要给自动转换类在DbUtils里面提供了一系列的支持泛型的ResultSetHandleer比如用来把结果集转换为JavaBean的转换为List的转换为Map的 等等。 只要在DAO层调用QueryRunner封装好的查询方法传入一个指定了类型的Handler它就可以自动把结果集转换为实体类Bean或者List或者Map。 com.gupaoedu.dbutils.dao.BlogDao.java 比如传入一个BeanHandler或者BeanListHandler; com.gupaoedu.dbutils.QueryRunnerTest测试一下结果 BlogDto{bid3,name‘丘山一郎’,quthorId‘null’}
实现的原理 return rs.next()?this.convert.toBean(rs,this.type):null; 最后到了populateBean(): 通过for循环把rs的值填充到了指定的类型属性中。 输出的结果中authorId为什么是空的 这种自动映射要求数据库的字段跟对象的属性名称完全一致才可以实现自动映射。 spring-jdbc 除了DbUtils之外Spring也对原生的JDBC进行了封装。 1.代码重复——Spring提供了一个模板方法JdbcTemplate里边封装了各种各样的execute,query,和update方法。 JDBCTemplate这个类(类的注释) 它是JDBC的核心包装类。简化了JDBC的使用可以避免常见的异常。它封装了JDBC的核心流程应用只要提供SQL提取结果集就可以了。它是线程安全的。 初始化的时候可以设置数据源所以资源管理的问题也可以解决。
public JdbcTemplate(DataSource dataSource){setDataSource(dataSource);afterPropertiesSet();
}对于结果集的处理Spring JDBC提供了一个RowMapper接口可以把结果集转换为Java对象它作为JdbcTemplate的参数使用。 比如要把查询tbl_emp表得到的结果集转换为Employee对象就可以针对一个Employee创建一个RowMapper对象实现RowMapper接口并且重写mapRow()方法。在mapRow()方法里面完成对结果集的处理。
DbUtils 和 Spring JDBC ,这两个对JDBC做了轻量级封装的框架或者说 工具类里边帮我们解决的问题
ORM关系型数据库 什么是ORM为什么叫ORM ORM的全称是Object Relaional Mapping,也就是对象与关系的映射对象是程序里边的对象关系是它与数据库里面的数据的关系。也就是说ORM框架帮助我们解决的问题是程序对象和关系型数据库的相互映射的问题。 Hibernate是要给很流行的ORM框架2001年的时候就出了第一个版本。在使用Hibernate的时候我们需要为实体类建立一些hbm的xml映射文件。 然后通过Hibernate提供(session)的增删改查的方法来操作对象。 Session相关方法也可以通过继承JpaRepository活得无需手动创建。
操作对象根操作数据库的数据一样。Hibernate的框架内会自动帮我们生成SQL语句(可以屏蔽数据库差异)自动进行映射。这样我们呢的代码变得简洁了程序的可读性也提高了。
总结Hibernate的特性 1根据数据方言自动生成SQL移植性好 2自动管理理解资源支持数据源 3实现了对象和关系型数据库的完全映射操作对象就像操作数据库记录一样 4提供了缓存功能机制。
存在的问题 但是Hibernate在业务复杂的项目中使用也存在一些问题 1比如使用get(),update(),save()对象的这种方式实际操作的是所有字段没有办法指定部分字段换句话说就是不够灵活。 2自动生成SQL的方式如果要基于SQL去做一些优化的话是非常困难的也就是说可能出现性能的问题。 3不支持动态SQL比如分表中的表名条件参数变化等无法根据条件自动生成SQL。 因此我们需要一个更加灵活的框架。
Mybatis的核心特性解决了那些问题
使用连接池对连接进行管理SQL和代码分离集中管理结果集映射参数映射和动态SQL重复SQL的提取缓存管理插件机制
Mybatis核心组件及其生命周期 核心配置 特殊的类型typeHandlers
objectFactory 当我们把数据库返回的结果集转换为实体类的时候需要创建对象的实例由于我们不知道需要处理的类型是什么右哪些属性所以不能用new的方式去创建。只能通过反射来创建。 如果想要修改对象工厂在初始化实体类的时候的行为就可以通过创建自己的对象工厂继承DefaultObjectFactory来实现不再需要实现ObjectFactory接口。 例如
plugins 二.