Mybatis学习笔记--1:先跑起来再说

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis。是一个基于Java的持久层框架.无论是Mybatis、Hibernate都是ORM的一种实现框架,都是对JDBC的一种封装!

先放项目目录:

a142c7ef007bfd5bb19a2372fd4fa7d609c.jpg

  1. 准备测试工作
  •  导入Mybatis开发包

                    mybatis-3.1.1.jar          

                    mysql-connector-java-5.1.7-bin.jar

  • 创建一张表(MySql)

-- ----------------------------
-- Table structure for customer
-- ----------------------------
DROP TABLE IF EXISTS `customer`;
CREATE TABLE `customer` (
  `cust_id` int(11) NOT NULL AUTO_INCREMENT,
  `cust_name` varchar(255) DEFAULT NULL,
  `cust_profession` varchar(255) DEFAULT NULL,
  `cust_phone` varchar(255) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`cust_id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of customer
-- ----------------------------
INSERT INTO `customer` VALUES ('1', '鲁班', '射手', '13499887733', '12341241@qq.com');
INSERT INTO `customer` VALUES ('2', '李白', '刺客', '18977665521', 'libai@163.com');
INSERT INTO `customer` VALUES ('3', '阿轲', '刺客', '18977665997', 'aike@qq.com');
INSERT INTO `customer` VALUES ('4', '德玛西亚', '肉盾', '13700997665', 'demaxiya.126.com6');
INSERT INTO `customer` VALUES ('5', '亚索', '战士', '13586878987', 'yasuo@qq.com');
INSERT INTO `customer` VALUES ('6', '奶妈', '辅助', '13398909089', 'nama@qq.com');
INSERT INTO `customer` VALUES ('7', '剑圣', '刺客', '13398909088', 'jiansheng@163.com');
  • 创建实体:entity.customer.java
public class Customer {
    private Integer cust_id;
    private String cust_name;
    private String cust_profession;
    private String cust_phone;
    private String email;
}

 

  • 创建mybatis配置文件 :mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- spring整合后 environments配置将废除 使用spring中的连接池 -->
    <environments default="development">
        <environment id="development">
            <!-- 使用jdbc事务管理 -->
            <transactionManager type="JDBC" />
            <!-- 数据库连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url"
                          value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
                <property name="username" value="root" />
                <property name="password" value="1234" />
            </dataSource>
        </environment>
    </environments>
</configuration>
  • 创建与表对象的关系映射Mapper文件mapper/customer.xml
  • 编写sql语句
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="myTest">
    <!--后续通过namespace.id使用-->
    <!--根据cust_id查询客户-->
    <select id="queryCustomerById" parameterType="Int" resultType="com.hbuas.sw.entity.Customer">
	  SELECT * FROM `customer` WHERE cust_id  = #{cust_id}
	</select>
  •  将mapper映射文件加载到mybatis配置文件

8e40c03bd74b28f3b000ebb2e7dc27d6e91.jpg

2、执行

1.从硬盘中将mybatis配置文件读到某一对象中;创建SqlSession,执行sql语句


//1.config.xml --->reader
Reader reader =Resources.getResourceAsReader("myBatis-config.xml);
//2.reader --->SqlSession
SqlSessionFactory sessionFacotry = new SqlSessionFactoryBuild().build(reader );
SqlSession session = sessionFacotry.openSession();

2.执行SQL

//第一个参数是Customer.xml的statement的ID;也可以写命名空间.ID;
Customer customer =sqlSession.selectOne("queryCustomerById",1L);
System.out.println("customer");
//释放内存
sqlSession.close();

======================分割线=========================

Mybatis工作流程:

  • 通过Reader对象读取Mybatis配置文件

  • 通过SqlSessionFactoryBuilder对象创建SqlSessionFactory对象

  • 获取当前线程的SQLSession

  • 事务默认开启

  • 通过SQLSession读取映射文件中的操作编号,从而读取SQL语句

  • 提交事务

  • 关闭资源

 

3.Main方法中的名词解释:

SqlSession:连接到数据库的一个会话,sqlSession中定义了数据库操作方法。
每个线程都应该有它自己的SqlSession实例,SqlSession的实例不能共享使用,它也是线程不安全的。绝对不能将SqlSession实例的引用放在一个类的静态字段或实例字段中。

 

SqlSessionFactory:创建sqlSession的工厂,是一个接口;接口中定义了openSession的不同重载方法。SqlSessionFactory的最佳使用范围是整个应用运行期间,一旦创建后可以重复使用,通常以单例模式管理SqlSessionFactory。

 

SqlSessionFactoryBuilder:SqlSessionFactoryBuilder用于创建SqlSessionFacoty
SqlSessionFacoty一旦创建完成就不需要SqlSessionFactoryBuilder了;因为SqlSession是通过SqlSessionFactory创建的;所以可以将SqlSessionFactoryBuilder当成一个工具类使用,最佳使用范围是方法范围即方法体内局部变量。

MyBatis架构:c2e6e10841bd13570589e2c8c65d9061f84.jpg

 

 

 

转载于:https://my.oschina.net/u/4152684/blog/3065239

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值