mybatis学习笔记(1)

之前做项目的时候,DAO层写了一些spring jdbc,用起来的确不是很方便,今天特意去学习了新的框架:mybatis.把之前用spring-jdbc写的内容换成了mybatis框架搭建的内容。

首先你要到mybatis的官网去下mybatis的jar包:mybatis-3.2.7.jar。由于我是在spring的基础上去搭建mybatis所以还要去弄一个mybatis-spring-1.2.2.jar, 这个连接的包好像在spring官方是找不到的,需要自己去网上找。

进入正题。首先在src下面建立一个mybitis-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>
          <mappers>
              <mapper resource="com/bookstore/mappers/config/UserMapper.xml"/>
          </mappers>
  </configuration>

这样就指明了mapper的路径可以定义多个mapper.

然后在com/bookstore/mappers/config这个路径下面建立一个UserMapper.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">
    <mapper namespace="UserMapper">
    <select id="selectUser" parameterType="String" resultType="User">
        select userName,password,email,phone,isVip from user
        where userName=#{userName}
    </select>
    <insert id="addUser" parameterType="User">
        insert into user (userName,password,email,phone,isVip) 
        values (#{userName},#{password},#{email},#{phone},#{isVip})
    </insert>
    </mapper>

我简单地写了一个查询和一个插入。

简单地说下mybatis的核心,就在于一个sqlsession,mybatis是提供工厂方式去创建它。

在spring整合的时候,sqlseesionfactory是由bean去注入,然后生产出sqlsession再由sqlsessiondaosupport去得到sqlsession.

得到sqlsession之后就可以使用各种sql的方法了。

转回正题,接下来该去操作DAO层了,我现在DAO层写了一个BaseDao.它继承了sqlsessiondaosupport,什么都不去做。然后在创建一个UserDaoMappperDaoImpl去继承BaseDao,这样UserDaoMapperDaoImpl就可以使用sqlsessiondaosupport的方法去得到sessionsql了

UserDaoMapperDaoImpl:

package com.bookstore.dao.impl;

import java.util.List;

import com.bookstore.dao.UserDao;
import com.bookstore.dao.impl.BaseDao;
import com.bookstore.model.User;

public class UserDaoMapperImpl extends BaseDao implements UserDao {

    public void addUser(User user) {
        this.getSqlSession().insert("UserMapper.addUser", user);
    }

    public User getUser(String userName) {
        
        return this.getSqlSession().selectOne("UserMapper.selectUser" ,userName);
    }


}

最后必须在spring配置好:

我们先来理一理,首先sqlSessionFactory是要得到dateSource的,dateSource应该包含了连接池。BaseDao应该有一个属性叫做sqlSessionFactory,并且在前面讲到BaseDao继承了一个抽象类sqlSessionDaoSupport,然后呢是一个UserDaoMapperImpl类,只需要继承一个BaseDao就可以拥有属性sqlSessionFactory和sqlSessionDaoSupport。

Spring-config.xml:

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
          <property name="dataSource" ref="dataSource" />
          <property name="configLocation" value="classpath:mybatis-config.xml"/>
          <property name="typeAliasesPackage" value="com.bookstore.model"></property>
    </bean>
    <bean id="baseDao" class="com.bookstore.dao.impl.BaseDao">
        <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
    </bean>
    <bean id="userDao" class="com.bookstore.dao.impl.UserDaoMapperImpl" 
    parent="baseDao">
    </bean>

我发现baseDao没有去写parent而userDao却写了,后来我在baseDao里面也加了parent反而出错了,原来是因为这两个继承的类一个是抽象类。所以不需要去写。

同理假如我拿掉这个baseDao类,直接让userDaoMapperImpl去继承sqlSessionSupport,然后再添加属性

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

也是一模一样的。

 

你可能感兴趣的:(mybatis)