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)内。

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

 

MyBatis《1》的更多相关文章

  1. 如何使用mybatis《三》

    在前边阐述了单独使用mybatis的方法,在实际开发过程中mybatis经常和spring一起使用,即mybatis和spring进行集成,现在我们来看如何集成. mybatis和spring进行集成 ...

  2. 如何使用mybatis《二》

    前边阐述了如何在java项目中使用mybatis,我们使用的是映射文件的方式,在获得具体的数据操作方法时需要传入映射文件中namespace+“.”方法名称,这种方式有时候会感觉很不爽,很麻烦.我们在 ...

  3. 如何使用mybatis《一》

    mybatis作为ORM轻量级框架一出现就吸引了无数人的眼球,比hibernate要简单且入门较容易,下面开始我的第一个mybatis程序. 一.下载mybatis的包 我们知道任何一个框架都会有其包 ...

  4. MyBatis《2》

    MyBatis入参考文档:http://mybatis.org/mybatis-3/zh/   1.properties 属性 1.在MyBatis配置文件中引用属性文件     MyBatis允许在 ...

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

    MyBatis基础入门<十七>动态SQL 描述: >> 完成多条件查询等逻辑实现 >> 用于实现动态SQL的元素主要有: > if > trim > ...

  6. MyBatis基础入门《十三》批量新增数据

    MyBatis基础入门<十三>批量新增数据 批量新增数据方式1:(数据小于一万) xml文件 接口: 测试方法: 测试结果: =============================== ...

  7. MyBatis基础入门《十》添加数据

    MyBatis基础入门<十>添加数据 描述: 修改了实体类:TblClient.java,将其字段:cbirthday 由String类型改成了Date类型. TblClient.java ...

  8. MyBatis基础入门《九》ResultMap自动匹配

    MyBatis基础入门<九>ResultMap自动匹配 描述: Mybatis执行select查询后,使用ResultMap接收查询的数据结果. 实体类:TblClient.java 接口 ...

  9. MyBatis基础入门《八》查询参数传入Map

    MyBatis基础入门<八>查询参数传入Map 描述: 在执行select查询数据的时候,方法传入的参数是java.util.Map类型. 接口方法: xml文件 注意: 书写SQL语句的 ...

随机推荐

  1. ELK系列~log4-nxlog-Fluentd-elasticsearch写json数据需要注意的几点

    经验与实践 前两篇文章里我们介绍了nxlog的日志收集和转发<ELK系列~Nxlog日志收集加转发(解决log4日志换行导致json转换失败问题)>,今天我们主要总结一下,在与log4和f ...

  2. 业余草双因素认证(2FA)教程

    所谓认证(authentication)就是确认用户的身份,是网站登录必不可少的步骤.密码是最常见的认证方法,但是不安全,容易泄露和冒充.越来越多的地方,要求启用双因素认证(Two-factor au ...

  3. 对Numpy广播操作的理解

    1.首先检查两个矩阵维数是否相同,若不同,对维数少的补一.注意这里的维数不是指n行d列中的n和d的值,对于这种情况维数就是2.若一个两维的矩阵(n,d)和一个一维的数组(m,)相乘,补一操作就是将那个 ...

  4. dynamic_cast 转换示例

    dynamic_cast 转换示例 /* 带虚函数与不带虚函数转换的区别 dynamic_cast:必须要有虚函数才可以转换 dynamic_cast:只能处理转换指针或引用,不能转换对象 dynam ...

  5. 高性能前端框架React详解

      前  言 React 是一个用于构建[用户界面]的 JAVASCRIPT 库. React主要用于构建UI,很多人认为 React 是 MVC 中的 V(视图). React 起源于 Facebo ...

  6. log4donet 的 一篇简单使用实例

    背景 最近在写一个Adapter,需要调用别的程序的DLL. Adapter使用的是C#还有.net的等方面的技术.今天在写log这块,就像尝试一下有没有“轮子”可以试试的.在网上搜罗了一番之后,决定 ...

  7. linq 在查询表达式中处理 null 值

    此示例显示如何在源集合中处理可能的 null 值. IEnumerable<T> 等对象集合可包含值为 null 的元素. 如果源集合为 null 或包含值为 null 的元素,并且查询不 ...

  8. AMD与commonJS

    CommonJS:它是一个同步的模式.但是这种模式并不适合于浏览器端,如果浏览器同步模式一个一个加载模块,那么打开将会变得非常的慢. AMD:它最大的特点就是可以异步的方式加载模块,具体的不同在于AM ...

  9. Three.js 保存camera(视角)设置到数据库,包括场景的缩放、旋转、移动等

    最近在做的项目中遇到需要保存当前的3d管道视角设置的问题,用户希望在对3d场景内的管道进行了缩放.旋转.移动之后可以将场景当前的视角状态保存在数据库中,并在下次加载时读取. 经过不断的尝试和研究,在同 ...

  10. 《Linux命令行与shell脚本编程大全》 第六章环境变量

    很多程序和脚本都通过环境变量来获取系统信息.存储临时数据和配置信息. 6.1 什么是环境变量: bash shell用一个叫环境变量(environment variable)的特性来存储有关shel ...