一、MyBatis学习

  平时我们都用JDBC访问数据库,除了自己需要写SQL,还要操作Connection,Statement,ResultSet这些。

  使用MyBatis,只需要自己提供SQL语句,其他的工作,建立数据库连接,Statement等一些JDBC相关异常处理工作都交给了MyBatis去做了。只关心增删改查操作层面上。

MyBatis的工作原理:

每一个MyBatis的应用程序都可以一个SqlSessionFactory对象的实例为核心。首先是通过字节流InputStream通过Resource将配置文件读入,然后通过SqlSessionFactoryBuiler().build()方法创建SqlSessionFactory,然后在通过SqlSessionFactory.openSession()方法创建一个SqlSession为每一个数据库事务服务。经历了MyBatis初始化--->创建SqlSession--->运行SQL语句,返回结果

1、建立数据库

  1. create database demo

2、创建实体类

  1. package com.demo.pojo;
  2.  
  3. public class Category{
  4. private int id;
  5. private String name;
  6. //属性的getter/setter方法
  7. publci int getId(){
  8. return id;
  9. }
  10. public vodi setId(int id){
  11. this.id=id;
  12. }
  13. public String getName(){
  14. return name;
  15. }
  16. public vodi setName(String name){
  17. this.name=name;
  18. }
  19. }

3、配置文件mybatis-config.xml

  相当于hibernate.cfg.xml

作用:提供链接数据库用的驱动,数据库名称,编码方式,密码账号

  1. <property name="driver" value="com.mysql.jdbc.Driver"/>
  2. <property name="url" value="jdbc:mysql://localhost:3306/demo?characterEncoding=UTF-8"/>
  3. <property name="username" value="root">
  4. <property name="password" value="admin">

具体配置mybatis-config.xml如下:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6. <!--自动扫描com.demo.pojo下的类型,使得在后续配置文件Category.xml种使用resultType的时候,可以直接使用Category,而不必写全cmo.demo.pojo.Category-->
  7. <typeAliases>
  8. <package name="com.demo.pojo"/>
  9. </typeAliases>
  10. <environments default="development">
  11. <environment id="development">
  12. <transactionManager type="JDBC"/>
  13. <dataSource type="POOLED">
  14. <property name="driver" value="com.mysql.jdbc.Driver"/>
  15. <property name="url" value="jdbc:mysql://localhost:3306/how2java?characterEncoding=UTF-8"/>
  16. <property name="username" value="root"/>
  17. <property name="password" value="admin"/>
  18. </dataSource>
  19. </environment>
  20. </environments>
  21. <!--映射Category.xml-->
  22. <mappers>
  23. <mapper resource="com/dmeo/pojo/Category.xml"/>
  24. </mappers>
  25. </configuration>

4、配置文件Category.xml

  在包com.demo.pojo下,新建文件Category.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <!--命名空间com.demo.pojo,在后续调用sql语句的时候,会用到它里面的sql语句-->
  6. <mapper namespace="com.demo.pojo">
  7. <!--sql语句用id:listCategory进行标示,以供后续代码调用。resultType="Category"表示返回数据和Category关联起来。-->
  8. <!--这里本应该使用com.demo.pojo.Category,但是在mybatis-config.xml中的配置了<typeAliases><package name="com.demo.pojo"/></typeAliases>,所以可以直接使用Category-->
  9. <select id="listCategory" resultType="Category">
  10. select * from category_
  11. </select>
  12. </mapper>

5、测试类TestMyBatis

  1. package com.demo;
  2.  
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.util.List;
  6.  
  7. import org.apache.ibatis.io.Resources;
  8. import org.apache.ibatis.session.SqlSession;
  9. import org.apache.ibatis.session.SqlSessionFactory;
  10. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  11.  
  12. import com.demo.pojo.Category;
  13.  
  14. public class TestMyBatis{
  15. public static void main(String[] args) throw IOException{
  16. //根据配置文件mybatis-config.xml得到sqlSessionFactory
  17. String resource="mybatis-config.xml";
  18. InputStream inputStream=Resources.getResourceAsStream(resource);
  19. SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
  20. //根据sqlSessionFactory得到session
  21. SqlSession session=sqlSessionFactory.openSession();
  22. //根据session的selectList()方法,调用sql语句listCategory,listCategory这个就是在Category.xml种那条sql语句设置的id。
  23. List<Category> cs=session.selectList("listCategory");
  24. //List<Category> cs=session.selectList("com.demo.pojo.listCategory");效果一样,只是比较臃肿,建议用上面那个
  25. for(Category c:cs){
  26. System.out.println(c.getName());
  27. }
  28. }
  29. }

二、MyBatis的基本原理

1、应用程序找到MyBatis要的数据

2、MyBatis从数据库找到数据

  2.1、通过mybatis-config.xml定位哪个数据库

  2.2、通过Category.xml执行对应的select语句

  2.3、根据Category.xml把返回的数据库记录封装在Category对象中

  2.4、把多个Category对象装在一个Category集合中

3、返回一个Category集合

七、持久层框架(MyBatis)的更多相关文章

  1. 从零搭建springboot服务02-内嵌持久层框架Mybatis

    愿历尽千帆,归来仍是少年 内嵌持久层框架Mybatis 1.所需依赖 <!-- Mysql驱动包 --> <dependency> <groupId>mysql&l ...

  2. Java数据持久层框架 MyBatis之背景知识二

    对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...

  3. java持久层框架mybatis如何防止sql注入

    看到一篇很好的文章:http://www.jfox.info/ava-persistence-framework-mybatis-how-to-prevent-sql-injection sql注入大 ...

  4. Java数据持久层框架 MyBatis之背景知识三

    摘录自:http://www.cnblogs.com/lcngu/p/5437281.html 对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.or ...

  5. Java数据持久层框架 MyBatis之API学习一(简介)

    对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...

  6. Java数据持久层框架 MyBatis之背景知识一

    对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...

  7. 开源顶级持久层框架——mybatis(ibatis)——day02

    mybatis第二天    高级映射 查询缓存 和spring整合          课程复习:         mybatis是什么?         mybatis是一个持久层框架,mybatis ...

  8. Java持久层框架Mybatis入门

    MyBatis是什么 MyBatis是Java的持久层框架,GitHub的star数高达15.8k,是Java技术栈中最热门的ORM框架之一.它支持自定义SQL.存储过程以及高级映射,可以通过XML或 ...

  9. 开源顶级持久层框架——mybatis(ibatis)——day01

    mybatis-day01     1.对原生态jdbc程序中的问题总结         1.1环境             java环境:jdk             eclipse:indigo ...

  10. 整合使用持久层框架mybatis 使用SqlSessionTemplate模板类与使用映射接口 对比

    spring中整合使用mybatis的用法总结 一:在Spring配置Mybatis 第一步:将mybatis-spring类包添加 到项目的类库中 第二步:编写spring和持久层衔接的xml文件, ...

随机推荐

  1. JS 事件绑定、事件监听、事件委托详细介绍

    原:http://www.jb51.net/article/93752.htm 在JavaScript的学习中,我们经常会遇到JavaScript的事件机制,例如,事件绑定.事件监听.事件委托(事件代 ...

  2. 关于jQ的Ajax操作

    jQ的Ajax操作 什么是AJAX AJAX = 异步的javascript和XML(Asynchronous Javascript and XML) 它不是一门编程语言,而是利用JavaScript ...

  3. EM算法——Expectation-Maximization

    最大似然估计 一个栗子:假如去赌场,但是不知道能不能赚钱,你就在门口堵着出来一个人就问一个赚了还是赔了,如果问了5个人都说赚了,那么你就会认为,赚钱的概率肯定是非常大的. 已知:(1)样本服从分部的模 ...

  4. toggle 1.9 以后就被删除了

    toggle 1.9 以后就被删除了, 1.8.x  以前可用. $(function(){ $(".p_title").toggle( function(){ $(this).n ...

  5. ege demo

    #include <ege.h> const float base_speed = 0.5f; const float randspeed = 1.5f; //自定义函数,用来返回一个0 ...

  6. Algorithm 算法基础知识(未完成

    基础概念不讲,记录课上关键部分 时间复杂度(Time Complexity) 算法所需要花的时间 比较时间复杂度(主要看问题的规模) 时间频度(算法执行次数)T(n)和T(n1),如果两个时间频度为等 ...

  7. 设置本地虚拟域名windows+apache

    C:\WINDOWS\system32\drivers\etc\hosts 在这个文件中 最下面添加. 127.0.0.1   localhost.com 127.0.0.1   cho.com 12 ...

  8. linux学习笔记--程序与进程管理

    .工作管理 1.前台程序放后台程序  命令后 加  & 2.任务执行时将前台任务任务放到后台中并[暂停]  ctr + z 3.jobs 观察后台工作状态 及多少任务在执行,可以通过 help ...

  9. 《剑指offer》第五十九题(滑动窗口的最大值)

    // 面试题59(一):滑动窗口的最大值 // 题目:给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值.例如, // 如果输入数组{2, 3, 4, 2, 6, 2, 5, 1}及滑动窗口的 ...

  10. 《剑指offer》第四十四题(数字序列中某一位的数字)

    // 面试题44:数字序列中某一位的数字 // 题目:数字以0123456789101112131415…的格式序列化到一个字符序列中.在这 // 个序列中,第5位(从0开始计数)是5,第13位是1, ...