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

 

第一步 让我来介绍下初学者怎么快速更好的使用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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295970.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Abp Vnext Vue3 的版本实现

Abp Vnext Pro 的 Vue3 实现版本 开箱即用的中后台前端/设计解决方案开始Github地址文档地址演示地址系统功能[x] 用户管理[x] 角色管理[x] 审计日志[x] 后台任务[x] 集成事件[x] IdentityServer4[x] 客户端管理[x] Api 资源管理[x] ApiScope 管理[x] Identity 资源管理[x] Sin…

递归函数就兔子数C语言,【C语言】求斐波那契(Fibonacci)数列通项(递归法、非递归法)...

意大利的数学家列昂那多斐波那契在1202年研究兔子产崽问题时发现了此数列&#xff0e;设一对大兔子每月生一对小兔子&#xff0c;每对新生兔在出生一个月后又下崽&#xff0c;假若兔子都不死亡&#xff0e;问&#xff1a;一对兔子&#xff0c;一年能繁殖成多少对兔子&#xff1…

struts2配置中Action的name 和package的name和namespace作用

2019独角兽企业重金招聘Python工程师标准>>> struts2配置中Action的name 和package的name和namespace是什么作用 在struts2 struts.xml 配置中 <package name"ajax" extends"json-default" namespace"/json"> <action na…

【译】Tablix指南----通向报表服务的阶梯系列(四)

“Ah ha,发现你了&#xff01;”你的经理突然从桌子后面的假花旁冒出来&#xff0c;发出胜利的叫声。你沮丧地转过头看着经理。 “我已经创建了一个基本报表&#xff0c;并抓取了一些数据&#xff0c;我正打算-”你在他打断你之前快速的解释着。 “赶紧做完就好&#xff0c;大B…

workaround for %33 texture memory bug

原帖链接&#xff1a;http://www.cocos2d-iphone.org/forum/topic/29121 PS: 为什么要关心 NPOT 呢&#xff1f; 因为苹果的OpenGL驱动有一个bug&#xff0c;导致如果使用 POT 的纹理&#xff0c;则会产生额外33%的内存消耗。 So, If you didnt know, when you create a textur…

熊吃人该不该杀?这头3米高的大熊吃了7个人,还在洞里藏了很多女人用的东西.........

全世界只有3.14 % 的人关注了爆炸吧知识10月18日&#xff0c;有网友爆料称“上海野生动物园猛兽区一饲养员遭群熊撕扯”。随后&#xff0c;上海野生动物园证实&#xff0c;该饲养员目前已身亡。据悉&#xff0c;他才27岁&#xff0c;还没成家。从网上发布的现场视频来看&#x…

如何快速学习freemarker以及使用经验

freemarker freemarker是静态模板&#xff0c;和html 、jsp类似&#xff0c;我第一次看见后缀是 .ftl文件&#xff0c;我嚓&#xff0c;这是什么鬼&#xff0c;原来是freemarker&#xff0c;使用它的时候你就可以理解前端页面和jsp什么没什么区别&#xff0c;怎样学习它&#x…

还在纠结Dapper或者EF Core?不妨试试“混合ORM”--RepoDb

在.NET世界中&#xff0c;提到ORM&#xff0c;最常用的是下面2个&#xff1a;Dapper&#xff0c;通过提供IDbConnection的扩展方法来查询数据库。它的优点在于可以轻松地执行参数化查询&#xff0c;将结果转化为对象&#xff1b;非常高效&#xff0c;在速度方面拥有micro-ORM之…

android chart坐标轴互换,android - MPAndroidChart:在BarChart中将X轴的标签旋转90度 - SO中文参考 - www.soinside.com...

只需覆盖XAxisRenderer和renderAxisLabels(c: Canvas)方法。并将其设置为barChart itemView.barChart.setXAxisRenderer(CustomBarChartRenderer(itemView.barChart.viewPortHandler, itemView.barChart.xAxis, itemView.barChart.rendererXAxis.transformer))import android.g…

Rails IDE 有很多选择,但是具体到ubuntu 64bit 选择的余地就不多了,这里选择Aptana Studio 3 Beta...

1 下载 http://www.aptana.com/downloads/start 2 根据 要求安装sun JDK 1.6.* 安装步骤参考&#xff1a; 1. 编辑 /etc/apt/sources.list&#xff0c;去掉注释&#xff1a; ## Uncomment the following two lines to add software from Canonicals## partner repository.## Th…

使用 PHP 7 给 Web 应用加速

PHP 20周年了&#xff01;&#xff1f;&#xff1f; PHP 首发通告&#xff0c;1995年6月8日 发布于 COMP.INFOSYSTEMS.WWW.AUTHORING.CGI 主题&#xff1a;正式宣布&#xff1a;个人主页工具&#xff08;Personal Home Page Tools&#xff09;正式宣布个人主页工具&#xff08;…

mvc教程

第一章 mvc概述 入门 需要安装 Visual Studio 2008 或 Visual Web Developer 2008 Express 来构建 ASP.NET MVC 应用程序。还需要下载 ASP.NET MVC Framework。 如果没有 Visual Studio 2008&#xff0c;可以从下面的网址下载 90 天试用版&#xff1a; http://msdn.microsoft.c…

windows下面怎么github ssh 公钥,然后克隆项目

windos下面怎么github ssh 公钥,然后克隆项目 第一步、 1. 安装git,从程序目录打开 "Git Bash" 2. 键入命令:ssh-keygen -t rsa -C "email@email.com" 我的邮箱是chen_yu@kuyu.com , "email@email.com"是github账号 3. 提醒你输入key的…

连破四次吉尼斯世界纪录!厨师界再出神人,用一公斤拉面缔造了一代传奇,背后却是简单的原理……

全世界只有3.14 % 的人关注了爆炸吧知识超模君最喜欢的就是公司楼下海底捞火锅面。不仅是面确实好吃&#xff0c;更重要的是因为海底捞拉面小哥的技艺十分精湛&#xff01;提臀、收腹&#xff0c;只见拉面小哥化身蹦迪达人&#xff0c;在旋转跳跃中舞动拉面。一顿猛如虎的操作之…

微软推出 .NET 官方社区论坛

James 近日发布博客&#xff08;https://devblogs.microsoft.com/dotnet/introducing-the-net-tech-community-forums/&#xff09;&#xff0c;推出 .NET 官方社区论坛&#xff0c;为开发者提供一个官方的交流平台&#xff0c;小道消息&#xff0c;微软即将上线中文版的.NET网…

android sdk中添加自定义api,android SDK中添加自定义api【转】

本文的思路&#xff1a;android APP调用自定义java API,自定义java API调用自定义jni接口1&#xff1a;在android源码目录framework/base下面创建add目录add目录里面的结构如下&#xff1a;里面的Nadd.java android_jnitest_Nadd.cpp 和Android.mk内容如下&#xff1a;Nadd.jav…

HtmlGenericControl

HtmlGenericControl 构造函数 (String)使用指定的标记初始化 HtmlGenericControl 类的新实例。命名空间&#xff1a; System.Web.UI.HtmlControls 程序集&#xff1a; System.Web&#xff08;在 System.Web.dll 中&#xff09; 语法Public Sub New ( _tag As String _ )public …

远程控制利器TeamViewer使用教程(图)

TeamViewer是什么&#xff1f; 他是一款免费的可以穿透内网的远程控制软件&#xff0c;可以实现桌面共享&#xff0c;文件传送等功能&#xff0c;简单一点说就是和QQ远程协助一样&#xff0c;但是比QQ的远程协助功能更为强大。 TeamViewer与木马有什么区别&#xff1f; 说到远程…

POJ-3635 Full Tank? 变形最短路

题目链接&#xff1a;http://poj.org/problem?id3635 容易想到用二维数组记录状态求最短路&#xff0c;然后用优先队列优化&#xff0c;类似于Dijkstra和BFS。我开始设计的过程是直接直接从当前点向相邻点转移并找出所有可能状态&#xff0c;结果TLE。貌似是无关状态太多了&am…

Android之Bitmap学习总结

BitMap类&#xff1a; public void recycle()——回收位图占用的内存空间&#xff0c;把位图标记为Dead public final boolean isRecycled() ——判断位图内存是否已释放 public final int getWidth()——获取位图的宽度 public final int getHeight()——获取位图的高度 pub…