ibatis學習入門2

上一篇文章介紹一下ibaitis的入門,今天來看下它的註解使用以及sqlsession。


首先,配置ibatis,在配置文件中寫上數據庫的信息。然後配置事務管理,最後是mapper映射器,查sql並且映射成對象。${XX}變量等待映射器來注入。

<?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>
    <!-- 數據庫連接驗證詳細信息 -->
    <properties resource="db.properties"/>
    <!--<properties resource="db_local.properties"/>-->


    <!-- 事務管理和連接池的環境配置 -->
    <!-- environments有開發模式和生產模式 -->
    <environments default="development">
        <environment id="development">
            <!-- 事務類型 -->
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
                <property name="poolPingEnabled" value="true"/>
                <property name="poolPingQuery" value="select 1"/>
                <!-- 等待時間 1小時: 3600000 = 1*60*60*1000ms-->
                <property name="poolPingConnectionsNotUsedFor" value="3600000"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 一組 mapper 映射器(這些 mapper的 XML 文件包含了 SQL 代碼和映射定義信息) -->
    <mappers>
        <mapper class="com.roc.webnote.repository.mapper.UserMapper"/>
        <mapper class="com.roc.webnote.repository.mapper.ArticleMapper"/>
        <mapper class="com.roc.webnote.repository.mapper.SocialMapper"/>
        <mapper class="com.roc.wechat.repository.mapper.WechatUserInfoMapper"/>
    </mappers>
</configuration>


貼一個映射器的代碼,利用ibatis的註解將sql寫在註解中比將sql寫在xml中更加方便。


package com.roc.webnote.repository.mapper;

import com.roc.webnote.entity.SocialUser;
import com.roc.webnote.entity.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

/**
 * Created by yp-tc-m-2795 on 15/9/13.
 */
public interface UserMapper {

    @Select("SELECT * FROM user WHERE userName = #{userName} AND password = #{password}")
    User getUser(User user);

    @Select("SELECT * FROM user WHERE code = #{userCode}")
    User getUserByCode(String userCode);

    @Select("SELECT * FROM user Where `code` IN (SELECT userCode FROM social WHERE type = #{type} AND openID = #{openID})")
    User getUserBySocial(SocialUser socialUser);

    @Insert("INSERT INTO user (code, userName, password, nickname, avatar) values (#{code}, #{userName}, #{password}, #{nickname}, #{avatar})")
    void insertUser(User user);

    @Update("UPDATE user set userName = #{userName}, password = #{password}, nickname = #{nickname}, avatar = #{avatar} WHERE code = #{code}")
    void updateUser(User user);
}

生成SqlSessionFactory來管理sql訪問的一個事務。單例模式。這裏拿到了最開頭的batis-config.xml

package com.roc.webnote.repository;


import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;


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


/**
 * Created by 2795 on 15/8/19.
 */
public class MyBatisConnectionFactory {
    private static SqlSessionFactory sqlSessionFactory = null;


    /**
     * 單例模式生成sqlSessionFactory
     *
     * @return
     * @throws IOException
     */
    public static SqlSessionFactory getSqlSessionFactory() {
        if (sqlSessionFactory == null) {
            synchronized (MyBatisConnectionFactory.class) {
                if (sqlSessionFactory == null) {
                    String resource = "mybatis-config.xml";
                    if (System.getProperty("os.name").contains("Mac")){
                        resource = "mybatis-config-local.xml";
                    }
                    InputStream inputStream = null;
                    try {
                        inputStream = Resources.getResourceAsStream(resource);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    sqlSessionFactory = new SqlSessionFactoryBuilder()
                            .build(inputStream);
                }
            }
        }
        return sqlSessionFactory;
    }


    private MyBatisConnectionFactory() {
    }
}

在代碼dao層,就可以用這個sqlSessionFactory的對象session來getMapper獲得返回的對象

package com.roc.wechat.repository.impl;

import com.roc.webnote.repository.BaseDao;
import com.roc.wechat.entity.WechatUserInfo;
import com.roc.wechat.repository.mapper.WechatUserInfoMapper;
import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;

/**
 * Created by baidu on 16/1/17.
 */
@Repository
public class WechatUserInfoDao extends BaseDao implements WechatUserInfoMapper {
    @Override
    public WechatUserInfo getWechatUserInfo(String openId) {
        try (SqlSession session = sessionFactory.openSession(true)) {
            WechatUserInfoMapper wechatUserInfoMapper = session.getMapper(WechatUserInfoMapper.class);
            return wechatUserInfoMapper.getWechatUserInfo(openId);
        }
    }

    @Override
    public void insertWechatUserInfo(WechatUserInfo wechatUserInfo) {
        try (SqlSession session = sessionFactory.openSession(true)) {
            WechatUserInfoMapper wechatUserInfoMapper = session.getMapper(WechatUserInfoMapper.class);
            wechatUserInfoMapper.insertWechatUserInfo(wechatUserInfo);
        }
    }

    @Override
    public void updateWechatUserInfo(WechatUserInfo wechatUserInfo) {
        try (SqlSession session = sessionFactory.openSession(true)) {
            WechatUserInfoMapper wechatUserInfoMapper = session.getMapper(WechatUserInfoMapper.class);
            wechatUserInfoMapper.updateWechatUserInfo(wechatUserInfo);
        }
    }
}


發佈了14 篇原創文章 · 獲贊 4 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章