优于jdbc的mybatis框架入门
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框架入门的更多相关文章
- 一看就懂的Mybatis框架入门笔记
本篇为初学Mybatis框架时的入门笔记,整理发出 Spring集成Mybatis https://www.cnblogs.com/yueshutong/p/9381590.html SpringBo ...
- MyBatis框架入门之(二)
在本篇文章中,没有对细节进行处理的很好,有很多晓得细节的遗漏,本文只是一个简单的快速的入门 MyBatis的快速入门 导入MyBatis框架jar包 配置文件 SqlSessionFactoryBui ...
- Mybatis框架入门
Mybaits框架 一.什么是Mybatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了googl ...
- mybatis框架入门程序:演示通过mybatis实现数据库的查询操作
我们现在工程基于的数据库见“https://www.cnblogs.com/wyhluckdog/p/10147754.html”这篇博文. 1.mybatis下载 mybatis的代码由githua ...
- Java Mybatis 框架入门教程
一.Mybatis介绍 MyBatis是一款一流的支持自定义SQL.存储过程和高级映射的持久化框架.MyBatis几乎消除了所有的JDBC代码,也基本不需要手工去 设置参数和获取检索结果.MyBati ...
- mybatis框架入门程序:演示通过mybatis实现数据库的修改操作
1.mybatis的基本配置工作可以在我的这篇博客中查看:https://www.cnblogs.com/wyhluckdog/p/10149480.html 2.修改用户的配置文件: <upd ...
- mybatis框架入门程序:演示通过mybatis实现数据库的删除操作
1.mybatis的基本配置工作可以在我的这篇博客中查看:https://www.cnblogs.com/wyhluckdog/p/10149480.html 2.删除用户的映射文件: <!-- ...
- mybatis框架入门程序:演示通过mybatis实现数据库的插入操作中实现返回结果的获取
1.mybatis实现数据库的插入操作可以查看https://www.cnblogs.com/wyhluckdog/p/10149895.html这篇博文,这里面的插入操作没有返回结果,所以这篇博文就 ...
- mybatis框架入门程序:演示通过mybatis实现数据库的添加操作
1.mybatis的基本配置准备在我的这篇博文中可以找到:https://www.cnblogs.com/wyhluckdog/p/10149480.html 2. 映射文件: 在User.xml中添 ...
随机推荐
- 制作.bat文件运行指定目录的.bat或者exe
上代码: goto start call "D:/Program Files/activeMQ/apache-activemq-5.3.2-bin/apache-activemq-5.3.2 ...
- 201621123003《Java程序设计》第一周学习总结
#1. 本周学习总结 本周主要学习了Java的jdk.jvm.jre等基本概念,Java的发展史,知道Java语言的跨平台.面向对象等主要特点,简单了解了Java程序的编译和运行过程.对于学习Java ...
- New Concept English three (38)
26w/m 45 Future historians will be in a unique position when they come to record the history of our ...
- 解决webpack vue 项目打包生成的文件,资源文件均404问题
最近在使用webpack + vue做个人娱乐项目时,发现npm run build后,css js img静态资源文件均找不到路径,报404错误...网上查找了一堆解决办法,总结如下 一.首先修改c ...
- [Hive]HiveServer2概述
1. HiveServer1 HiveServer是一种可选服务,允许远程客户端可以使用各种编程语言向Hive提交请求并检索结果.HiveServer是建立在Apache ThriftTM(http: ...
- [置顶]
Android 适配真要命?
原始尺寸场景 相信大家对上面也有所有耳闻另外就是如何计算屏幕的密度一般都是按照勾股定理例如中等屏幕密度 480^2+800^2开根号 然后除以当前屏幕尺寸3.5-4.2之间尺寸. 对于刚出来的那些An ...
- 【Java 并发】Executor框架机制与线程池配置使用
[Java 并发]Executor框架机制与线程池配置使用 一,Executor框架Executor框架便是Java 5中引入的,其内部使用了线程池机制,在java.util.cocurrent 包下 ...
- mysql基础认识1
一.配置文件 服务端和客户端的字符编码不一样时,可能会导致乱码显示等情况,为了统一两端的字符编码,可以通过配置文件进行实现,当然譬如登录账户等信息也可以进行配置,在启动mysql服务端时会自动读取配置 ...
- NOIP模拟题 友好国度
题目大意 给定一棵树,每个点有点权,求有多少组点对满足两点简单路径上的所有点点权的$gcd=1$. $n,val_i\leq 10^5$ 题解 考虑设$G_i$表示简单路径上所有点点权均为$i$的倍数 ...
- 【eclipse新增系列】eclipse新安装设计编码统一