mybatis集成在spring中使用及理解


        很多項目中使用到了mybatis框架,一般也都是把mybatis集成在spring中。為什么要使用mybatis,以及使用mybatis優勢在哪,這個往往是我們要關心以及要弄明白的地方。

       mybatis官網給出的定義:MyBatis 是支持定制化 SQL、存儲過程以及高級映射的優秀的持久層框架。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可以對配置和原生Map使用簡單的 XML 或注解,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成數據庫中的記錄。

      也許官網給出的定義太過抽象,下面以我自己的理解來說明下。(以例子來說明)

     一、配置集成到spring的mybatis相關配置(applicationContext.xml)

            配置文件如下:

       

 1 <!-- 配置數據源 -->
 2     <bean id="dataSource"
 3         class="org.springframework.jdbc.datasource.DriverManagerDataSource">
 4         <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
 5         <property name="url" value="jdbc:mysql://localhost:3306/db_crm"/>
 6         <property name="username" value="root"/>
 7         <property name="password" value="passwd"/>
 8     </bean>
 9 
10     <!-- 配置mybatis的sqlSessionFactory -->
11     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
12         <property name="dataSource" ref="dataSource" />
13         <!-- 自動掃描mappers.xml文件 -->
14         <property name="mapperLocations" value="classpath:com/hik/mappers/*.xml"></property>
15         <!-- mybatis配置文件 -->
16         <property name="configLocation" value="classpath:mybatis-config.xml"></property>
17     </bean>
18 
19     <!-- DAO接口所在包名,Spring會自動查找其下的類 -->
20     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
21         <property name="basePackage" value="com.hik.dao" />
22         <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
23     </bean>
View Code

        mybatis框架使用實際上是優化了dao實現層,我們都知道dao層是與數據庫打交道,dao層定義接口,dao實現層相關代碼實現數據的增刪改查操作。

而mybatis的使用,直接省去了dao實現層的代碼,通過配置文件實現映射。框架內部會自動把mybatis配置文件轉為dao實現層代碼,實現數據的增刪改查操作。

其本質都是一樣的。所以,為什么我們使用mybatis,是因為它代碼實現起來,更加簡潔,通過配置文件映射更加直觀。我們使用時,只需遵循它的配置規則即可。

如下:

    dao接口層:

 1 /**
 2  * 
 3  */
 4 package com.hik.dao;
 5 
 6 import java.util.List;
 7 import java.util.Map;
 8 
 9 import com.hik.entity.User;
10 
11 /**
12  * @ClassName: UserDao
13  * @Description: 用戶Dao接口
14  * @author jed
15  * @date 2017年8月13日上午11:47:48
16  *
17  */
18 public interface UserDao {
19 
20     /**
21      * @MethodName: login
22      * @Description: 用戶登錄 
23      * @author jed
24      * @date 2017年8月13日下午4:35:42
25      * @param @param user
26      * @param @return    
27      * @return User    返回類型
28      * @param user
29      * @return
30      *
31      */
32     public User login(User user);
33     
34     /**
35      * 
36      * @MethodName: find
37      * @Description: 查詢所有用戶
38      * @author jed
39      * @date 2017年8月19日上午9:50:46
40      * @param @return    
41      * @return List<User>    返回類型
42      * @return
43      *
44      */
45     public List<User> find(Map<String, Object> map);
46     
47     /**
48      * 
49      * @MethodName: getTotal
50      * @Description: 獲取總記錄數
51      * @author jed
52      * @date 2017年8月19日上午9:52:52
53      * @param @param map
54      * @param @return    
55      * @return Long    返回類型
56      * @param map
57      * @return
58      *
59      */
60     public Long getTotal(Map<String, Object> map);
61 }
View Code

使用mybatis,我們不需要寫daoImpl代碼

只需在mapper配置文件中寫數據庫語句即可。

 

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper
 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 <mapper namespace="com.hik.dao.UserDao">
 6 
 7     <resultMap type="User" id="UserResult">
 8         <result property="id" column="id"/>
 9         <result property="userName" column="userName"/>
10         <result property="password" column="password"/>
11         <result property="trueName" column="trueName"/>
12         <result property="email" column="email"/>
13         <result property="phone" column="phone"/>
14         <result property="roleName" column="roleName"/>
15     </resultMap>
16     
17     <select id="login" parameterType="User" resultMap="UserResult">
18         select * from t_user where userName=#{userName} and password=#{password} and roleName=#{roleName}
19     </select>
20     
21     <select id="find" parameterType="Map" resultMap="UserResult">
22         select * from t_user
23         <where>
24             <if test="userName!=null and userName!=''">
25                 and userName like #{userName}
26             </if>
27         </where>
28         <if test="start!=null and size!=null">
29             limit #{start},#{size}
30         </if>
31     </select>
32     
33     <select id="getTotal" parameterType="Map" resultType="Long">
34         select count(*) from t_user
35         <where>
36             <if test="userName!=null and userName!=''">
37                 and userName like #{userName}
38             </if>
39         </where>
40     </select>
41 </mapper> 
View Code

命名空間正好是dao,對應dao層,其實mapper的配置文件,我們就可以看作是daoImpl。

這里的實體對象,配置成resultMap,作為sql查詢語句的返回值(resultType)。這里可省去resultType

where標簽中if標簽用於條件判斷,里面的and會自動去掉。保證sql語句的正確性。

 

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE configuration
 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4 "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5 <configuration>
 6     <!-- 別名 -->
 7     <typeAliases>
 8         <package name="com.hik.entity"/>
 9     </typeAliases>
10 </configuration>
View Code

而mybatis-config.xml配置中的別名,便於我們找到javaBean實體。

使用mybatis框架,確實方便不少。

 


免責聲明!

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



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