如何快速學習使用mybatis以及總結
第一步 讓我來介紹下初學者怎么快速更好的使用mybatis這個框架
使用mybatis的話,每個Dao就對于一個相應的xml文件,我來給個例子個大家看,先要配置好環(huán)境。在application.xml里面
<!-- c3p0 connection pool configuration 數(shù)據(jù)庫的配置 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="${jdbc.driverClass}" /> <!-- 數(shù)據(jù)庫驅動 -->
<property name="jdbcUrl" value="${jdbc.url}" /> <!-- 連接URL串 -->
<property name="user" value="${jdbc.user}" /> <!-- 連接用戶名 -->
<property name="password" value="${jdbc.password}" /> <!-- 連接密碼 -->
<property name="initialPoolSize" value="${jdbc.initialPoolSize}" /> <!-- 初始化連接池時連接數(shù)量為5個 -->
<property name="minPoolSize" value="${jdbc.minPoolSize}" /> <!-- 允許最小連接數(shù)量為5個 -->
<property name="maxPoolSize" value="${jdbc.maxPoolSize}" /> <!-- 允許最大連接數(shù)量為20個 -->
<property name="numHelperThreads" value="20" /> <!-- 允許最大連接數(shù)量為20個 -->
<property name="maxStatements" value="100" /> <!-- 允許連接池最大生成100個PreparedStatement對象 -->
<property name="maxIdleTime" value="3600" /> <!-- 連接有效時間,連接超過3600秒未使用,則該連接丟棄 -->
<property name="acquireIncrement" value="2" /> <!-- 連接用完時,一次產(chǎn)生的新連接步進值為2 -->
<property name="acquireRetryAttempts" value="5" /> <!-- 獲取連接失敗后再嘗試10次,再失敗則返回DAOException異常 -->
<property name="acquireRetryDelay" value="600" /> <!-- 獲取下一次連接時最短間隔600毫秒,有助于提高性能 -->
<property name="testConnectionOnCheckin" value="true" /> <!-- 檢查連接的有效性,此處小弟不是很懂什么意思 -->
<property name="idleConnectionTestPeriod" value="1200" /> <!-- 每個1200秒檢查連接對象狀態(tài) -->
<property name="checkoutTimeout" value="10000" /> <!-- 獲取新連接的超時時間為10000毫秒 -->
</bean>
<!-- 創(chuàng)建SqlSessionFactory,同時指定數(shù)據(jù)源 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 配置事務管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!--創(chuàng)建數(shù)據(jù)映射器,數(shù)據(jù)映射器必須為接口 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="annotationClass" value="org.springframework.stereotype.Repository" />
<property name="basePackage" value="com.shishuo.studio.dao" />
</bean>
然后我在dao層寫個類
package com.shishuo.studio.dao;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import com.shishuo.studio.entity.TagSkill;
import com.shishuo.studio.entity.vo.TagSkillVo;
@Repository
public interface TagSkillDao {
/**
* 增加
*
* @param tagSkill
* @return
*/
public int addTagSkill(TagSkill tagSkill);
/**
* 刪除
*
* @param skillId
* @return
*/
public int deleteTagSkill(@Param("skillId") long skillId);
/**
*
* 通過SkillId修改名字
*/
public int updateNameBySkillId(@Param("skillId") long skillId,
@Param("name") String name);
/**
* 通過Id查詢
*
* @param skillId
* @return
*/
public TagSkillVo getTagSkillByTagId(@Param("skillId") long skillId);
/**
* 通過名字查詢
*
* @param name
* @param rows
* @return
*/
public TagSkillVo getTagSkillByName(@Param("name") String name);
/**
* 通過userId得到所有所有自己的技能
*
* @param userId
* @return
*/
public List<TagSkillVo> getTagSkillListByUserId(@Param("userId") long userId);
}
然后再就是對應的XML文件 TagSkill.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="com.shishuo.studio.dao.TagSkillDao">
<!-- ############################## -->
<!-- ###### 增加 ###### -->
<!-- ############################## -->
<insert id="addTagSkill" parameterType="com.shishuo.studio.entity.TagSkill">
insert into tag_skill
(name,content,status,createTime)
values
(#{name},#{content},#{status},#{createTime})
<selectKey resultType="long" keyProperty="skillId">
SELECT LAST_INSERT_ID()
</selectKey>
</insert>
<!-- ############################## -->
<!-- ###### 刪除 ###### -->
<!-- ############################## -->
<delete id="deleteTagSkill" parameterType="Long">
delete from tag_skill where skillId=#{skillId}
</delete>
<!-- ############################## -->
<!-- ###### 修改 ###### -->
<!-- ############################## -->
<update id="updateNameBySkillId">
update tag_skill set name=#{name} where skillId=#{skillId}
</update>
<!-- ############################## -->
<!-- ###### 查詢 ###### -->
<!-- ############################## -->
<select id="getTagSkillByTagId" parameterType="Long"
resultType="com.shishuo.studio.entity.vo.TagSkillVo">
select * from tag_skill where skillId=#{skillId}
</select>
<select id="getTagSkillByName"
resultType="com.shishuo.studio.entity.vo.TagSkillVo">
select * from tag_skill where name=#{name}
</select>
<select id="getTagSkillListByUserId"
resultType="com.shishuo.studio.entity.vo.TagSkillVo">
SELECT tags.skillId,tags.name,tags.content,tags.status,tags.createTime FROM shishuo.tag_skill tags,shishuo.teacher_skill teas where tags.skillId=teas.tagSkillId and userId=#{userId};
</select>
</mapper>
使用經(jīng)驗
1、要記得在TagSkillDao這個類前添加@Repository這個注解,實體的意思
2、你發(fā)現(xiàn)了沒有,在xml文件里面的id在那個dao層類里面對應的方法名,然后就是在那個XML文件里面,resultType這個參數(shù)里面和對應方法里面的返回數(shù)據(jù)類型想匹配,記住,如果方法返回是int,記得寫Internet,是包裝類型,不然會出錯的,如果是返回對象的話,或者返回一個對象的集合,resultType里面就要寫這個對象,如果是沒有返回的可以不需要寫,在dao層里面的方法需要傳參數(shù)的話,需要寫parameterType,但是一定要記住是包裝類型,不是基本數(shù)據(jù)類型,在dao層里面的方法如果是要增加,就傳一個對象過來,不需要寫注解,如果是通過Id刪除的話,比如public int deleteTagSkill(@Param("skillId") long skillId);我們在xml文件里面
<delete id="deleteTagSkill" parameterType="Long">
delete from tag_skill where skillId=#{skillId}
</delete>
public int deleteTagSkill(@Param("skillId") long skillId);
這個#{skillId}就相當于我們函數(shù)里面的參數(shù)skillId,其它的增刪改查都類似。
這些都是一些基本的用法,不知道講明白了沒有,如果不懂的加我QQ:2657607916
作者:chen.yu
深信服三年半工作經(jīng)驗,目前就職游戲廠商,希望能和大家交流和學習,
微信公眾號:編程入門到禿頭 或掃描下面二維碼
零基礎入門進階人工智能(鏈接)