Mybatis原理与学习

来源:互联网 发布:淘宝怎么养号养到钻号 编辑:程序博客网 时间:2024/05/17 06:39

1      Jdbc编程中的问题

 

1.1    写一个JDBC的小程序

 

目标:

1、  通过jdbc程序找出当中的问题

2、  重视jdbc编程,企业在技术选型时对于小型的项目或性能要求较高的项目,优先选用jdbc开发。

 

准备开发环境:

Jdk1.7.72   +  Eclipse indigo(3.7) + Mysql5.1

运行环境:

Mysql5.1数据库驱动

创建mysql数据库:

代码如下:

publicclass JdbcTest {

  

   //定义sql语句,根据名称查询用户表的记录

   privatestatic Stringsql ="SELECT * FROM USER WHERE username =  ?";

   publicstaticvoid main(String[] args)throws SQLException {

      //数据库连接

      Connection connection = null;

      //预编译statement

      //好处:防止sql注入,提高数据的性能

      PreparedStatement preparedStatement =null;

      //结果集

      ResultSet resultSet = null;

      try {

         //加载数据库驱动

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

         //连接数据库

         connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis","root", "mysql");

         //构造preparedStatement

         preparedStatement =connection.prepareStatement(sql);

         //preparedStatement中占位符的位置设置参数

         preparedStatement.setString(1,"张三");

         //发起数据库查询请求,得到结果集

         resultSet =preparedStatement.executeQuery();

         //遍历查询结果

         while(resultSet.next()){

            int id = resultSet.getInt("id");

            String username =resultSet.getString("username");

            Date birthday = resultSet.getDate("birthday");

            System.out.println(id+"  "+username+"  "+birthday);

         }

      } catch (Exception e) {

         e.printStackTrace();

      }finally{

         //释放资源

         if(resultSet!=null){

            resultSet.close();

         }

         if(preparedStatement!=null){

            preparedStatement.close();

         }

         if(connection!=null){

            connection.close();

         }

     

   }

}

1.2    总结问题

1、  将sql语句硬编码到java代码中,如果修改sql语句,需要修改java代码,重新编译。系统可维护性不高。

设想如何解决?

能否将sql单独配置在配置文件中。

 

2、  数据库连接频繁开启和释放,对数据库的资源是一种浪费。

设想如何解决?

使用数据库连接池管理数据库连接。

 

3、  向preparedStatement中占位符的位置设置参数时,存在硬编码(占位符的位置,设置的变量值)

设想如何解决?

能否也通过配置的方式,配置设置的参数,自动进行设置参数。

 

 

4、  解析结果集时存在硬编码(表的字段名、字段的类型)

设想如何解决?

能否将查询结果集映射成java对象。

2 、Mybatis框架

2.1    Mybatis是什么?

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis。

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

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

1、  mybatis配置

SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。

mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。

2、  通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂

3、  由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。

4、  mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。

5、  Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。

6、  Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。

7、  Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。

1      mybatis第一程序

 

1.1    准备环境:

l  Mybatis运行环境:

 

去mybatis官方网站下载Mybatis3.2.3。


mybatis-3.2.3.jar:mybatis核心包

mybaits的依赖包:

l  准备开发环境:

Jdk1.7.72

Eclipse indigo(3.7)

Mysql5.1

 

l  数据库运行环境:

Mysql5.1数据库驱动

l  创建mysql数据库:

3.2    用户查询开发

需求:

根据用户id查询一条记录(返回单条记录)

查询用户列表(返回list集合)


3.2.1    创建java工程

3.2.2

    加入mybatis的jar包

加入 :mybatis核心包、mybatis依赖包、数据驱动包

3.2.3    配置log4j.properties

 

#Global logging configuration

log4j.rootLogger=DEBUG, stdout

#Console output...

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

 

注意:开发阶段使用DEBUG

3.2.3    配置mybatis全局配置文件

全局配置文件:SqlMapConfig.xml(名称不是固定的)

配置的内容包括:

数据库运行环境(和spring整合废除了)

Mapper映射文件



3.2.5    创建po类

建议po类名和表名一致,属性名和表字段名一致。

3.2.6 配置mybatis的mapper映射文件



0 0