mybatis3.1使用方法

    ibatis和hibernate区别在于,hibernate是全自动化管理,ibatis是半自动化管理,hibernate直接将表字段跟实体属性映射,我们减少了很多操作和心思,但是也带来一些麻烦,配置文件的数量将大量增加。ibatis只对DAO进行映射,对每个DAO擦作管理配置,底层只是解析配置好的SQL语句。也就是说,将SQL语句交给XML文件,我们不需要知道表里面的字段叫什么,只要知道DAO传过来是什么类型的参数就行了。

    一,导包 mybatis-3.1.1.jar,数据库驱动,日志记录包log4j.jar

    二,编写实体类 User.java

    三,写核心XML文件,配置访问数据库的相关属性

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration  
PUBLIC "-//ibatis.apache.org//DTD Config 3.1//EN"  
"http://ibatis.apache.org/dtd/ibatis-3-config.dtd">

<configuration>
    <properties resource="sql.properties"/>
    <typeAliases>
        <typeAlias type="entity.User" alias="User"/> //这里其实没有什么意义,只能在本配置文件中用User代替entity.User
    </typeAliases>
    
    <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}"/>
    </dataSource>
    </environment>
    </environments>
    <mappers>
        <mapper resource="user.xml"/>
    </mappers>
    
</configuration>

//这里的几个EL表达式,是从sql.properties这个文件中获取东西,如果不方配置文件中,可以这么写

 <properties>

   <property name="username" value="root"/>

   <property name="password" value="1234"/>

 </properties>


  四,user.xml文件

    这个文件是一个关键,映射了所有的DAO操作方法(HIBERNATE是映射实体,IBATIS映射方法)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper  
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.1//EN"  
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="dao.UserDAO"> //这个命名空间非常重要,UserDAO是一个接口
    <delete id="deleteUser" parameterType="User"> //这个id非常重要,在DAO中,直接使用命名空间.ID来对应这个SQL语句
        delete from d_user where id=#{id}
    </delete>
    
    <select id="selectById" parameterType="java.lang.Integer" resultType="User">
        select * from d_user where id=#{id}
    </select>
</mapper>

 

  五,编写SessionFactory工具类

    这里可以采用单例模式。

package dao;

import java.io.IOException;
import java.io.Reader;

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

public class SessionFactoryUtils {
    private String source="SqlMapper.xml";
    private SqlSessionFactory sqlSessionFactory=null;
    private static SessionFactoryUtils sessionFactory=new SessionFactoryUtils();
    private SessionFactoryUtils(){
        try{
            Reader read=Resources.getResourceAsReader(source);
            sqlSessionFactory=new SqlSessionFactoryBuilder().build(read);
        }catch(IOException e){
            System.out.println("IO异常,读取资源文件SQLMAPPER.XML出错"+e.getMessage());
            throw new ExceptionInInitializerError();
        }
    }
    public static SessionFactoryUtils getSessionfactory(){
        return sessionFactory;
    }
    public SqlSessionFactory getSqlSessionFactory(){
        return sqlSessionFactory;
    }
}

这个工具类返回一个SqlSessionFactory对象,在使用的时候可以这样获得一个SqlSession的对象,实现相关操作


package dao;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import entity.User;
public class UserDAOIbatis implements UserDAO {
    private SqlSessionFactory sqlSessionFactory = SessionFactoryUtils
            .getSessionfactory().getSqlSessionFactory();
    public void delete(int id) {
        SqlSession sqlSession=null;
        try {
             sqlSession=sqlSessionFactory.openSession();
            sqlSession.delete("dao.UserDAO.deleteUser", id);//第一个参数是配置文件中对应的命名空间.ID  , 第2个参数ID是要传到user.xml中对应的SQL语句里面的
            sqlSession.commit();  //必须提交
        } finally {
            sqlSession.close();
        }
    }
    public User findById(int id) {
        SqlSession sqlSession=null;
        User user=null;
        try{
            sqlSession=sqlSessionFactory.openSession();
            user=sqlSession.selectOne("dao.UserDAO.selectById",id);
            sqlSession.commit();
        }finally{
            sqlSession.close();
        }
        return user;
    }
}

  六,测试

package test;
import org.apache.log4j.Logger;
import org.apache.log4j.jdbc.JDBCAppender;
import org.junit.Test;
import dao.UserDAO;
import dao.UserDAOIbatis;
import entity.User;

public class TestIBatis {
    @Test
    public void testDelete(){
        UserDAO userdao=new UserDAOIbatis();
        userdao.delete(12);
    }
    @Test
    public void testSelectById(){

        UserDAO userdao=new UserDAOIbatis();
        User user=userdao.findById(1);
        System.out.println(user.getEmail()+" "+user.getPassword());
    }
}

IBATIS使用方法最简单的实现就这么个过程。另外要查看SQL语句需要添加配置文件log4j.properties

#logger level default is INFO
log4j.rootLogger=info,console,file

#append to console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d %p - %m%n

#append to file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=error_log.txt
log4j.appender.file.MaxFileSize=1MB
log4j.appender.file.MaxBackupIndex=10000
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d %p - %m%n


#ibatis logger config
log4j.logger.com.ibatis=debug
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug
log4j.logger.java.sql.Connection=debug
log4j.logger.java.sql.Statement=debug
log4j.logger.java.sql.PreparedStatement=debug,stdout

或者

log4j.logger.com.ibatis=DEBUG
log4j.logger.java.sql=DEBUG
log4j.logger.org.logicalcobwebs=ERROR


如果要整合spring来使用,那么只需要把核心配置文件中的连接数据库的配置提取出来(environments部分),放到spring中即可。

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

<property name="configLocation" value="classpath:MyBatis-Configuration.xml"></property>

<property name="dataSource" ref="dataSource" />

</bean>

<bean id="userDao" class="org.mybatis.spring.mapper.MapperFactoryBean">

<property name="mapperInterface" value="com.mybatis.UserDao"></property>

<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>

</bean>

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> driverClassName,url,username,password,maxActive,maxWait等配置

<property name="defaultAutoCommit" value="true"></property>

</bean>

最近公司需要使用mybatis3.2.4,这个版本有个接口自动装配的功能。使用方法如下:

不需要dao的实现类了,只要有接口就行。

HelloworldMapper helloworldDao=session.getMapper(HelloworldMapper.class);
List<Helloworld> hws=helloworldDao.selectAll();

备注:从ibatis到mybatis改变的东西我还在收集当中。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值