初识Mybatis

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: 1
admin

其中admin为查出的user名字,上面的两条为打出的日志
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值