第一步 让我来介绍下初学者怎么快速更好的使用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层写个类然后再就是对应的XML文件 TagSkill.xmlpackage 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 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>
这个#{skillId}就相当于我们函数里面的参数skillId,其它的增删改查都类似。public int deleteTagSkill(@Param("skillId") long skillId);
这些都是一些基本的用法,不知道讲明白了没有,如果不懂的加我QQ:2657607916