Mybaits开发整理

                                          前瞻

1.JDBC原生开发步骤

导包:将需要的jar包复制到项目名下的新建的lib文件夹中,

    jdbc的原生开发步骤

  1、注册驱动

  2、获得连接

  3、获得执行者对象

  4、获得结果集

  5、结果集处理

  6、释放资源

public class Test {

    public static void main(String[] args) throws Exception {

        //1.注册驱动,反射方式加载

        Class.forName("com.mysql.jdbc.Driver");

        //设置url,用户名,密码

        String url = "jdbc:mysql://127.0.0.1:3306/day08";//person是数据库名

        String username = "root";

        String password = "root";

        //2.获得连接对象

        Connection con = DriverManager.getConnection(url, username, password);

        //System.out.println(con);

        //3.获得执行者对象

        String sql = "select * from phones";

        PreparedStatement ps = con.prepareStatement(sql);

        //4.获得结果集

        ResultSet rs = ps.executeQuery();

        //5.结果集处理,

        while(rs.next()){

            System.out.println(rs.getString("id")+"  "+rs.getString("pinpai")+" "+  
                               rs.getString("xinghao")+"  "+rs.getString("jiage"));

        }

        //6.释放资源

        rs.close();

        ps.close();

        con.close();

    }

}

2.Jdbc问题总结

1、数据库连接频繁的创建和关闭,缺点浪费数据库的资源,影响操作效率

设想:使用数据库连接池

 

2、sql语句是硬编码,如果需求变更需要修改sql,就需要修改java代码,要重新编译,系统不易维护。

设想:将sql语句 统一配置在文件中,修改sql不需要修改java代码。

 

3、通过preparedStatement向占位符设置参数,存在硬编码( 参数位置,参数)问题。系统不易维护。

设想:将sql中的占位符及对应的参数类型配置在配置文件中,能够自动输入 映射。

 

4、遍历查询结果集存在硬编码(列名)。

设想:自动进行sql查询结果向java对象的映射(输出映射)。

 

3.mybaits介绍

MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码

Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。

 

 

4.范围和生命周期

SqlSessionFactoryBuilder 

此类可被实例化,使用和丢弃。一旦创建了 SqlSessionFactory后,这个类就不需要存在了。因此 SqlSessionFactoryBuilder实例的最佳范围是方法范围(也就是本地方法变量)。你可以重用 SqlSessionFactoryBuilder来创建多个   SqlSessionFactory实例,但是最好的方式是不需要保持它一直存在来保证所有 XML解析资源,因为还有更重要的事情要做。

SqlSessionFactory

此类一旦被创建,SqlSessionFactory实例应该在你的应用程序执行期间都存在。没有理由来处理或重新创建它。使用 SqlSessionFactory的最佳实践是在应用程序运行期间不要重复创建多次。这样的操作将被视为是非常糟糕的。因此 SqlSessionFactory的最佳范围是应用范围。有很多方法可以做到,最简单的就是使用单例模式或者静态单例模式。然而这两种方法都不认为是最佳实践。这样的话,你可以考虑依赖注入容器,比如 Google Guice或   Spring。这样的框架允许你创建支持程序来管理单例 SqlSessionFactory的生命周期。

SqlSession

每个线程都应该有它自己的 SqlSession实例。SqlSession的实例不能共享使用,它也是线程不安全的。因此最佳的范围是请求或方法范围。绝对不能将 SqlSession实例的引用放在一个类的静态字段甚至是实例字段中。也绝不能将 SqlSession实例的引用放在任何类型的管理范围中,比如  Serlvet架构中的   HttpSession。如果你现在正用任意的  Web框架,要考虑SqlSession放在一个和   HTTP请求对象相似的范围内。换句话说,基于收到的   HTTP请求,你可以打开了一个 SqlSession,然后返回响应,就可以关闭它了。关闭  Session很重要,你应该确保使用 finally块来关闭它。

下面的示例就是一个确保  SqlSession关闭的基本模式:

 


                                              正文

1.编写实例

mybatis开发过程小结

1、编写SqlMapConfig.xml

2、编写mapper.xml

定义了statement

3、编程通过配置文件创建SqlSessionFactory

4、通过SqlSessionFactory获取SqlSession

5、通过SqlSession操作数据库

如果执行添加、更新、删除需要调用SqlSession.commit()

6、SqlSesion使用完成要关闭

1.1SqlMapConfig.xml(公用文件名称不固定)

通过SqlMapConfig.xml加载mybatis运行环境。

1.2根据id查询用户-pojo(User.java)

 

1.3User.xml(重点)

建议命名规则:表名+mapper.xml

早期ibatis命名规则:表名.xml

 

 

1.4创建SqlSessionFactory:

 

 

 

2.改进:根据用户名称模糊查询用户信息

 

根据用户名称模糊查询用户信息可能返回多条记录。

2.1 User.xml

 

2.2编码

 

2.3使用${}接收参数

 

 

3.比较

 3.1 Mybatis解决jdbc编程的问题 

  • 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。

解决:在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接。

  • Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。

解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。

  • 向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。

解决Mybatis自动将java对象映射至sql语句,通过statement中的parameterType定义输入参数的类型。

  • 对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。

解决:Mybatis自动将sql执行结果映射至java对象,通过statement中的resultType定义输出结果的类型。

 

3.2 mybatis与hibernate重要区别

     企业开发进行技术选型 ,考虑mybatis与hibernate适用场景。

mybatis:入门简单,程序容易上手开发,节省开发成本 。mybatis需要程序员自己编写sql语句,是一个不完全 的ORM框架,对sql修改和优化非常容易实现 。

mybatis适合开发需求变更频繁的系统,比如:互联网项目。

hibernate:入门门槛高,如果用hibernate写出高性能的程序不容易实现。hibernate不用写sql语句,是一个 ORM框架。

hibernate适合需求固定,对象数据模型稳定,中小型项目,比如:企业OA系统。

 

总之,企业在技术选型时根据项目实际情况,以降低成本和提高系统 可维护性为出发点进行技术选型。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值