Mybatis3.2.1使用例四:SqlSession方式整合Spring、不使用DAO輔助類

來源:互聯網
上載者:User

Mybatis提供的Mapper方式給人第一印象是很迷惑:提供了一個介面類卻找不到實作類別。實際上該介面主要是提供了方法名和參數列表,Mapper的相關代理類把這些資訊提取出來之後,這個介面也就沒什麼用了,因而也就不需要什麼實現,它最後仍然是使用SqlSession進行操 作。從SqlSession的方法來看,我們可以直接提供方法名和參數資訊就可以省略掉這個Mapper,特別是在使用DAO(也有介面)時,DAO的接 口基本與Mapper一樣,有點多餘的感覺。(註:SqlSession提供的方法只支援傳入一個方法名和一個參數,而Mapper提供的介面則可以給多個參數,參數的使用後面再介紹)

下面是直接使用SqlSession的例子:

(1) 承載資料的User bean:com/mybatis/demo4/User.java

package com.mybatis.demo4;public class User {        /** 使用者ID */        private intid;        /** 使用者名稱稱 */        privateString name;        /** 使用者密碼 */        privateString password;        public intgetId() {               returnid;        }        public voidsetId(int id) {               this.id= id;        }        publicString getName() {               return name;        }        public voidsetName(String name) {               this.name= name;        }        publicString getPassword() {               returnpassword;        }        public voidsetPassword(String password) {               this.password= password;        }}

(2) 資料來源properties檔案:com/mybatis/demo4/mysql.properties

driver=com.mysql.jdbc.Driverurl=jdbc:mysql://127.0.0.1:3306/bookstoreusername=rootpassword=123456

(3) Spring的設定檔:com/mybatis/demo4/applicationContext.xml

(此時把Mapper的配置資訊去掉,取而代之的是SqlSession的配置)

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="locations" value="classpath:com/mybatis/demo4/mysql.properties"/></bean><!-- 資料來源 --><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"destroy-method="close"><property name="driverClassName" value="${driver}" /><property name="url" value="${url}" /><property name="username" value="${username}" /><property name="password" value="${password}" /></bean><!-- 建立SqlSessionFactory,需指定資料來源,property名稱必須為dataSource --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property  name="configLocation"  value="classpath:com/mybatis/demo4/mybatis_config.xml"/></bean><!-- 使用SqlSession的形式,不需要再使用Mapper --><!--建立資料對應器Mapper,屬性mapperInterface的value必須為介面類--><!-- <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"><property name="mapperInterface" value="com.mybatis.demo4.UserMapper" /><property name="sqlSessionFactory" ref="sqlSessionFactory" /></bean> --><!-- 使用SqlSession形式 --><bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"><constructor-arg ref="sqlSessionFactory" /></bean><!-- 資料訪問DAO,在DAO中使用sqlSession來查資料,在DAO中自訂屬性名對應的setter方法 --><bean id="userDao" class="com.mybatis.demo4.UserDaoImpl"><property name="sqlSession" ref="sqlSession"/></bean></beans>

(4) Mybatis設定檔:com/mybatis/demo4/mybatis_config.xml(與Spring整合後,該設定檔很多屬性不能用了,比如setting、environment等,主要是使用typeAliases和mappers)

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><typeAliases><typeAlias alias="User" type="com.mybatis.demo4.User" /></typeAliases><mappers><mapper resource="com/mybatis/demo4/UserMappers.xml" /></mappers></configuration>

(5) Mapper設定檔:com/mybatis/demo3/UserMappers.xml

(提供SQL的詳細配置,其中select/insert/update/delete語句的id都必須與Mapper的方法名稱相同)

<?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,且值為Mapper的類路徑;直接使用SqlSession時可配可不配 --><mapper namespace="com.mybatis.demo4.UserMapper"><resultMap id="userMap" type="User"><id property="id" column="id" /><result property="name" column="name" /><result property="password" column="password" /></resultMap><select id="findByName" parameterType="String" resultMap="userMap">select * from users where name=#{name}</select></mapper>  

(6) DAO介面:com/mybatis/demo4/UserDao.java

package com.mybatis.demo4;public interface UserDao {public User getUserByName(String name);}

(7) DAO實作類別:com/mybatis/demo2/UserDaoImpl.java

package com.mybatis.demo4;import org.mybatis.spring.SqlSessionTemplate;public class UserDaoImpl implements UserDao {/** * 自訂SqlSession變數和相關的getter/setter,在applicationContext.xml中可靈活配置DAO的屬性名稱 */public SqlSessionTemplate sqlSession;@Overridepublic User getUserByName(String name) {return getSqlSession().selectOne("com.mybatis.demo4.UserMapper.findByName", name);}public SqlSessionTemplate getSqlSession() {return sqlSession;}public void setSqlSession(SqlSessionTemplate sqlSession) {this.sqlSession = sqlSession;}}

(8) 測試類別:com/mybatis/demo2/UserManagerPrgm.java

package com.mybatis.demo4;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class UserManagerPrgm {public static void main(String[] args) {String configLocation = "com/mybatis/demo4/applicationContext.xml";ApplicationContext context = new ClassPathXmlApplicationContext(configLocation);UserDao dao = (UserDao)context.getBean("userDao");User user = dao.getUserByName("Joe");System.out.println(user);}}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.