初识Mybatis

来源:互联网 发布:网络支付跨行代付 编辑:程序博客网 时间:2024/05/22 21:35

1、Mybatis是一个基于Java的持久层框架,并且将SQL语句和代码分离,是一种面向配置的编程,可以良好的支持复杂数据映射,用动态SQL替代了SQL拼装语句。

2、mybatis环境搭建:

  • mybatis-3.2.8.jar
  • mybatis依赖包(上面两个都可以到github上面直接下载)
  • mysql-connector-java-5.1.33.jar(项目使用的数据库为mysql)

    包结构如下图所示:

引入的包结构
3、mybatis工作流程

  • 读取配置文件,读取连接数据库的基本信息。
  • 这些信息可以生成SqlSessionFactory,这是一个SqlSession的工厂,用于建议跟数据库之间的会话。
  • 建立SqlSession,
  • 调用mybatis中的各种API函数来执行SQL语句。
  • 查询MAP的配置
  • 返回结果
  • 关闭SQLsession

4、配置文件

<environments default="development">       <environment id="development">           <transactionManager type="jdbc"/>           <dataSource type="POOLED">              <property name="driver" value="com.mysql.jdbc.Driver"/>              <property name="url" value="jdbc:mysql://localhost:3306/mytest"/>              <property name="username" value="root"/>              <property name="password" value="root"/>           </dataSource>       </environment>   </environments>  <mappers>       <mapper resource="com/book/mapper/UserMapper.xml" />   </mappers> 

配置文件中有两个重要的模块,一个是environments,包含连接数据库的基本信息;另一个是mappers,存放map配置文件的路径。

map文件有三种引用方式:

  • 使用相对路径引用:
<mappers>    <mapper resource = "test/book/map/user.xml" /><!--此时把map当做一个资源文件 --></mappers>
  • 绝对路径引用:
<mapper url = "file:///test/book/map/user.xml" />
  • 使用包路径引用
<package name="com.test.book.map" />

5、SqlSessionFactory和SqlSession

  • SQLSessionFactory:代表着和数据库之间的一种连接。生命周期时程序级,随着程序的建立而建立,程序的结束而消亡。
  • SQLSession:执行数据库中的各种各样的操作,SqlSession是由SqlSqssionFactory来建立的。SqlSession是过程级别的,当方法中需要连接数据库进行查询的时候建立,方法退出的时候关闭。

下面,就是两者的建立方法:

//reader为输入流,是配置文件生成的输入流SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);//可以通过session来做各种数据查询session = sqlSessionFactory.openSession();

6、map文件

<select id="getById" resultType="com.book.model.User"        paramterType="com.book.model.User">    select * from user where id=#{user_id}</select>

其中,id是这个SQL方法的唯一标识,resultType是该SQL返回值的数据类型,paramterType为参数类型,#{user_id} 其中user_id为传入的参数值。

7、了解这些之后,我们来看一个实例:

  • 项目结构:

这里写图片描述

  • mybatis配置文件:
<configuration>         <environments default="development">          <environment id="development">              <transactionManager type="jdbc"/>           <!--数据库用的MySQL,使用jdbc事物 下面为数据库的基本配置 -->              <dataSource type="POOLED">                 <property name="driver" value="com.mysql.jdbc.Driver"/>                 <property name="url" value="jdbc:mysql://localhost:3306/mytest"/>                 <property name="username" value="root"/>                 <property name="password" value="root"/>              </dataSource>          </environment>       </environments>       <!-- mybatis的map文件的路径,采用相对路径的配置-->    <mappers>           <mapper resource="com/book/mapper/UserMapper.xml" />       </mappers>   </configuration>  
  • map配置文件:
<!--namespace定义的为map配置文件的路径 --><mapper namespace="com.book.mapper.UserMapper">    <resultMap type="com.book.model.User" id="user" />    <select id="getById" resultMap="user">        select * from user        where id=#{user_id}    </select></mapper>

与数据库对应的基类:

package com.book.model;//该基类的属性和数据库中的字段相对应public class User {    private String id ;    private String user_name;    private String password;    public String getId() {        return id;    }    public void setId(String id) {        this.id = id;    }    public String getUser_name() {        return user_name;    }    public void setUser_name(String user_name) {        this.user_name = user_name;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }}

测试类:

public class TestHello {    public static void main(String[] args) {        // TODO Auto-generated method stub        //mybatis的配置文件路径        String resource = "com/book/mapper/MybatisConfig.xml";        Reader reader = null;        SqlSession session;        try {            reader = Resources.getResourceAsReader(resource);        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        //获得SqlSessionFactory        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);        //通过SqlSessionFactory获得SqlSession        session = sqlSessionFactory.openSession();        //selectOne为SqlSession执行查询的方法,其中"getById"为需要调用的SQL的名字,1为传入的参数值        User user = session.selectOne("getById",1);        System.out.println(user.getUser_name());        //使用完成后需要关闭session        session.close();    }}

输出结果:

2015-12-24 20:26:58,778 DEBUG [BaseJdbcLogger.java:139] : ==>  Preparing: select * from user where id=? 2015-12-24 20:26:58,829 DEBUG [BaseJdbcLogger.java:139] : ==> Parameters: 1(Integer)2015-12-24 20:26:58,847 DEBUG [BaseJdbcLogger.java:139] : <==      Total: 1admin其中admin为查出的user名字,上面的两条为打出的日志
0 0
原创粉丝点击