二、MyBatis-HelloWorld

环境准备

1.创建数据库表

create table tbl_employee (id int(11) primary key AUTO_INCREMENT comment "ID",last_name varchar(20) default null comment "姓名",email varchar(20) default null comment "邮件",gender varchar(1) default null comment "性别"
)

2.准备依赖的jar包

  • log4j.jar
  • mybatis-3.4.1.jar
  • mysql-connector-java-5.1.37-bin.jar

如果是maven项目,加入以下依赖:

<!-- 1.mybatis必须依赖包 -->
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.1</version>
</dependency>
<!-- 2.mysql数据库连接驱动 -->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.26</version>
</dependency>
<!-- 3.日志-->
<dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version>
</dependency>

3.创建项目:MyBatis_01_HelloWorld 

项目结构如下:

 

Employee.java源码如下:

package com.atguigu.mybatis.bean;public class Employee {private Integer id;private String lastName;private String email;private String gender;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}@Overridepublic String toString() {return "Employee [id=" + id + ", lastName=" + lastName + ", email="+ email + ", gender=" + gender + "]";}}

EmployeeMapper.java源码如下:

package com.atguigu.mybatis.dao;
import com.atguigu.mybatis.bean.Employee;/*** mybatis接口式編程* @author kancy*/
public interface EmployeeMapper {public Employee getEmpById(Integer id);
}

配置文件,在下面添加。

 

4.加入配置文件(Mybatis全局配置文件,Mybatis SQL Mapper映射配置文件,log4j配置文件)

1) Mybatis全局配置文件:mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><environments default="development"><environment id="development"><transactionManager type="JDBC" /><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://localhost:3306/mybatis" /><property name="username" value="root" /><property name="password" value="123456" /></dataSource></environment></environments><!-- 将我们写好的sql映射文件(EmployeeMapper.xml)一定要注册到全局配置文件(mybatis-config.xml)中 --><mappers><mapper resource="mappers/EmployeeMapper.xml" /></mappers>
</configuration>

2) sql mapper映射文件:EmployeeMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.atguigu.mybatis.dao.EmployeeMapper">
<!-- 
namespace:名称空间;指定为接口的全类名
id:唯一标识
resultType:返回值类型
#{id}:从传递过来的参数中取出id值--><select id="getEmpById" resultType="com.atguigu.mybatis.bean.Employee">select id,last_name lastName,email,gender from tbl_employee where id = #{id}</select>
</mapper>

3) log4j日志配置文件:log4j.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"><log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"><appender name="STDOUT" class="org.apache.log4j.ConsoleAppender"><param name="Encoding" value="UTF-8" /><layout class="org.apache.log4j.PatternLayout"><param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m  (%F:%L) \n" /></layout></appender><logger name="java.sql"><level value="debug" /></logger><logger name="org.apache.ibatis"><level value="info" /></logger><root><level value="debug" /><appender-ref ref="STDOUT" /></root>
</log4j:configuration>

 

5.编写测试

1)硬编码编程的调用方式

public SqlSessionFactory getSqlSessionFactory() throws IOException {String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);return new SqlSessionFactoryBuilder().build(inputStream);
}/*** 1、根据xml配置文件(全局配置文件)创建一个SqlSessionFactory对象 有数据源一些运行环境信息* 2、sql映射文件;配置了每一个sql,以及sql的封装规则等。 * 3、将sql映射文件注册在全局配置文件中* 4、写代码:*         1)、根据全局配置文件得到SqlSessionFactory;*         2)、使用sqlSession工厂,获取到sqlSession对象使用他来执行增删改查*             一个sqlSession就是代表和数据库的一次会话,用完关闭*         3)、使用sql的唯一标志来告诉MyBatis执行哪个sql。sql都是保存在sql映射文件中的。* @throws IOException*/
@Test
public void test01() throws IOException {// 2、获取sqlSession实例,能直接执行已经映射的sql语句// sql的唯一标识:statement Unique identifier matching the statement to use.// 执行sql要用的参数:parameter A parameter object to pass to the statement.SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();SqlSession openSession = sqlSessionFactory.openSession();try {Employee employee = openSession.selectOne("com.atguigu.mybatis.dao.EmployeeMapper.getEmpById", 1);System.out.println(employee);} finally {openSession.close();}
}

2)接口式编程的调用方式

public SqlSessionFactory getSqlSessionFactory() throws IOException {String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);return new SqlSessionFactoryBuilder().build(inputStream);
}@Test
public void test02() throws IOException {// 1、获取sqlSessionFactory对象SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();// 2、获取sqlSession对象SqlSession openSession = sqlSessionFactory.openSession();try {// 3、获取接口的实现类对象//会为接口自动的创建一个代理对象,代理对象去执行增删改查方法EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);Employee employee = mapper.getEmpById(1);System.out.println(mapper.getClass());System.out.println(employee);} finally {openSession.close();}
}

 

6.整体项目结构如下:

 7.总结

1)mybatis根据全局配置文件来创建SqlSessionFactory工厂对象,再通过工厂对象创建SqlSession会话对象(一次会话,一次连接),SqlSession再sql方法Id获取对应的sql语句并且执行改语句,sql语句配置在SQL Mapper映射文件中,每一个SQL都会有一个唯一ID。

2)SqlSession 的实例和connection一样 不是线程安全的,因此是不能被共享的。SqlSession每次 使用完成后需要正确关闭,这个关闭操作是必须的。SqlSession可以直接调用方法的id进行数据库操作,但是我们一般还是推荐使用SqlSession获取到Dao接口的代理类,执行代理对象的方法,可以更安全的进行类型检查操作。

 

返回到Mybatis学习笔记大纲

转载于:https://www.cnblogs.com/kancy/p/10205518.html

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

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

相关文章

洪水同频率放大的方法_我们应该怎么选择放大器配件?

在市面上&#xff0c;手机信号放大器高达百种型号与品牌&#xff0c;每种手机信号放大器所需的配件也不相同&#xff0c;我们需要选择合适的配件&#xff0c;才能让手机信号放大器更稳定的运行。下面佛山红岸谷通讯教大家怎么选适合自己的手机信号放大器配件。主要有以下几点。…

斑能不能彻底去掉_用茶树精油祛痘时,千万不能做这5件事!!!

祛痘注意事项~用茶树精油祛痘时&#xff0c;千万不能做这5件事&#xff01;&#xff01;&#xff01;长痘痘虽然是令人很头疼的事&#xff0c;但是茶树精油祛痘、去痘印功效可谓是无敌的&#xff01;茶树精油是自然界中的抗菌大师&#xff0c;能净化皮肤、平衡皮肤油脂分泌&…

JAX-RS 2.0:自定义内容处理

我试图想到一个更好的标题&#xff0c;但未能拿出一个&#xff01; 请多多包涵……。 JAX-RS 2.0规范允许我们无缝地将JAXB对象编组到HTTP请求/响应主体/从HTTP请求/响应主体中解组。 简而言之&#xff0c;我们可以使用域对象&#xff0c;而不必担心基于JAX-RS的解决方案中的低…

Waymo在美国推出自动驾驶汽车共享服务

导读经过数月的测试和数百万英里的无人驾驶汽车技术开发&#xff0c;Waymo 正式在美国推出了具有商业性质的自动驾驶汽车的共享服务。该公司的 Waymo One 项目将为客户提供 24 小时自动驾驶汽车服务。最初&#xff0c;这项服务将仅限于菲尼克斯周边城市&#xff0c;包括坦佩 (T…

2019春第一次课程设计实验报告

一、实验项目名称&#xff1a; 飞机游戏简化的编写 二、实验项目功能描述&#xff1a; 这个实验主要是实现游戏的正常运行&#xff0c;实现控制飞机的移动功能&#xff0c;增加其实用度&#xff0c; 同时还实现发射子弹和出现敌机的操作&#xff0c;利用函数封装重构飞机游戏&a…

区别和联系_动机与主题的区别与联系

今天我算是彻底弄明白了动机与主题的区别与联系&#xff08;暴论&#xff09;。当前些天我开始尝试写简单的奏鸣曲时&#xff0c;主题是什么&#xff0c;这个问题卡住了我&#xff0c;因为之前写的练习曲都是基于简单动机的。所以我求助于维基百科。主题是什么&#xff1f;参考…

巴顿又吃回头草

巴顿是一名好车手&#xff0c;一个会给shumi以及kimi造成威胁的家伙&#xff0c;我并不在意他在哪个车队&#xff0c;只希望他跑得比kimi慢才好。from新浪&#xff1a;宛如平地一声雷&#xff0c;巴顿重返威廉姆斯的消息不仅让车迷感到错愕&#xff0c;英美车队的老板理查兹更是…

尝试将WCF映射到Java术语

通过写这篇文章&#xff0c;我冒着被.NET和Java社区拒绝的巨大风险。 试图解释Java术语WCF &#xff08;代表Windows Communication Foundation&#xff09;是什么。 从WCF到Java的映射并不是很简单。 我缺乏对WFC使用者应该了解的与服务通信类型的了解&#xff1a;请求/响应或…

android fragment界面滑动切换效果,Android App中使用ViewPager+Fragment实现滑动切换效果...

在android应用中&#xff0c;多屏滑动是一种很常见的风格&#xff0c;没有采用viewpager的代码实现会很长&#xff0c;如果采用ViewPager&#xff0c;代码就会短很多&#xff0c;但是使用ViewPager也有弊端&#xff1a;需要导入android-support-v4.jar、细节无法控制。不过现在…

相对路径./与../区别

一、基本概念 1、相对路径-顾名思义&#xff0c;相对路径就是相对于当前文件的路径。网页中一般表示路径使用这个方法。 2、绝对路径-绝对路径就是你的主页上的文件或目录在硬盘上真正的路径。绝对路径就是你的主页上的文件或目录在硬盘上真正的路径&#xff0c;比如&#xff0…

shouji android输入法,安卓手机主流输入法对比

什么是合格的输入法&#xff1f;1. 按键布局合理2. 词库丰富且云识别准确3. 文字编辑4. 符号快捷输入5. 翻译功能6. 语音识别转文字对比五款主流输入法&#xff1a;触宝、百度、搜狗、讯飞、QQ均为默认皮肤和设置。1. 按键布局从哪进从哪出&#xff0c;这应该是一个输入法最基本…

DS博客作业06--图

1.本周学习总结 1.思维导图 2.谈谈你对图结构的认识及学习体会。 原本以为树已经够难的了&#xff0c;结果发现觉得太早了。图好难&#xff0c;看不懂。图是由两个集合V和E组成&#xff0c;V指的是顶点的有限集合&#xff0c;E代表两个不同顶点的边的有限集合&#xff0c;图也分…

c 给定字符串中查找_面试 | 查找类算法精析

点击上方蓝字设为星标每周一、三、五上午 8:30 准时推送下面开始今天的学习&#xff5e;前言查找&#xff0c;是使用计算机处理问题时的一个最基本的任务&#xff0c;因此也是算法面试中非常常见的一类问题。很多算法问题的本质&#xff0c;就是要能够高效使用查找。LeetCode 中…

LInux安装MySQL5.7.24详情

安装包下载 MySQL 的官网下载地址&#xff1a;http://www.mysql.com/downloads/ 我安装的是5.7版本 第二步&#xff1a; 选择&#xff1a;TAR (mysql-5.7.24-el7-x86_64.tar) 点击下载 然后点击 No thanks, just start my download. 进行下载。 检查是否安装过mysql [rootmas…

正确设置JUnit测试名称

寻找好名字是手工软件的挑战之一。 您需要随时随地找到它们-类&#xff0c;方法&#xff0c;变量&#xff0c;仅举几例。 但是&#xff0c;什么使名字成为好名字呢&#xff1f; 引用Oncle Bob的话&#xff1a;“三件事&#xff1a;可读性&#xff0c;可读性和可读性&#xff01…

html5储存类型特点,避免踩雷!你不得不知的 HTML5 “新”特性

什么是 HTML5HTML的发展历程如下&#xff1a;产生于1990年1997年 HTML4 出现&#xff0c;成为互联网开发的标准2008年&#xff0c;HTML5正式出现&#xff0c;2002年趋于稳定HTML在发展过程中&#xff0c;HTML4.01 版本维持了长达十年的时间&#xff0c;之后 HTML5 标准才出现&a…

How to show out three rows from the same databand On A4?

How to show out three rows from the same databand On A4? QuotePost by DoraHuang Tue Mar 13, 2018 4:13 am Hello, there are few questions to ask,1. How to present a report from one DataBand to show out three info?My questions like the picture:it is A4 pag…

rds基于什么开发_IaaS、PaaS、SaaS、DaaS都是什么?现在怎么样了?终于有人讲明白了...

导读&#xff1a;本文将详细科普云计算的概念、云服务的发展现状&#xff0c;并逐一介绍各种云服务模式&#xff08;IaaS、PaaS、SaaS、DaaS&#xff09;&#xff0c;建议收藏&#xff01;01 云计算的概念云是一种服务&#xff0c;可以像使用水、电、煤那样按需使用、灵活付费&…

[转]css实现左侧宽度自适应,右侧固定宽度

原文地址:https://segmentfault.com/a/1190000008411418 页面布局中经常用会遇到左侧宽度自适应&#xff0c;右侧固定宽度&#xff0c;或者左侧宽度固定&#xff0c;右侧自适应。总之就是一边固定宽度&#xff0c;一边自适应宽度。 一般固定宽度是导航栏&#xff0c;自适应宽度…

Java 8发布了! — Lambdas教程

为了庆祝几分钟前发布的Java 8的发布&#xff0c;我正在发布Java 8 Lambdas教程的草稿版本。 这是学习Streams API的一种很好的可视化方法&#xff0c;从第一天开始&#xff0c;它将帮助您开始在自己的应用程序中利用lambda。本文计划在下一期Java Magazine发行中发表&#xff…