如何快速学习使用mybatis以及总结

9 篇文章 0 订阅
7 篇文章 0 订阅

 

第一步 让我来介绍下初学者怎么快速更好的使用mybatis这个框架 

 
     使用mybatis的话,每个Dao就对于一个相应的xml文件,我来给个例子个大家看,先要配置好环境。在application.xml里面
<!-- c3p0 connection pool configuration 数据库的配置 -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
		destroy-method="close">
		<property name="driverClass" value="${jdbc.driverClass}" />		<!-- 数据库驱动 -->
		<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}" />		<!-- 初始化连接池时连接数量为5个 -->
		<property name="minPoolSize" value="${jdbc.minPoolSize}" />		<!-- 允许最小连接数量为5个 -->
		<property name="maxPoolSize" value="${jdbc.maxPoolSize}" />		<!-- 允许最大连接数量为20个 -->
		<property name="numHelperThreads" value="20" />			<!-- 允许最大连接数量为20个 -->
		<property name="maxStatements" value="100" />		<!-- 允许连接池最大生成100个PreparedStatement对象 -->
		<property name="maxIdleTime" value="3600" />		<!-- 连接有效时间,连接超过3600秒未使用,则该连接丢弃 -->
		<property name="acquireIncrement" value="2" />		<!-- 连接用完时,一次产生的新连接步进值为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秒检查连接对象状态 -->
		<property name="checkoutTimeout" value="10000" />		<!-- 获取新连接的超时时间为10000毫秒 -->
	</bean>

	<!-- 创建SqlSessionFactory,同时指定数据源 -->
	<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>

	<!--创建数据映射器,数据映射器必须为接口 -->
	<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>
使用经验

1、要记得在TagSkillDao这个类前添加@Repository这个注解,实体的意思
2、你发现了没有,在xml文件里面的id在那个dao层类里面对应的方法名,然后就是在那个XML文件里面,resultType这个参数里面和对应方法里面的返回数据类型想匹配,记住,如果方法返回是int,记得写Internet,是包装类型,不然会出错的,如果是返回对象的话,或者返回一个对象的集合,resultType里面就要写这个对象,如果是没有返回的可以不需要写,在dao层里面的方法需要传参数的话,需要写parameterType,但是一定要记住是包装类型,不是基本数据类型,在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}就相当于我们函数里面的参数skillId,其它的增删改查都类似。
这些都是一些基本的用法,不知道讲明白了没有,如果不懂的加我QQ:2657607916

 

                      
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码莎拉蒂 .

你的鼓励是我最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值