1、数据库连接频繁的创建和关闭,缺点浪费数据库的资源,影响操作效率
设想:使用数据库连接池
2、sql语句是硬编码,如果需求变更需要修改sql,就需要修改java代码,需要重新编译,系统不易维护。
设想:将sql语句 统一配置在文件中,修改sql不需要修改java代码。
3、通过preparedStatement向占位符设置参数,存在硬编码( 参数位置,参数)问题。系统不易维护。
设想:将sql中的占位符及对应的参数类型配置在配置文件中,能够自动输入 映射。
4、遍历查询结果集存在硬编码(列名)。
设想:自动进行sql查询结果向java对象的映射(输出映射)。
mybaits的架构
mybatis-3.2.7.jar--核心 jar包
工程文件
sqlMapConfig.xml 公用文件 加载mybaits的运行环境(类似Hibernate的HibernateConfig.xml 在和spring整合后无用 加载 对象.xml)。
pojo类对应的xml文件(User类 对应 user.xml)。
·<mapper namespace>定义statement
·查询标签<select id(唯一标识一个statement) parametType(参数类型) resultType(返回值类型) >
· sql 语句 select * from where id=#{id} (#{}是一个占位符 mybaits自动进行java和jdbc类型的转换 在需要拼接时 可以使用¥{} 指内容会不加任何修饰的添加 在我们的sql当中)
</mapper>
·当属性值不是普通类型时 mybatis 同时支持OGNL语言解析pojo的属性值。
JAVA文件
首先获取sessionFactory(根据配置文件创建会话工厂)
·加载配置文件到输入流。
·创建会化工厂 sqlSessionFactoryBuilder().build(InputStream)。
·回话工厂获取会话 SqlSession。
·通过回话操作数据库。(statement=namespace.id)。
··sqlsession.close();
对jdbc问题的解决
·解决1:sqlMapperConfig.xml中配置数据连接池,使用连接池管理数据库连接。
·解决2:sql语句在mapper.xml文件当中与java代码分离。
·解决3:自动将java对象映射至sql语句,通过statement中的parametertype定义输入参数的类型。
·解决4:自动将sql执行的结果映射至java对象 通过statement中的resultType定义输出参数的类型。
Mapper代理开发