MyBatis的使用
要了解MyBatis的使用,首先要了解MyBatis是因何而来的?为了和数据库进行交互,通常的做法是将SQL语句写在Java代码里,然后生成class文件,而我们知道class文件是无法修改的。假如后来我们只想改变一下SQL语句,那就要重新生成class文件,这样是比较麻烦的。
所以为了避免SQL语句和Java代码的高度耦合,MyBatis应运而生。它实现了SQL语句和Java代码的分离,方便了后期因需求变动而对SQL语句进行修改!
让我们通过实例来解释如何使用MyBatis
我们先创建一个表user_info
create table user_info(age int(100),name varchar(15) unique,
)
insert into user_info (age, name) values (18, '小明');
然后在resources中创建名为mybatis-config.xml的xml文件,代码如下:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--environments中可以有多个environment,但只能连接一个(通过default)--><environments default="dev"><environment id="dev"><!--配置数据库连接信息--><transactionManager type="JDBC"></transactionManager><dataSource type="POOLED"><property name="username" value="root"/><property name="password" value="root"/><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://127.0.0.1:3306/test"/></dataSource></environment></environments><!--注册Mapper xml文件--><mappers><mapper resource="./area.xml"></mapper></mappers>
</configuration>
接着在com.jd.area中创建名为IAreaDao的借口,代码如下:
package com.jd.area;import org.apache.ibatis.annotations.Param;public interface IAreaDao {// 这里的@Param("key")是起限制作用,这样做后,在area.xml中的#{key},这连个key必须保持一致//查询String getName(@Param("age") int id,@Param("name") String name);//删除int delete(@Param("age") int age);//插入int insert();//修改boolean update(@Param("name")String name);
}
然后可在resources中创建名为area.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">
<!--namespace为接口的全名-->
<mapper namespace="com.jd.area.IAreaDao"><!--查询--><select id="getName" resultType="java.lang.String">select name from user_info where age = #{age} and name = #{name}</select><!--删除--><delete id="delete">delete from user_info where age = #{age}</delete><!--添加--><insert id="insert">insert into user_info(name,age) values("小红",23)</insert><!--修改--><update id="update">update user_info set age = 20 where name=#{name}</update>
</mapper>
最后在com.jd.test中创建Test类来调用,代码如下:
package com.jd.test;import com.jd.area.IAreaDao;
import com.jd.person.IPerson;
import com.jd.vo.Person;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.InputStream;public class Test {public static void main(String[] args) {try {InputStream inputStream = Resources.getResourceAsStream("./mybatis-config.xml");//获取SqlSessionFactory对象SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);//获取SqlSession对象,代表和数据库的一次会话,用完需要关闭。注意:由于SqlSession为非线程安全的,所以该变量应定义为局部变量,不要定义成全局变量SqlSession sqlSession = factory.openSession(false);//true:自动提交事务; false(默认值):需手动提交事务//获取IAreaDao的接口实现类(注意,接口实现类由MyBatis代劳完成,调用即可)IAreaDao areaDao = sqlSession.getMapper(IAreaDao.class);//调用方法String name = areaDao.getName(18,"小明");System.out.println(name);System.out.println(areaDao.delete(18));System.out.println(areaDao.update("小明"));System.out.println(areaDao.insert());sqlSession.commit();//手动提交事务sqlSession.close();//释放资源}catch (Exception e){e.printStackTrace();}}
}
相关文章:
iOS7系统iLEX RAT冬青鼠安装教程:无需刷机还原纯净越狱系统
全网科技 温馨提醒:iLEX RAT和Semi-Restore的作用都是让你的已越狱的设备恢复至越狱的初始状态。可是要注意无论你是用iLexRAT冬青鼠还是Semi-restore。对于还原来说都存在巨大的风险。非必要情况下,还是不要任意使用它们。*iLEX RAT冬青鼠安装教程&…

HDU 4832(DP+计数问题)
HDU 4832 Chess 思路:把行列的情况分别dp求出来,然后枚举行用几行。竖用几行,然后相乘累加起来就是答案 代码: #include <stdio.h> #include <string.h> #include <iostream> using namespace std;typedef long…

社会生活中常用的14条著名法则
一、 马太效应 八、 水桶定律 二、 手表定理 九、 蘑菇管理三、 不值得定律 十、 奥卡姆剃刀定律四、 彼得原理 十一、 二八定律五、 零和游戏原理 十二、 钱的问题六、 华盛顿合作…

Spring框架之(无参、有参)构造方法与setter方法的初始化
我们之前要创建对象时,都需要new一下,但使用了Spring后,就不需要再new了,可以直接使用类名调用了。这是因为Spring 已经为我们自动创建好了Java对象(但需要在xml文件里进行一些配置)。 举个例子看看吧&…

P1034 矩形覆盖
题目描述 在平面上有 n 个点(n < 50),每个点用一对整数坐标表示。例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2&a…

[linux][c语言]用socket实现简单的服务器客户端交互
Socket解释: 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。 Socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程通信机制,取后一种意思。通常也称作"套接字",用于描述IP…

Spring之注解方式实例化Java类
我们知道一个<bean></bean>就代表一个对象,如果想创建多个对象,就要使用多个<bean></bean>,所以这里有个简便的方法: <context:component-scan base-package"com.jd"></context:comp…

3.Linux Shell流程控制
1.if/else结构 if condition thenstatements elif condition thenstatements elsestatements fi 2.条件 与C语言不同的是,条件(condition)实际上是语句列表,而不是一般的布尔表达式。 按照惯例,函数以及命令的退出状态用0表示成功,…

ASP.NET 2.0 中配合 Master Page 使用的优化 CSS 模型
ASP.NET 2.0 中增加了内建的 MasterPage 的支持,这对我们来说是一个很大的便利。然而经过一段时间的使用,我发现 MasterPage 并不是那么完美:嵌套的 MasterPage 不能支持设计时界面,以及下面要提到的Content Page 中增加 CSS 的问…

详细说明Spring--AOP
这篇博客较长,耐心读完或许会有“柳暗花明又一村”的感觉哦! 为什么? 我先不说AOP是什么,我先说说为什么要用AOP,依照惯例,我还是先举一个例子: 先把项目结构展现出来: 我们先在com.jd.calcu…

ES6中的Promise详解
Promise 在 JavaScript 中很早就有各种的开源实现,ES6 将其纳入了官方标准,提供了原生 api 支持,使用更加便捷。 定义 Promise 是一个对象,它用来标识 JavaScript 中异步操作的状态(pending, resolve, rejectÿ…

Jquery 将表单序列化为Json对象
大家知道Jquery中有serialize方法,可以将表单序列化为一个“&”连接的字符串,但却没有提供序列化为Json的方法。不过,我们可以写一个插件实现。 我在网上看到有人用替换的方法,先用serialize序列化后,将&替换成…

ASP.NET常用函数
Abs(number) 取得数值的绝对值。 Asc(String) 取得字符串表达式的第一个字符ASCII 码。 Atn(number) 取得一个角度的反正切值。 CallByName (object, procname, usecalltype,[args()]) 执行一个对象的方法、设定或传回对象的属性。 CBool(expression) 转换表达式为Boolean …

简单快速修改大量重复代码(Intellij IDEA)
血与泪的教训啊!!!刚开始不知道,一味地疯狂点鼠标和键盘,点到手抽筋才想起来百度一下如何快速修改大量重复代码,呜呜呜~~~ 给大家分享一下吧,可以节约大家大量的时间哦: …

5.3Role和Claims授权「深入浅出ASP.NET Core系列」
5.3Role和Claims授权「深入浅出ASP.NET Core系列」 原文:5.3Role和Claims授权「深入浅出ASP.NET Core系列」希望给你3-5分钟的碎片化学习,可能是坐地铁、等公交,积少成多,水滴石穿,码字辛苦,如果你吃了蛋觉得味道不错&…

電子商務新紀元-WebService With BizSnap
電子商務新紀元-WebService With BizSnap WebService SOAP(Simple Object Access Protocol) Web Services Description Language (WSDL) DELPHI 的SOAP 撰寫WebService Server 程式 撰寫Client 端程式 魔法的秘密 傳送複雜型態資料(Complex Type) 傳送檔案或圖形 處理資料庫 C…

mysql优化1
1.以空间换时间,减少连表查询的次数,适当增加冗余字段 例如: 计算的字段,可以事先统计完,方数据库中,来一个加一个,而不用现场计算 2.字段类型: 整型 > date,time >enum >char >varchar >blob,text 字符串需要考虑字符集和校对集,因此比整型慢 time会考虑时期,用…

用XP做服务器突破10人限制
用XP做服务器突破10人限制用微软提供的小工具 MetaEdit,最新版本是2.2。下载地址:http://download.microsoft.com/download/iis50/Utility/5.0/NT45/EN-US/MtaEdt22.exe安装好以后将树型目录展开至LM \ W3SVC直接在W3SVC文件夹上单击,选择右边列表中Name…

Java反射(详述版)
一、什么是反射? 我们先来看一个例子: package venus; public class Student {public String name;public Student(){System.out.println("无参构造方法");}public void doHomework(){System.out.println(name "正在做作业~~~");…

s9.16作业,员工信息表
转载https://blog.csdn.net/qq_35883464/article/details/83151464 实现员工信息表文件存储格式如下:id,name,age,phone,job1,Alex,22,13651054608,IT2,Egon,23,13304320533,Tearcher3,nezha,25,1333235322,IT 现在需要…

Dubbo+zookeeper使用方法以及注意事项
Dubbozookeeper使用方法以及注意事项最近在一个项目中想做一个数据库查询的服务,目的是将数据库查询这块从程序中脱离出来,形成一个公共的服务平台,大家都可以调用,经过考虑决定选用Dubbozookeeper这个经典的组合来实现࿰…

淘淘经受了一次考验...
18日去香港给一个潜在客户做了一次演示,顺便帮淘淘买了一罐奶粉,因为听说香港的奶粉质量比较好,是原装进口的。下午6点多回到深圳,没想到,听到一个不太好的消息。淘淘的奶奶推车带淘淘出去的时候,不小心&am…

使用MasterPage遇到的问题
最近重新拿起.NET,发现一切变的那么的陌生了,发展得真是快啊。。。在使用MasterPage时,要从一个页面的Form提交数据到另一个页面的Form,应该如何处理?不使用MasterPage的时候,可以直接使用PostBackUrl"…

Machine Learning——DAY1
监督学习:分类和回归 非监督学习:聚类和非聚类 1.分类和聚类的区别: 分类(Categorization or Classification)就是按照某种标准给对象贴标签(label),再根据标签来区分归类。 聚类是指事先没有“标签”而通过某种成团分析找出事物之…

Java的注解
一、注解的概念: 注解并不是一开始就有的,JDK5之前是没有注解的,JDK5及其以后JDK版本才开始支持Java注解! Java注解(Annotation)也叫做元数据,以注解名在代码中存在,它是一种在源代码…

activemq的学习,第一篇
本地的activemq的地址: http://localhost:8161/admin/ win10的启动avtivemq E:\Program Files\ActiveMQ\apache-activemq-5.15.3\bin\win64 win64里面的activemq.bat 消息队列的学习 学习地址2 这是spring集合activemq的地址:github pom.xml引入的依赖&a…

CS Tip 16: 利用注释
译自: http://soup.co.za/weblog/archive/2006/04/07/CS-Tip-16_3A00_-Commenting-out-controls.aspx 当您在修改皮肤时您可以修改任何HTML标记,但是除了带有runat"Server"的除外,删除掉将会产生错误 如果您不想某个控件显示在页面上您可以注释…

今天没有浪费时间,我努力了
7月12日经过暴雨洗礼过的清晨,我晚起了一会,我伧促的洗了把脸,瞪起朦胧胧的双眼,迈着疲惫步子,重复着这条凌乱的街道,10分钟多一点,我就到了公交站点,像往常一样,挤上了8…

动态规划——洛谷_P1057传球游戏
题目: 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏。这次,老师带着同学们一起做传球游戏。游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球&…

多线程1(进程、[创建]线程与生命周期)
一、进程与线程 什么是进程?我们先说说什么是程序? 程序(Program)是为实现特定目标或解决特定问题而用计算机语言(比如Java、C等)编写的命令序列的集合。 进程(process)就是指一个程…