30Mybatis_mybatis和spring整合-原始dao開發


這篇文章很重要,

第一步:我們講一下整合的思路:

我們以前要用Mybatis是需要sqlMapConfig.xml(這個配置文件需要配置dataource,以及mapper.xml文件。)sqlMapConfig.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>
    
      
    
    <!-- properties的配置必須寫在typeAliases的上面 -->
    <properties resource="db.properties"></properties>
<settings>
    <setting name="lazyLoadingEnabled" value="true"/>
     <setting name="aggressiveLazyLoading" value="false"/>
</settings>

 
       
 <!-- 和spring整合后 environments配置將廢除-->
    <environments default="development">
        <environment id="development">
        <!-- 使用jdbc事務管理-->
            <transactionManager type="JDBC" />
        <!-- 數據庫連接池-->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.username}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>
            
        </environment>
        
    </environments>

    <!-- 把映射文件(sqlmap/user.xml)加載進sqlMapConfig.xml-->
        <mappers>
            
           <!--  把mapper.xml加載進sqlMapConfig.xml-->
           <!-- 
           遵循一些規范:需要將mapper接口類名和mapper.xml映射文件名稱保持一致
           且在一個目錄中。
           當着這個規范的前提是:使用mapper代理方法。
           
           
           
            -->
            <mapper class="cn.itcast.mybatis.mapper.OrdersMapperCustom"/>
            
            
         </mappers>
    
    
    
</configuration>

 

現在我們加入spring之后,database就要交給spring的配置文件applicationContext.xml來處理了。而且我們以前在用Dao時,傳統的做法是要在Dao類中有SqlSessionFactory,現在用Spring之后,最主要的改變就是這里了。

需要spring通過單例方式管理SqlSessionFactory。

spring和mybatis整合生成代理對象,使用SqlSessionFactory創建SqlSession。(spring和mybatis整合自動完成)

久層的mapper都需要由spring進行管理。

 

第二步:給出具體案例:

案例結構如下:

 

1.lib里面的jar包如下:

2.我介紹下每個包里面的含義:

三個sourcefile:

src:有兩個包:

cn.itcast.ssm.Dao包下面放着Dao和Dao繼承類;

cn.itcast.ssm.po包下面放着pojo類;

 

config:是放配置文件的。

  mybatis/sqlMapConfig.xml:mybatis總的配置文件。

spring/applicationContext.xml:spring的配置文件。

sqlmap/user.xml:mapper.xml文件

db.properties:數據庫的配置文件。

log4j.properties:日志文件。

 

test:放置測試文件:TestSpringMybatis.java.

 

 

下面給出每個文件的具體代碼:

UserDao:

 

package cn.itcast.ssm.Dao;

public interface UserDao {
public void  findUserById(int id);
}

 

UserDaoImpl:

package cn.itcast.ssm.Dao;

import org.apache.ibatis.session.SqlSession;
import org.mybatis.spring.support.SqlSessionDaoSupport;

import cn.itcast.ssm.po.User;
//這個類繼承了SqlSessionDaoSupport,可以通過this.getSqlSession()來得到SqlSession
//通過這種方式來注入。
public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao{

    @Override
    public void findUserById(int id) {
        SqlSession session=this.getSqlSession();
        User user=session.selectOne("test.findUserById",id);
        System.out.println(user.getUsername());
        
        
    
        
    }

}

User.class:

package cn.itcast.ssm.po;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

public class User implements Serializable {
private int id;//對應數據庫中主鍵
private String username;//對應數據庫中用戶的名稱
private Date birthday;//對應數據庫中的生日
private String sex;//性別
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 Date getBirthday() {
    return birthday;
}
public void setBirthday(Date birthday) {
    this.birthday = birthday;
}
public String getSex() {
    return sex;
}
public void setSex(String sex) {
    this.sex = sex;
}
public String getAddress() {
    return address;
}
public void setAddress(String address) {
    this.address = address;
}

}

SqlMapConfig.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>
    
 
    <!-- 把映射文件(sqlmap/user.xml)加載進sqlMapConfig.xml-->
        <mappers>
            
            <mapper resource="sqlmap/user.xml"/>
            
            
         </mappers>
    
    
    
</configuration>

 

 

 

applicationContext.xml

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
        http://www.springframework.org/schema/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd 
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.2.xsd 
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop-3.2.xsd 
        http://www.springframework.org/schema/tx 
        http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">

    <!-- 加載配置文件 -->
    <context:property-placeholder location="classpath:db.properties" />
   <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
       <property name="driverClassName" value="${jdbc.driver}"></property>
       <property name="url" value="${jdbc.url}"></property>
       <property name="password" value="${jdbc.password}"></property>
       <property name="username" value="${jdbc.username}"></property>
       <property name="maxActive" value="10"></property>
       <property name="maxIdle" value="5"></property>
   </bean>
   <bean  id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
       <property name="configLocation" value="mybatis/SqlMapConfig.xml"></property>
       <!-- 配置數據源 -->
       <property name="dataSource" ref="dataSource"></property>
   </bean>
    
   <bean id="UserDao" class="cn.itcast.ssm.Dao.UserDaoImpl">
       <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
   </bean>


</beans>

 

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">
<!-- nanmespace:命名空間。 作用就是對sql進行分類話管理,理解Sql分離

注意:使用mapper代理方式,namespace有特殊重要的作用
-->

<mapper namespace="test">
    
    <!-- 根據id獲取用戶信息 -->
    <!-- 在映射文件中配置很多sql語句 -->
    <!-- 
    id:標識映射文件中的sql;
    將sql語句封裝到mappedStatement對象中,所以將id稱為statement的id;parmenterType:指定輸入的參數的類型,這里指定的int型
    #{}表示一個占位符號;
    #{id}:其中的id表示接收輸入的參數,參數名稱就是id,如果輸入參數就是簡單類型,#{}中的參數名可以任意,可以value或其它名稱
    resultType:指定的sql輸出結果的所映射的java對象類型,select指定resultType表示將單條記錄映射成的java對象;
    
     -->
    <select id="findUserById" parameterType="int" resultType="cn.itcast.ssm.po.User">
        select * from user where id = #{id}
    </select>
    

    

   
</mapper>

 

dp.properties:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybaits
jdbc.username=root
jdbc.password=root

 

log4j.properties:

# Global logging configuration
#\u5728\u5f00\u53d1\u73af\u5883\u4e0b\u65e5\u5fd7\u7ea7\u522b\u8981\u8bbe\u7f6e\u6210DEBUG\uff0c\u751f\u4ea7\u73af\u5883\u8bbe\u7f6e\u6210info\u6216error
log4j.rootLogger=DEBUG, stdout
# 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

 

TestSpringMybatis.java

package springmvc_mybatis_shen;

import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.itcast.ssm.Dao.UserDao;

public class TestSpringMybatis {
    ApplicationContext applicationContext;
    @Before
    public void setup()
    {//spring的方式加載配置文件
        applicationContext=new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");
        
        
    }
    @Test
    public void testSpringMyabtis()
    {UserDao userDao=(UserDao) applicationContext.getBean("UserDao");
    userDao.findUserById(1);
        
        
    }

}

 

 

運行結果:正確。

 

DEBUG [main] - Searching for key 'spring.liveBeansView.mbeanDomain' in [systemProperties]
DEBUG [main] - Searching for key 'spring.liveBeansView.mbeanDomain' in [systemEnvironment]
DEBUG [main] - Could not find key 'spring.liveBeansView.mbeanDomain' in any property source. Returning [null]
DEBUG [main] - Returning cached instance of singleton bean 'UserDao'
DEBUG [main] - Creating a new SqlSession
DEBUG [main] - SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@30e07209] was not registered for synchronization because synchronization is not active
DEBUG [main] - Fetching JDBC Connection from DataSource
DEBUG [main] - JDBC Connection [jdbc:mysql://localhost:3306/mybaits, UserName=root@localhost, MySQL-AB JDBC Driver] will not be managed by Spring
DEBUG [main] - ==>  Preparing: select * from user where id = ?
DEBUG [main] - ==> Parameters: 1(Integer)
DEBUG [main] - <==      Total: 1
DEBUG [main] - Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@30e07209]
DEBUG [main] - Returning JDBC Connection to DataSource
王五

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM