框架

将重复的,繁琐的代码实现封装,让程序员将更多的精力放在业务的理解和分析上。

框架的作用

提高开发效率

隐藏细节

三大框架SSH  -->   SSM

1)        表述层:   用户交互   servlet        SpringMVC/Struts2

2)        业务逻辑层:业务处理  javabean/ejb   Spring

3)        数据持久层:数据库交互 jdbc          Mybatis/Hibernate

传统JDBC的不足

1)        四个参数的使用有硬编码(配置文件)

2)        statement的使用中有硬编码

3)        频繁打开和关闭连接(数据源(连接池))

Mybatis框架

MyBatis 是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。

Mybatis是一个优秀的ORM框架。

ORM:Object Relationship Mapping(对象关系映射)

Mybatis不需要开发人员过多关注数据库的连接关闭,stmt对象的创建;着重关注sql。

关注映射: 输入参数  和 输出结果。

1) mybatis下载

apache ibatis前身。

google code  à Mybatis

github

2) https://github.com/mybatis/mybatis-3/releases

Mybatis的开发

1)配置文件   (xml)

  a)xfg.xml:核心配置文件(全局配置文件)

     连接信息的配置(连接池),事务管理

  b) mapper.xml:映射文件

2) SqlSessionFactory:session工厂

3)SqlSession:面向程序员的接口(增删改查)

4)搭建

a) 创建java项目,导入jar

b)配置核心配置文件(xml)

核心配置文件:

<!-- DTD:定义/约束 -->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- Mybtais核心配置文件:任何的地方都可以获取 -->
<configuration>
<!-- environments:环境集合(mysql/oracle)
default:默认(环境的id)
-->
<environments default="development">
<!-- environment:代表一个环境
id:唯一标识
transactionManager:事务管理器(管理事务)
type:jdbc
dataSource:数据源(连接池)
连接池:当项目启动,向数据库请求初始化连接数条连接放置在连接池中管理;
当连接的请求多于初始化连接数,此时会根据步长来增加连接数(创建连接);
最大不超过最大连接数,人就不够时需要根据超时时间进行等待;
当连接的请求远低于当前的连接数,此时会根据最小连接数释放相应的连接。
好处:减少了连接的频繁关闭。
缺点:连接需要占用资源
必须配置四个参数 driver url username password
流行的数据源:DBCP C3P0 DROID type="POOLED"("池")
-->
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///bd1711"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment> </environments> <!-- 映射器 -->
<mappers>
<mapper resource="BookMapper.xml"/>
</mappers>
</configuration>

mapper映射文件

<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--
mapper:描述对象和记录之间的映射关系
namespace:隔离sql,在mapper代理时由特殊用法
-->
<mapper namespace="com.lee"> <!-- 查询的映射: (Statement对象)
id:该标签的唯一标识
resultType:结果类型 (输出结果的映射)
#{}:代表占位符
parameterType:输入参数类型(输入参数的映射)(可省略)
-->
<select id="selectBook" resultType="entity.Book">
select * from book where bid = #{bid}
</select> </mapper>

测试代码

//加载配置文件为流
InputStream is = Resources.getResourceAsStream("Mybatis.xml");
//创建SqlSessionFactory(加载)
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(is);
//核心接口(发送增删改查语句)
SqlSession session = ssf.openSession(); Book book = session.selectOne("com.lee.selectBook", 1);
System.out.println(book); //释放资源
session.close();

配置详解

核心配置文件

    properties
<!-- 1.配置(动态替换)
1.1 java的属性文件外部引入 resource="jdbc.properties"
1.2 property标签中配置 当两者冲突时,最终使用java的属性文件的配置。
-->
<properties resource="jdbc.properties">
<!-- <property name="driver" value="com.mysql.jdbc.Driver"/> -->
</properties>
 settings
<!--2.settings 调整:影响整个Mybatis的行为 -->
<settings>
<!-- 缓存总开关: 默认true,开启缓存 / false关闭缓存 -->
<setting name="cacheEnabled" value="true"/>
<!-- 延迟加载总开关: 默认false,默认是立即加载 / true延迟加载 -->
<setting name="lazyLoadingEnabled" value="true"/>
</settings>
 typealiases
<!-- 3.别名
typeAlias:单一类型起别名
type:需要设置别名的全限定名称
alias:别名
package:包
默认别名就是类型(首字母大小写均可)
-->
<typeAliases>
<!-- <typeAlias type="entity.Book" alias="book"/> -->
<package name="entity"/>
</typeAliases>
 typeHandlers:
类型处理器
 objectFactory:对象工厂
 enviroment
<environment id="development">
<!-- 事务管理器:
JDBC: 和JDBC使用同样的提交和回滚策略
MANAGED:依赖于应用服务器上下文(context)的配置(必须在服务器上运行)
-->
<transactionManager type="JDBC"/>
<!-- 数据源: c3p0,droid
UNPOOLED:请求时连接,完毕时关闭
POOLED:连接池
JNDI:依赖于应用服务器(在上下文配置数据源,然后在java获取上下文的引用从而获取数据源)
-->
<dataSource type="POOLED">
<property name="driver" value="${db.driver}"/>
<property name="url" value="${db.url}"/>
<property name="username" value="${db.user}"/>
<property name="password" value="${db.pwd}"/>
</dataSource>
</environment>
 mappers
<!-- 映射器 :作用 寻找映射文件,sql-->
<mappers>
<!-- 1.相对于src映射文件的相对路径 -->
<mapper resource="BookMapper.xml"/>
<!-- 2.url:全路径 -->
<!-- 3.class:使用mapper接口的class -->
<!-- 4.package:注册整个包下所有的文件(mapper代理开发) -->
</mappers>

映射文件

<!-- 1.使用二级缓存  -->
<cache></cache>
<!-- 2.引用其他命名空间缓存 -->
<cache-ref namespace=""/> <!-- 3.实现复杂的类型封装 -->
<resultMap type="" id=""></resultMap> <!-- 4.可被重用的语句块 -->
<sql id="bookCols">
bid,bname,author,price
</sql> 查询: select (查询一个,查询所有,模糊查询,分页查询)
<!-- 模糊查询 :缺陷 有sql注入的风险 / 但是使用不同字段作排序时必须使用 -->
<select id="selectLike" resultType="book">
select * from book where bname like '%${value}%'
</select> <!-- 分页查询
1.编写类
2.map
3.rowbounds
-->
<select id="selectByPage" resultType="book" parameterType="map">
select * from book limit #{startRow},#{length}
</select> <select id="selectByPage2" resultType="book">
select * from book
</select> 增删改:insert update delete
主键返回
<!-- 插入
主键返回(用于建立多表之间的关系)
-->
<insert id="insertBook" parameterType="book" useGeneratedKeys="true" keyProperty="bid">
insert into book(bname,author,price) values(#{bname},#{author},#{price})
</insert> <insert id="insertBook2" parameterType="book">
<selectKey keyProperty="bid" order="AFTER" resultType="int">
<!-- select LAST_INSERT_ID() -->
<!-- select SEQ_BOOK.nextval from dual -->
</selectKey>
insert into book(bname,author,price) values(#{bname},#{author},#{price})
</insert>

Eclipse导入本地dtd约束

Day1 Mybatis初识(一)的更多相关文章

  1. 小白的Python之路 day1 模块初识

    模块初识 Python的强大之处在于他有非常丰富和强大的标准库和第三方库,几乎你想实现的任何功能都有相应的Python库支持,以后的课程中会深入讲解常用到的各种库,现在,我们先来象征性的学2个简单的. ...

  2. Python之旅Day1 数据类型初识(数字|字符串|列表|数据运算) 编码 表达式(if...else|for|while)

    初识PYTHON Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum(吉多·范罗苏姆)于 ...

  3. mybatis初识

    mybatis采用弱连接,在一定程度上集中管理了sql的语句编写,又实现了自动映射bean. 此处以最基础的mybatis连接为例: 引入jar包: mybatis-3.4.5.jar ojdbc-6 ...

  4. Day1 Spring初识(一)

    在网上看到一篇文章,感觉写得挺不错的,转载一下,本文转载自:http://www.cnblogs.com/xdp-gacl/p/3707631.html和http://www.cnblogs.com/ ...

  5. Day2 Mybatis初识(二)

    mapper接口开发 传统dao的开发问题(ibatis) 方法调用:字符串易错,硬编码 mapper代理开发 a) 编写全局配置 b) 编写接口(自动根据接口和映射文件创建实现类) c) 编写映射文 ...

  6. MyBatis初识(通过小实例清晰认识MyBatis)

    1.MyBatis框架: MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可 ...

  7. day1笔记 初识python,paython基础

    一.计算机,操作系统 软件发送指令给操作系统,操作系统再把指令发送给  内存,cpu,硬盘等 二.Python的历史. Python2: 1.臃肿,源码的重复量很多.2.语法不清晰,掺杂着c,++,P ...

  8. Python. Day1. 之初识 变量数据类型

    稍后添加 一  介绍 二  变量

  9. Day-1:初识开发板与基础知识

    买的这款51,ARM,AVR三合一的单片机,也不知道后面具体使用会不会有问题,先玩玩看吧. ------------------------------------------------------ ...

随机推荐

  1. MySQL3:存储过程和函数

    什么是存储过程 简单说,存储过程就是一条或多条SQL语句的集合,可视为批文件,但是起作用不仅限于批处理.本文主要讲解如何创建存储过程和存储函数以及变量的使用,如何调用.查看.修改.删除存储过程和存储函 ...

  2. Eclipse发布的Dynamical web项目在Tomacat文件夹下显示

    Eclipse设置了Tomacat后,项目信息会在你的workspace上,在Tomacat文件夹上是没有的.但是通过设置是可以在Tomacat文件夹上存在的. 配置好服务器后,先关闭服务器,然后在E ...

  3. Java8简明学习之接口默认方法

    接口中有默认方法实现Java8允许我们使用default关键字,为接口声明添加非抽象的方法实现. public interface DefaultInterFace { int plus(int x, ...

  4. BZOJ3832: [Poi2014]Rally(拓扑排序 堆)

    题意 题目链接 Sol 最直观的思路是求出删除每个点后的最长路,我们考虑这玩意儿怎么求 设\(f[i]\)表示以\(i\)结尾的最长路长度,\(g[i]\)表示以\(i\)开始的最长路长度 根据DAG ...

  5. 12:计算2的N次方

    12:计算2的N次方 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 任意给定一个正整数N(N<=100),计算2的n次方的值. 输入 输入一个正整数N ...

  6. CSS中表示大小的单位

    以下是DIVCSS5为大家总结网页中常见html单位介绍,在css+div布局中长度单位介绍篇. 其实css中的长度单位一共有8个,分别是px,em,pt,ex,pc,in,mm,cm: px:像素( ...

  7. OpenGL学习--开发环境

    1. VS2017 Professional安装 1.1. 下载 mu_visual_studio_professional_2017_x86_x64_10049787.exe 1.2. 双击开始安装 ...

  8. 从源码上分析ListView的addHeaderView和setAdapter的调用顺序

    ListView想要添加headerview的话,就要通过addHeaderView这个方法,然后想要为ListView设置数据的话,就要调用setAdapter方法了.但是,在调用addHeader ...

  9. windows 删除删除不掉的文件

    DEL /F /A /Q \\?\%1RD /S /Q \\?\%1 windows下删除删除不掉的文件: 1.打开记事本,把上面的命令复制进去 2.保存,后缀名改为.bat,ok 3.把想要删除的文 ...

  10. for循环内嵌套finally使用的意外获得

    在for循环中有continue和break,无论执行continue还是break   finally的逻辑都会执行,原本以为是不执行的 格式 for (int i = 0; i < 3; i ...