1.什么是mybatis?

MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。 MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索。 MyBatis 可以使用简单的XML 或注解用于配置和原始映射,将接口和 Java 的 POJO( Plain Old Java Objects,普通的Java 对象)映射成数据库中的记录.

1)MyBATIS 目前提供了三种语言实现的版本,包括:Java、.NET以及Ruby。(我主要学习java,就讲java的使用)
  2)它提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。
  3)mybatis与hibernate的对比?

mybatis提供一种“半自动化”的ORM实现。
   这里的“半自动化”,是相对Hibernate等提供了全面的数据库封装机制的“全自动化”ORM实现而言,“全自动”ORM实现了POJO和数据库表之间的映射,以及 SQL 的自动生成和执行。

而mybatis的着力点,则在于POJO与SQL之间的映射关系

2.结构目录详情:

3.设置配置文件如下:

<?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> <!-- 此处的alias是指的别名,对应实体类的别名;在“type”中最好加入全路径 -->
<typeAliases>
<!-- 别名方式1,一个一个的配置 type中放置的是类的全路径,alias中放置的是类别名-->
<typeAlias alias="City" type="mybatis.City"/> <!-- 别名方式2,自动扫描,将JAVA类的类名作为类的类别名
<package name="com.wenyin.mybatis.beans"/>
--> </typeAliases> <!-- 环境配置,连接数据库需要的ip、用户名、密码等 -->
<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/City" />
<property name="username" value="root"/>
<property name="password" value="admin"/>
</dataSource>
</environment>
</environments> <mappers>
<!-- 告知映射文件方式1,一个一个的配置,配置时使用全路径-->
<mapper resource="mybatis/CityMapper.xml"/>
<!-- 告知映射文件方式2,自动扫描包内的Mapper接口与配置文件
<package name="com/wenyin/mybatis/mapper"/>
-->
</mappers>
</configuration>

4.建立对应的实体类:

package mybatis;

public class City {

    public int ID;
public String Name;
public String CountryCode;
public String District;
public int Population; public int getID() {
return ID;
}
public void setID(int iD) {
ID = iD;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String getCountryCode() {
return CountryCode;
}
public void setCountryCode(String countryCode) {
CountryCode = countryCode;
}
public String getDistrict() {
return District;
}
public void setDistrict(String district) {
District = district;
}
public int getPopulation() {
return Population;
}
public void setPopulation(int population) {
Population = population;
} @Override
public String toString() {
return "World [ID=" + ID + ", Name=" + Name + ", CountryCode="
+ CountryCode + ", District=" + District + ", Population="
+ Population + "]";
} }

5.配置CityMapper.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对应Cofiguration中的resource,但是后缀名不用加 -->
<mapper namespace="mybatis.CityMapper">
<!-- -->
<select id="selectCityByCountryCode" parameterType="String" resultType="City">
select * from city where CountryCode = #{CountryCode}
</select>
</mapper>

6.测试类进行测试:

package mybatis;

import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MybatisDemo { public static void main(String[] args) throws IOException {
//mybatis的配置文件
String resource = "mybatis/Configuration.xml";
//使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
Reader conf = Resources.getResourceAsReader(resource);
//构建sqlSession的工厂
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(conf);
//创建能执行映射文件中sql的sqlSession
SqlSession session = sessionFactory.openSession();
/**
* 映射sql的标识字符串,
* mybatis.CityMapper是CityMapper.xml文件中mapper标签的namespace属性的值,
* selectCityByCountryCode是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL
*/
String statement = "mybatis.CityMapper.selectCityByCountryCode";//映射sql的标识字符串
//执行查询返回一个唯一City对象的sql
City wo = session.selectOne(statement, "ANT");
System.out.println(wo);
}
}

=====================================================================================================

使用接口:

新建一个接口类,CityInterface

package inter;

import mybatis.City;

public interface CityInterface {
public abstract City selectCityByCountryCode(String CountryCode);
}

此时需要修改CityMapper.xml中的namespace的值,namespace的值必须为对应的接口类的全路径

<mapper namespace="inter.CityInterface">
<!-- -->
<select id="selectCityByCountryCode" parameterType="String" resultType="City">
select * from city where CountryCode = #{CountryCode}
</select>
</mapper>

修改测试类:

package mybatis;

import inter.CityInterface;
import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MybatisDemo {
public static void main(String[] args) throws IOException {
//mybatis的配置文件
String resource = "mybatis/Configuration.xml";
//使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
Reader conf = Resources.getResourceAsReader(resource);
//构建sqlSession的工厂
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(conf);
//创建能执行映射文件中sql的sqlSession
SqlSession session = sessionFactory.openSession();
CityInterface cityInter = session.getMapper(CityInterface.class);
City city = cityInter.selectCityByCountryCode("ANT");
System.out.println(city);
}
}

========================================================================================

实现数据的增删改查:

前面已经讲到用接口的方式编程。如果不一致就会出错,这一章主要在上一讲基于接口编程的基础上完成如下事情:
1. 用 mybatis 查询数据,包括列表
2. 用 mybatis 增加数据
3. 用 mybatis 更新数据.
4. 用 mybatis 删除数据.

查询数据,前面已经讲过简单的,主要看查询出列表,也就是返回list, 在我们这个例子中也就是 List<City> , 这种方式返回数据,需要在CityMapper.xml 里面配置返回的类型 resultMap, 注意不是 resultType, 而这个resultMap 所对应的应该是我们自己配置的:

<?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对应Cofiguration中的resource,但是后缀名不用加 -->
<mapper namespace="inter.CityInterface">
<!-- 制定返回值类型为map,其中jdbcType对应的是数据库中字段类型,从数据库中取出数据时,自动封装成相应的类型
否则取出的都是String型 -->
<resultMap type="City" id="resultListCity">
<id column="ID" property="ID" jdbcType="INTEGER"/>
<result column="Name" property="Name" jdbcType="CHAR"/>
<result column="CountryCode" property="CountryCode" jdbcType="CHAR"/>
<result column="District" property="District" jdbcType="CHAR"/>
<result column="Population" property="Population" jdbcType="INTEGER"/>
</resultMap> <select id="selectCityByCountryCode" parameterType="String" resultMap="resultListCity">
select * from city where CountryCode = #{CountryCode}
</select>
</mapper>

接口中增加方法返回类型是List<City>的方法:

package inter;

import java.util.List;

import mybatis.City;

public interface CityInterface {
public abstract List<City> selectCityByCountryCode(String CountryCode);
}

修改测试类如下:

package mybatis;

import inter.CityInterface;
import java.io.IOException;
import java.io.Reader;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MybatisDemo {
public static void main(String[] args) throws IOException {
//mybatis的配置文件
String resource = "mybatis/Configuration.xml";
//使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
Reader conf = Resources.getResourceAsReader(resource);
//构建sqlSession的工厂
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(conf);
//创建能执行映射文件中sql的sqlSession
SqlSession session = sessionFactory.openSession();
CityInterface cityInter = session.getMapper(CityInterface.class);
List<City> city = cityInter.selectCityByCountryCode("AFG");
// System.out.println(city.get(0));
// System.out.println(city.get(1));
// System.out.println(city.get(2));
for(City c : city){
System.out.println(c);
}
}
}

优于jdbc的mybatis框架入门的更多相关文章

  1. 一看就懂的Mybatis框架入门笔记

    本篇为初学Mybatis框架时的入门笔记,整理发出 Spring集成Mybatis https://www.cnblogs.com/yueshutong/p/9381590.html SpringBo ...

  2. MyBatis框架入门之(二)

    在本篇文章中,没有对细节进行处理的很好,有很多晓得细节的遗漏,本文只是一个简单的快速的入门 MyBatis的快速入门 导入MyBatis框架jar包 配置文件 SqlSessionFactoryBui ...

  3. Mybatis框架入门

    Mybaits框架 一.什么是Mybatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了googl ...

  4. mybatis框架入门程序:演示通过mybatis实现数据库的查询操作

    我们现在工程基于的数据库见“https://www.cnblogs.com/wyhluckdog/p/10147754.html”这篇博文. 1.mybatis下载 mybatis的代码由githua ...

  5. Java Mybatis 框架入门教程

    一.Mybatis介绍 MyBatis是一款一流的支持自定义SQL.存储过程和高级映射的持久化框架.MyBatis几乎消除了所有的JDBC代码,也基本不需要手工去 设置参数和获取检索结果.MyBati ...

  6. mybatis框架入门程序:演示通过mybatis实现数据库的修改操作

    1.mybatis的基本配置工作可以在我的这篇博客中查看:https://www.cnblogs.com/wyhluckdog/p/10149480.html 2.修改用户的配置文件: <upd ...

  7. mybatis框架入门程序:演示通过mybatis实现数据库的删除操作

    1.mybatis的基本配置工作可以在我的这篇博客中查看:https://www.cnblogs.com/wyhluckdog/p/10149480.html 2.删除用户的映射文件: <!-- ...

  8. mybatis框架入门程序:演示通过mybatis实现数据库的插入操作中实现返回结果的获取

    1.mybatis实现数据库的插入操作可以查看https://www.cnblogs.com/wyhluckdog/p/10149895.html这篇博文,这里面的插入操作没有返回结果,所以这篇博文就 ...

  9. mybatis框架入门程序:演示通过mybatis实现数据库的添加操作

    1.mybatis的基本配置准备在我的这篇博文中可以找到:https://www.cnblogs.com/wyhluckdog/p/10149480.html 2. 映射文件: 在User.xml中添 ...

随机推荐

  1. LeetCode OJ:Valid Anagram(有效字谜问题)

    Given two strings s and t, write a function to determine if t is an anagram of s. For example,s = &q ...

  2. L142

    keep half an eye on something分神留意splash out随意花钱 大肆挥霍half a mind有想做某事go Dutch v. 各自付帐,打平伙chance in a ...

  3. Arcgis For Android之离线地图实现的几种方式

    为什么要用,我想离线地图的好处是不言而喻的,所以很多人做系统的时候都会考虑用离线地图.在此,我给大家介绍几种Arcgis For Android下加载离线地图的方式. 在Arcgis For Andr ...

  4. 你必须知道的495个C语言问题,学习体会四

    本文,我们来学习下指针,这是个梦魇啊.无数次折磨着C语言学习者,无数次的内存泄露,无数次的访问失败,无数次的越界溢出, 这些错误造就的仅仅是一个 跟随者,真正的优秀者必须要正视语言的局限,同时在最大限 ...

  5. POJ 2029 Palindromes _easy version

    #include<cstdio> #include<cstring> using namespace std; int main() { int n; ]; scanf(&qu ...

  6. 用eclipse来制作并使用可执行的jar文件

    我近来用java写了一个股票收益分析的小程序,用于计算我的股票操作所带来的的收益.这里,记录了如何将源代码打包成可执行的命令的一个过程. 1:生成可执行的jar文件 选中工程,选择菜单中的export ...

  7. C++常量const

    常量折叠概念 常量折叠表面上的效果和宏替换是一样的,只是“效果上是一样的”,而两者真正的区别在于,宏是字符常量,在预编译宏替换完成后,该宏名字会消失,所有对宏的引用已经全部被替换为它所对应的值,编译器 ...

  8. Python之xpath

    xpath是一种在XML文档中定位元素的语言,常用于xml.html文件解析,比css选择器使用方便XML文件最小构成单元: - element(元素节点) - attribute(属性节点) - t ...

  9. asp.net core microservices 架构之Task 事务一致性 事件源 详解

    一 aspnetcore之task的任务状态-CancellationToken 我有一篇文章讲解了asp.net的线程方面的知识.我们知道.net的针对于多线程的一个亮点就是Task,net clr ...

  10. LOJ#2351. 「JOI 2018 Final」毒蛇越狱

    LOJ#2351. 「JOI 2018 Final」毒蛇越狱 https://loj.ac/problem/2351 分析: 首先有\(2^{|?|}\)的暴力非常好做. 观察到\(min(|1|,| ...