MyBatis《1》

MyBatis入参考文档:http://mybatis.org/mybatis-3/zh/

1.使用MyBatis前的准备

1.增加Maven依赖

  1. <dependency>
  2. <groupId>mysql</groupId>
  3. <artifactId>mysql-connector-java</artifactId>
  4. <version>5.1.37</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.mybatis</groupId>
  8. <artifactId>mybatis</artifactId>
  9. <version>3.3.0</version>
  10. </dependency>

2.数据库建表

  1. CREATE TABLE tb_teacher
  2. (
  3. id bigint NOT NULL auto_increment COMMENT ‘ID‘,
  4. no varchar(10) NOT NULL COMMENT ‘教师编号‘,
  5. name varchar(50) NOT NULL COMMENT ‘教师姓名‘,
  6. sex char(1) NOT NULL COMMENT ‘教师性别‘,
  7. job_title varchar(50) NOT NULL COMMENT ‘职称‘,
  8. PRIMARY KEY (id)
  9. ) COMMENT = ‘教师信息表‘;
  10. INSERT INTO tb_teacher (no, name, sex, job_title) VALUES (‘001‘, ‘Test01‘, ‘f‘, ‘教师01‘);
  11. INSERT INTO tb_teacher (no, name, sex, job_title) VALUES (‘002‘, ‘Test02‘, ‘f‘, ‘教师02‘);
  12. INSERT INTO tb_teacher (no, name, sex, job_title) VALUES (‘003‘, ‘Test03‘, ‘f‘, ‘教师03‘);

3.创建实体类

  1. package model;
  2. import java.io.Serializable;
  3. /** 教师信息表 */
  4. public class Teacher implements Serializable
  5. {
  6. private static final long serialVersionUID = 1L;
  7. /** ID */
  8. private Long id;
  9. /** 教师编号 */
  10. private String no;
  11. /** 教师姓名 */
  12. private String name;
  13. /** 教师性别 */
  14. private String sex;
  15. /** 职称 */
  16. private String job_title;
  17. ......
  18. }

2.创建SqlSessionFactory

1.使用XML配置文件创建SqlSessionFactory

从XML文件中构建SqlSessionFactory的实例非常简单,建议使用类路径下的资源文件进行配置。但是也可以使用任意的输入流(InputStream)实例,包括字符串形式的文件路径或者 file:// 的 URL 形式的文件路径来配置。MyBatis包含一个名叫Resources的工具类,它包含一些实用方法,可使从classpath或其他位置加载资源文件更加容易。

  1. String resource = "mybatis-config.xml";
  2. InputStream inputStream = Resources.getResourceAsStream(resource);
  3. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

创建配置文件mybatis-config.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
  3. <configuration>
  4. <environments default="development">
  5. <environment id="development">
  6. <transactionManager type="JDBC" />
  7. <dataSource type="POOLED">
  8. <property name="driver" value="com.mysql.jdbc.Driver" />
  9. <property name="url" value="jdbc:mysql://localhost:3306/test" />
  10. <property name="username" value="root" />
  11. <property name="password" value="lizhiwei" />
  12. </dataSource>
  13. </environment>
  14. </environments>
  15. <mappers>
  16. <mapper resource="mapping/TeacherMapper.xml" />
  17. </mappers>
  18. </configuration>

实体类映射文件:mapping/TeacherMapper.xml:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="mapping.TeacherDao">
  4. <select id="getTeacherById" resultType="model.Teacher" parameterType="_int">
  5. select * from tb_teacher WHERE id = #{id};
  6. </select>
  7. </mapper>

2.直接使用API创建SqlSessionFactory

如果你更愿意直接从Java程序而不是XML文件中创建configuration,或者创建你自己的configuration构建器,MyBatis也提供了完整的配置类,提供所有和XML文件相同功能的配置项。

  1. DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();
  2. TransactionFactory transactionFactory = new JdbcTransactionFactory();
  3. Environment environment = new Environment("development", transactionFactory, dataSource);
  4. Configuration configuration = new Configuration(environment);
  5. configuration.addMapper(BlogMapper.class);
  6. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);

3.创建SqlSession操作数据库

1.直接使用映射文件TeacherMapper.xml中的SQL

  1. Teacher teacher = sqlSession.selectOne("mapping.TeacherDao.getTeacherById",1);
  2. System.out.println(teacher);
  3. sqlSession.close();

参数“mapping.TeacherDao.getTeacherById”就指定是TeacherMapper.xml文件中select语句(通过“namespace” + “id”)

2.使用接口关联映射文件TeacherMapper.xml

创建接口:TeacherDao

  1. package mapping;
  2. import model.Teacher;
  3. public interface TeacherDao
  4. {
  5. public Teacher getTeacherById(int id);
  6. }

使用MyBatis的Mapper功能,获取接口实例,并使用:

  1. TeacherDao teacherDao = sqlSession.getMapper(TeacherDao.class);
  2. teacher = teacherDao.getTeacherById(2);
  3. System.out.println(teacher);
  4. sqlSession.close();

使用Mapper接口的方式,不用写接口实现类接口完成数据库操作,简单方便,此方法是官方推荐。是MyBatis一种很重要的用法。

注意:使用 Mapper 接口调用必须具备以下条件:

  1. Mapper 接口方法名 和 TeacherMapper.xml中定义的每个 sql 的 id 同名。
  2. Mapper 接口方法的输入参数类型和 TeacherMapper.xml中定义的 sql parameterType类型相同。
  3. Mapper 接口的输出参数类型和 TeacherMapper.xml中 定义的 sql 的 resultType类型相同。
  4. TeacherMapper.xml文件中的 namespace即是 Mapper 接口的类路径。

4.各种主要接口实例的生命周期

1.SqlSessionFactoryBuilder

这个类可以被实例化、使用和丢弃,一旦创建了 SqlSessionFactory,就不再需要它了。因此SqlSessionFactoryBuilder实例的最佳范围是方法范围(也就是局部方法变量)。你可以重用SqlSessionFactoryBuilder来创建多个 SqlSessionFactory 实例,但是最好还是不要让其一直存在以保证所有的 XML 解析资源开放给更重要的事情。

2.SqlSessionFactory

SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由对它进行清除或重建。使用 SqlSessionFactory 的最佳实践是在应用运行期间不要重复创建多次,多次重建 SqlSessionFactory 被视为一种代码“坏味道(bad smell)”。因此 SqlSessionFactory 的最佳范围是应用范围。有很多方法可以做到,最简单的就是使用单例模式或者静态单例模式。

3.SqlSession

每个线程都应该有它自己的SqlSession实例。SqlSession的实例不是线程安全的,因此是不能被共享的,所以它的最佳的范围是请求或方法范围。绝对不能将SqlSession实例的引用放在一个类的静态域,甚至一个类的实例变量也不行。也绝不能将SqlSession实例的引用放在任何类型的管理范围中,比如Serlvet架构中的HttpSession。如果你现在正在使用一种Web框架,要考虑SqlSession放在一个和HTTP请求对象相似的范围中。换句话说,每次收到的HTTP请求,就可以打开一个SqlSession,返回一个响应,就关闭它。这个关闭操作是很重要的,你应该把这个关闭操作放到finally块中以确保每次都能执行关闭。

4.映射器实例(Mapper Instances)

映射器是创建用来绑定映射语句的接口。映射器接口的实例是从SqlSession中获得的。因此从技术层面讲,映射器实例的最大范围是和SqlSession相同的,因为它们都是从SqlSession里被请求的。尽管如此,映射器实例的最佳范围是方法范围。也就是说,映射器实例应该在调用它们的方法中被请求,用过之后即可废弃。并不需要显式地关闭映射器实例,尽管在整个请求范围(request scope)保持映射器实例也不会有什么问题,但是很快你会发现,像SqlSession一样,在这个范围上管理太多的资源的话会难于控制。所以要保持简单,最好把映射器放在方法范围(method scope)内。

-------------------------------------------------------------------------------------------------------------------------------

时间: 2024-08-18 07:51:15

MyBatis《1》的相关文章

如何使用mybatis《二》

前边阐述了如何在java项目中使用mybatis,我们使用的是映射文件的方式,在获得具体的数据操作方法时需要传入映射文件中namespace+“.”方法名称,这种方式有时候会感觉很不爽,很麻烦.我们在开发中不是常说要面向接口变成吗,mybatis也支持接口,下面在前面的例子的基础上做相应修改. 前面的例子的环境及映射文件均保持不变,如下是我的映射文件, <mapper namespace="com.cn.inter.IMessageOperation"> <selec

如何使用mybatis《一》

mybatis作为ORM轻量级框架一出现就吸引了无数人的眼球,比hibernate要简单且入门较容易,下面开始我的第一个mybatis程序. 一.下载mybatis的包 我们知道任何一个框架都会有其包,我们从其官方网站下载其包,官网网址为:http://www.mybatis.org/mybatis-3/,我这里使用的版本为3.3.0.下载完成之后解压可看到如下的目录结构: mybatis-3.3.0.jar是其包,lib目录下是其依赖包,我们把这些包放到我们的项目中.我这里创建的是javawe

MyBatis基础入门《五》核心配置文件

MyBatis基础入门<五>核心配置文件 描述: 在前面的章节中,简单的学习使用了一下mybatis,对于配置文件没有过多详细说明. 这里先描述项目中的一个核心配置文件:mybatis-config.xml 文件. 资料参考:http://www.mybatis.org/mybatis-3/ 1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUB

MyBatis基础入门《七》查询参数传入对象

MyBatis基础入门<七>查询参数传入对象 描述: 在执行查询语句的时候,传入的参数是一个对象,依据对象的属性,进行检索数据.此时,书写SQL语句中的条件时,其参数需要和对象中的属性保持一致. 实体类:TblClient.java 接口方法 注意: 接口中定义了一个新的方法(根据对象属性进行查询数据),方法的参数传入的是一个对象. xml文件 注意: >>> parameterType="baitang" resultType="baitang

MyBatis基础入门《十七》动态SQL

MyBatis基础入门<十七>动态SQL 描述: >> 完成多条件查询等逻辑实现 >> 用于实现动态SQL的元素主要有: > if > trim > where > set > choose( when , otherwise ) > foreach 动态SQL为Mybatis重要部分,项目也重新新建了一个:mybatis-dynamic-sql 项目结构: TblClient.java 1 package com.charles.e

天河微信小程序入门《四》:融会贯通,form表单提交数据库

天河在阔别了十几天之后终于又回来了.其实这篇文章里的demo是接着(天河微信小程序入门<三>)后面就做了的,但是因为最近在做别的项目,所以就偷懒没有发出来.放到今天来看,从前台提交数据到数据库已经是没有什么可写的了.不过既然开篇了就不能太监么,所以还是分享出来给大家.我当时的目的是为了实验api的功能和跟后台数据的通讯存储,所以没有考虑到美观之类的,界面非常丑请大家包涵.一个带form表单的页面在这里定义好自己form表单的元素名称 01 02 03 04 05 06 07 08 09 10

NOSQL《一》之MongoDB的理解

问题?NOSQL之MongoDB的理解 NOSQL定义: NoSQL(Not Only SQL ),意即"不仅仅是SQL" ,指的是非关系型的数据库 .是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨.NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入. 关系型数据库中的表都是存储一些结构化的数据,每条记录的字段的组成都一样,即使不是每条记录都需要所有的字段,但数据库会为每条数据分配所有的字段.

SpringBoot快速上手——《二》:SpringBoot集成SSM,实现增删改查功能

SpringBoot集成SSM,实现增删改查功能 github源码:https://github.com/xivinChen/SpringBoot 一.先介绍创建模块的另一种方式 1.点击Maven -> 勾选Create from archetype -> 选择 maven-archetype-quickstart 有时会需要点击 自动导入 2.工程目录 可以看到,这样创建的模块是相对干净的,需要我们手动的编写程序启动入口类.需要配置时还得创建配置文件.下一步见证. 3.完善模块 添加依赖,

美国《巴伦周刊》:庞然大物阿里巴巴为何能连创新高

2017年5月19日,美国巴伦周刊发表题为<为什么阿里巴巴这个庞然大物能够持续创下新高?>的分析文章,预期股价将进一步发力并会在今年创下新高. "基于阿里巴巴股票在本周四(发布财报)的表现,我们可以把这家市值3000亿美金的巨无霸比做一头犀牛,调整了一下,很快又恢复了它的冲刺."巴伦周刊写道. 本周,美国总统特朗普"泄密门"事件令美股科技板块股价承压.但阿里巴巴集团最新财报显示强劲增长前景,长线看多资金继续占据上风.截止周五,收盘价为123.22美元,盘