上一篇文章介紹一下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);
}
}
}