MyBatis基础及查询

  • 一.项目中命名规范
  • 二.框架是什么?
  • 三.Mybatis简介
  • 四.环境搭建基本
    • 4.1 导入jar
    • 4.2 在src下新建全局配置文件mybatis.xml
    • 4.3 新建以mapper结尾的包,在包下新建:实体类名+Mapper.xml
    • 4.4 简单测试(只有单独使用mybatis时使用,最后ssm整合时下面的代码不需要写),直接运行test01.java
  • 五.环境搭建详解(全局配置文件中的内容)
    • 5.1 ``
    • 5.2 `type `属性
  • 六.三种查询方式
    • 返回值类型是靠别名的,例如返回Integer类型,用int
    • 6.1 selectList()返回值为 List

一.项目中命名规范

常用名 作用/最常用名
1. 项目名: 没有要求,不要中文
2. 包: com.liwei 公司域名倒写
3. 数据访问层 dao,persist mapper
4. 实体 entity,model,bean,javabean pojo
5. 业务逻辑 biz service
6. 控制器 controller,action,web servlet
7. 过滤器 filter
8. 异常 exception
9. 监听器 listener
10. 注释
10.1 注释 /** */ 类上和方法上使用文档注释
10.2 注释 /* */ 在方法里面使用
11 大驼峰
12 方法,属性 小驼峰

二.框架是什么?

  1. 框架:软件的半成品.未解决问题制定的一套约束,在提供功能基础
    上进行扩充.
  2. 框架中一些不能被封装的代码(变量),需要使用框架者新建一个
    xml 文件,在文件中添加变量内容.
    2.1 需要建立特定位置和特定名称的配置文件.
    2.2 需要使用 xml 解析技术和反射技术.
  3. 常用概念
    3.1 类库:提供的类没有封装一定逻辑.
    举例:类库就是名言警句,写作文时引入名言警句
    3.2 框架:区别与类库,里面有一些约束.
    举例:框架是填空题

三.Mybatis简介

  1. Mybatis 开源免费框架.原名叫 iBatis,2010 在 google code,2013 年迁移到 github
  2. 作用: 数据访问层框架.
    2.1 底层是对 JDBC 的封装.
  3. mybatis 优点之一:
    3.1 使用 mybatis 时不需要编写实现类,只需要写需要执行的 sql 命令

四.环境搭建基本

4.1 导入jar

4.2 在src下新建全局配置文件mybatis.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--default引用environments的id,当前所使用的的环境--><environments default="default"><!--声明可以使用的环境--><environment id="default"><!--使用原生JDBC--><transactionManager type="JDBC"></transactionManager><!--数据库连接池--><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/ssm"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments><!--加载sql文件--><mappers><mapper resource="com/wenli/mapper/FlowerMapper.xml"></mapper></mappers>
</configuration>

4.3 新建以mapper结尾的包,在包下新建:实体类名+Mapper.xml

  1. 文件作用:编写需要执行的SQL命令
  2. 被xml文件理解为类
  3. 注意:当查询时,有表列名与实体类不统一时,可以采用起别名方式
    <select id="selAll" resultType="com.wenli.pojo.Flower">
-- 实体类 与数据库 表可以不同,查询时起别名将其统一  表列名---属性名select id,name name123,price,production from flower</select>
  1. 而且,反射赋值在从mybatis3.2后直接通过属性赋值,之前从setter赋值
  2. xml文件内容(全部是查询语句)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namesapce:理解成实现类的全路径(包名+类名) -->
<mapper namespace="a.b"><!--id:方法名parameterType 定义参数类型resultType  返回值类型如果方法返回值是list,在resultType中写list的泛型,因为mybatis对JDBC封装,一行一行读取数据--><select id="selAll" resultType="com.wenli.pojo.Flower">
-- 直接通过属性赋值(从3.2后,之前从setter赋值),实体类 与数据库 表可以不同,查询时起别名将其统一  表列名---属性名
--         select id,name name123,price,production from flowerselect * from flower</select><select id="selById" resultType="int">select count(*) from flower;
--              select count(*) from flower where id = 1;</select><select id="c" resultType="com.wenli.pojo.Flower">select * from flower;</select></mapper>

4.4 简单测试(只有单独使用mybatis时使用,最后ssm整合时下面的代码不需要写),直接运行test01.java

public class test01 {public static void main(String[] args) throws IOException {//        给路径,读取InputStream is = Resources.getResourceAsStream("mybatis.xml");
//        工厂设计模式SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//        生产SqlSessionSqlSession session = factory.openSession();
//        调用方法,//        1. 返回集合List<Flower> list = session.selectList("a.b.selAll");
//        打印for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}
//        关闭流session.close();}
}

五.环境搭建详解(全局配置文件中的内容)

5.1 <transactionManager type=""></transactionManager>

  1. <transactionManager type=""></transactionManager>中type属性可取值
    1.1 JDBC :事务管理使用JDBC原生事务管理方式
    1.2 MANAGED:把事务管理转交给其他容器.原生 JDBC 事务加setAutoMapping(false);
    1.3

5.2 <dataSouce/>type属性

  1. POOLED 使用数据库连接池
  2. UNPOOLED 不实用数据库连接池,和直接使用 JDBC 一样
  3. JNDI :java 命名目录接口技术

六.三种查询方式

返回值类型是靠别名的,例如返回Integer类型,用int

6.1 selectList()返回值为 List<resultType 属性控制>

<select id="selAll" resultType="com.wenli.pojo.Flower">select * from flower</select>

适用于查询结果都需要遍历的需求

//        1. 返回集合List<Flower> list = session.selectList("a.b.selAll");
//        打印for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}

6.2 selectOne() 返回值 Object

    <select id="selById" resultType="int">select count(*) from flower;</select>

适用于返回结果只是变量或一行数据时

 //        2. 返回数字int o = session.selectOne("a.b.selById");System.out.println(o);

6.3 selectMap() 返回值 Map

    <select id="c" resultType="com.wenli.pojo.Flower">select * from flower;</select>
  1. 适用于需要在查询结果中通过某列的值取到这行数据的需求
  2. =Map<key,resultType 控制>
//      3.   把数据库的某个列的值当做 map的key-------用来去重,没啥用
//        做个通讯录,Map<Object, Object> map = session.selectMap("a.b.c", "name");Set<Map.Entry<Object, Object>> entries = map.entrySet();for (Map.Entry<Object, Object> entry : entries) {System.out.println(entry);}

6.4 结果

Flower{id=1, name='矮牵牛', price=2.5, production='南美阿根廷'}
Flower{id=2, name='白日星', price=5.0, production='墨西哥'}
Flower{id=3, name='半枝莲', price=4.3, production='巴西'}
Flower{id=4, name='ss', price=10.0, production='诶IE飞机地方'}
Flower{id=5, name='凄凄切切群', price=100.0, production='二维翁翁·'}
Flower{id=6, name='凄凄切切群', price=100.0, production='二维翁翁·'}
Flower{id=7, name='凄凄切切群', price=100.0, production='二维翁翁·'}
Flower{id=8, name='ss吾问无为谓', price=10.0, production='诶IE飞机地方'}
Flower{id=9, name='喂喂喂翁', price=10.0, production='2222'}
Flower{id=10, name='喂喂喂翁', price=10.0, production='2222'}
Flower{id=11, name='11', price=11.0, production='111'}
Flower{id=12, name='11', price=11.0, production='111'}
Flower{id=13, name='77', price=77.0, production='77'}
Flower{id=14, name='ss', price=10.0, production='诶IE飞机地方'}
Flower{id=15, name='ss', price=10.0, production='诶IE飞机地方'}
Flower{id=16, name='ss', price=10.0, production='诶IE飞机地方'}
Flower{id=17, name='ss', price=10.0, production='诶IE飞机地方'}
Flower{id=18, name='凄凄切切群', price=10.0, production='诶IE飞机地方'}
Flower{id=19, name='凄凄切切群', price=10.0, production='诶IE飞机地方'}
Flower{id=20, name='1', price=1.0, production='1'}
Flower{id=21, name='2', price=2.0, production='2'}
Flower{id=22, name='2', price=2.0, production='2'}
Flower{id=23, name='2', price=2.0, production='2'}
Flower{id=24, name='3', price=3.0, production='3'}
Flower{id=25, name='ss', price=10.0, production=''}
Flower{id=26, name='ss', price=10.0, production=''}26ss=Flower{id=26, name='ss', price=10.0, production=''}
ss吾问无为谓=Flower{id=8, name='ss吾问无为谓', price=10.0, production='诶IE飞机地方'}
11=Flower{id=12, name='11', price=11.0, production='111'}
77=Flower{id=13, name='77', price=77.0, production='77'}
1=Flower{id=20, name='1', price=1.0, production='1'}
2=Flower{id=23, name='2', price=2.0, production='2'}
3=Flower{id=24, name='3', price=3.0, production='3'}
矮牵牛=Flower{id=1, name='矮牵牛', price=2.5, production='南美阿根廷'}
喂喂喂翁=Flower{id=10, name='喂喂喂翁', price=10.0, production='2222'}
凄凄切切群=Flower{id=19, name='凄凄切切群', price=10.0, production='诶IE飞机地方'}
半枝莲=Flower{id=3, name='半枝莲', price=4.3, production='巴西'}
白日星=Flower{id=2, name='白日星', price=5.0, production='墨西哥'}

6.5 实体类Flower.java

package com.wenli.pojo;
public class Flower {private int id;private String name;private double price;private String production;public Flower() {}public Flower(int id, String name, double price, String production) {this.id = id;this.name = name;this.price = price;this.production = production;}public Flower(String name, double price, String production) {this.name = name;this.price = price;this.production = production;}@Overridepublic String toString() {return "Flower{" +"id=" + id +", name='" + name + '\'' +", price=" + price +", production='" + production + '\'' +'}';}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public String getProduction() {return production;}public void setProduction(String production) {this.production = production;}
}

MyBatis(一)基础及查询相关推荐

  1. mybatis入门基础(二)----原始dao的开发和mapper代理开发

    阅读目录 一:原始dao开发方法 二:mapper代理方法(只需要mapper接口,相当于dao接口) 承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisS ...

  2. ❤️《Mybatis从基础到高级》(建议收藏)❤️

    ❤️Mybatis ❤️三连+关注!!! 1.简介 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了[g ...

  3. Mybatis plus基础入门

    文章目录 1.MyBatisPlus入门案例 ✈创建数据库及表 ✈步骤一:创建SpringBoot工程 ✈步骤二:pom.xml中补全依赖 ✈步骤三:添加MP的相关配置信息 ✈步骤四:创建User实体 ...

  4. MyBatis千万级数据查询解决方案,避免OOM

    流式查询指的是查询成功后不是返回一个集合而是返回一个迭代器,应用每次从迭代器取一条查询结果.流式查询的好处是能够降低内存使用. 如果没有流式查询,我们想要从数据库取 1000 万条记录而又没有足够的内 ...

  5. 源码解读Mybatis List列表In查询实现的注意事项

    http://www.blogjava.net/xmatthew/archive/2011/08/31/355879.html 在SQL开发过程中,动态构建In集合条件查询是比较常见的用法,在Myba ...

  6. SQL 基础-- 子查询

    --========================= --SQL 基础--> 子查询 --========================= /* 一.子查询 子查询就是位于SELECT.UP ...

  7. Mybatis系列(三):Mybatis实现关联表查询

    原文链接:http://www.cnblogs.com/xdp-gacl/p/4264440.html 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 ...

  8. SQL基础--层次化查询(START BY ... CONNECT BY PRIOR)

    为什么80%的码农都做不了架构师?>>>    --====================================================== --SQL基础--& ...

  9. 小米手机系统服务组件是干什么的_怎么查看小米手机MIUI系统的基本功能-小米手机MIUI系统基础功能查询方法讲解...

    小米手机是国产品牌手机中口碑较好的手机之一,受到大家的喜爱,配置功能丰富,价格实惠.亲们或许都不知道怎么查看小米手机MIUI系统的基本功能,小编很高兴为大家解决这个问题,接下来就为大家奉上小米手机MI ...

最新文章

  1. destoon实现调用热门关键字的方法
  2. 专业写博一天------ArrayList 线程安全
  3. 不是《归去来》是《难念的经》
  4. gateway sentinel 熔断 不起作用_《一起学sentinel》一
  5. fft快速傅利叶变的C实现
  6. Error: org.apache.hadoop.hdfs.BlockMissingException: Could not obtain block: BP-965200530-172.21.
  7. java class文件常量池_JAVA程序员谈谈class文件结构中的常量池-class文件
  8. Scala 语法基础
  9. python自定义模块的使用_python自定义模块使用说明
  10. inputstream是否一定要close_新车是否需要底盘保养?一定要喷底盘防锈漆吗?
  11. c++ protected_java基础之——访问修饰符(private/default/protected/public)
  12. php过滤style,PHP过滤各种html标签
  13. Excel学习2:折线图的渐变
  14. UVP Phase运行机制的补充-Phase 的raise和drop机制
  15. 计算机网络(3)——三种常见的数据交换技术
  16. 【Godot 插件】获取编辑器上所有的节点
  17. win10 添加打印机
  18. 面向对象(继承,多态,单态,魔术方法)
  19. Windows server 2008r2系统基本安全加固方案
  20. Python数据分析报告:北京市每月PM2.5的值和分析影响PM2.5

热门文章

  1. 我的LaTeX入门--h
  2. 使用dlib库进行人脸识别
  3. 「津津乐道播客」#387 津津有味:挑食不是病,想治挑食才是病
  4. 牛客网----分糖果、分子弹
  5. Latex自定义序号
  6. 总结:Linux安装Java并运行jar遇到的错误
  7. 数字滤波器与数据微分
  8. 。。。。。。。。。。
  9. 文件夹加密 隐私加密 就用文件夹加密超级大师
  10. Ponds(拓扑 + 优先队列)