1. 程式人生 > >mybatis學習記錄------1

mybatis學習記錄------1

session root 之間 用戶id string odi 16px day first

一 認識mybatis

mybatis是一個優秀的數據持久層框架,在實體類和SQL語句之間建立映射關系,是一種半自動化的ORM(對象,關系映射)實現。其封裝性要低於Hibernate,性能優越,並且小巧、簡單易學,應用也越來越廣泛。

二 搭建mybatis環境

1.下載需要的JAR包

技術分享圖片

2.部署jar文件

將上述下載的jar文件部署到項目內

三 日誌配置

在java Resources下新建resource文件,命名config,此時config文件夾和src文件夾是一樣的。

在config文件夾下新建log4j.properties文件

並且輸入如下代碼(可上jar包附帶的pdf文檔內查看)

# Global logging configuration
#log4j.rootLogger=ERROR, stdout
log4j.rootLogger=DEBUG, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# 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

四 工程架構

結構:

技術分享圖片

數據庫:mysql

CREATE SCHEMA `mybatis` DEFAULT CHARACTER SET utf8 ;
use mybatis;
CREATE TABLE `items` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(32) NOT NULL COMMENT ‘商品名稱‘,
  `price` float(10,1) NOT NULL COMMENT ‘商品定價‘,
  `detail` text COMMENT ‘商品描述‘,
  `pic` varchar(64) DEFAULT NULL COMMENT ‘商品圖片‘,
  `createtime` datetime NOT NULL COMMENT 
‘生產日期‘, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; CREATE TABLE `orderdetail` ( `id` int(11) NOT NULL AUTO_INCREMENT, `orders_id` int(11) NOT NULL COMMENT ‘訂單id‘, `items_id` int(11) NOT NULL COMMENT ‘商品id‘, `items_num` int(11) DEFAULT NULL COMMENT ‘商品購買數量‘, PRIMARY KEY (`id`), KEY `FK_orderdetail_1` (`orders_id`), KEY `FK_orderdetail_2` (`items_id`), CONSTRAINT `FK_orderdetail_1` FOREIGN KEY (`orders_id`) REFERENCES `orders` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `FK_orderdetail_2` FOREIGN KEY (`items_id`) REFERENCES `items` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; CREATE TABLE `orders` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL COMMENT ‘下單用戶id‘, `number` varchar(32) NOT NULL COMMENT ‘訂單號‘, `createtime` datetime NOT NULL COMMENT ‘創建訂單時間‘, `note` varchar(100) DEFAULT NULL COMMENT ‘備註‘, PRIMARY KEY (`id`), KEY `FK_orders_1` (`user_id`), CONSTRAINT `FK_orders_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(32) NOT NULL COMMENT ‘用戶名稱‘, `birthday` date DEFAULT NULL COMMENT ‘生日‘, `sex` char(1) DEFAULT NULL COMMENT ‘性別‘, `address` varchar(256) DEFAULT NULL COMMENT ‘地址‘, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8; insert into `items`(`id`,`name`,`price`,`detail`,`pic`,`createtime`) values (1,‘臺式機‘,3000.0,‘該電腦質量非常好!!!!‘,NULL,‘2015-02-03 13:22:53‘),(2,‘筆記本‘,6000.0,‘筆記本性能好,質量好!!!!!‘,NULL,‘2015-02-09 13:22:57‘),(3,‘背包‘,200.0,‘名牌背包,容量大質量好!!!!‘,NULL,‘2015-02-06 13:23:02‘); insert into `orderdetail`(`id`,`orders_id`,`items_id`,`items_num`) values (1,3,1,1),(2,3,2,3),(3,4,3,4),(4,4,2,3); insert into `orders`(`id`,`user_id`,`number`,`createtime`,`note`) values (3,1,‘1000010‘,‘2015-02-04 13:22:35‘,NULL),(4,1,‘1000011‘,‘2015-02-03 13:22:41‘,NULL),(5,10,‘1000012‘,‘2015-02-12 16:13:23‘,NULL); insert into `user`(`id`,`username`,`birthday`,`sex`,`address`) values (1,‘王五‘,NULL,‘2‘,NULL),(10,‘張三‘,‘2014-07-10‘,‘1‘,‘北京市‘),(16,‘張小明‘,NULL,‘1‘,‘河南鄭州‘),(22,‘陳小明‘,NULL,‘1‘,‘河南鄭州‘),(24,‘張三豐‘,NULL,‘1‘,‘河南鄭州‘),(25,‘陳小明‘,NULL,‘1‘,‘河南鄭州‘),(26,‘王五‘,NULL,NULL,NULL);

1.在config文件夾下新建SqlMapConfig.xml(mybatis核心配置文件)

配置mybatis的運行環境,數據源,事務等

<?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>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/><!-- ${driver} -->
        <property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8"/><!-- ${url} -->
        <property name="username" value="root"/><!-- ${username} -->
        <property name="password" value="123456"/><!-- ${password} -->
      </dataSource>
    </environment>
  </environments>
</configuration>

2.創建持久化類pojo

持久化類是指其實例對象需要被Mybatis持久化到數據庫中的類。在應用的設計中,持久化類通常對應需求中的業務實體,mybatis中一般采用POJO編程模型來實現持久化類。

在src文件夾下新建po包

技術分享圖片

在po包下新建User.java

package pers.czs.mybatis.po;

import java.util.Date;

public class User {
    //屬性名和數據庫中字段對應
    private int id;
    private String username;// 用戶姓名
    private String sex;// 性別
    private Date birthday;// 生日
    private String address;// 地址
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    
}

3.映射文件

映射文件命名:

mapper代理開發映射文件名稱叫做xxxMapper.xml,比如:UserMapper.xml

在config文件夾下新建folder,命名為sqlMap(存放映射文件)

在sqlMap下新建User.xml

<?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">

<!-- namespace 命名空間,作用是對sql進行分類化管理,理解為對sql進行隔離 -->
<mapper namespace="test">
    <!-- 在映射文件中配置很多sql語句 -->
    <!-- 
        通過select執行數據庫查詢
        id:標識映射文件中的sql,
        將sql語句封裝到mappedStatement對象中
         parameterType表示指定輸入參數類型,這裏指定int型
         #{}表示一個占位符,和jdbc內的?一樣
         #{id}:其中的id表示接收輸入的參數,參數名稱就是id,如果輸入參數時簡單類型,那麽#{}中的參數名可以任意
         resultType:指定sql輸出結果所映射的java對象類型,select指定resultType表示將單條記錄映射成的java對象。
     -->
     
     <select id="findUserById" parameterType="int" resultType="pers.czs.mybatis.po.User">
         select * from user where id=#{id}
     </select>
</mapper>

4.在SqlMapConfig文件中加載配置文件

技術分享圖片

五 程序編寫

1.在src內新建first包用於測試

技術分享圖片

在包內新建MybatisFirst.java文件

package pers.czs.mybatis.first;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import pers.czs.mybatis.po.User;

public class MybatisFirst {
    //根據id查詢用戶信息,得到一條記錄的結果
    @Test
    public void findUserByIdTest() throws IOException {
        
        //Mybatis配置文件
        String resource = "SqlMapConfig.xml";
        //得到配置文件流
        InputStream inputStream = Resources.getResourceAsStream(resource);
        
        //創建會話工廠,傳入配置文件信息
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //通過工廠得到SqlSession會話
        SqlSession sqlSession = sqlSessionFactory.openSession();
        
        //通過SqlSession操作數據庫
        //第一個參數:映射文件中的id,等於namespace+"."+id 
        //第二個參數:指定和映射文件中所匹配的parameterType類型的參數
        //sqlSession.selectOne的結果是與映射文件中所匹配的resultType類型的對象
        User user = sqlSession.selectOne("test.findUserById", 1);
        System.out.println(user+"  這是輸出結果");
        //釋放資源
        sqlSession.close();
    }
}

2.JUnit運行

運行結果:

技術分享圖片

其中DEBUG[main]是運行日誌

mybatis學習記錄------1