Mybatis知识点总结第一天

第一天

一、 高级软件介绍(部分)

JDK 7 Eclipse mars2 MySql Navicat

二、 MySql数据库建库建表语句强调

(1)创建数据库并指定编码:
Create database 数据库名 default character set utf8
(2)创建表:
Create table 表名(列名 类型 约束 auto_increment comment ‘备注’);

三、 命名规范强调

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

四、基于 MVC 开发模式完成单表查询和新增

  1. M: Model 模型,实体类和业务和 dao
  2. V: view 视图. JSP
  3. C:Controller 控制器,servlet
    作用:视图和逻辑分离
  4. MVC 适用场景:大型项目开发.
    图示例: 先设计数据库;再写实体类;持久层;业务逻辑;控制器;视图

五、 框架是什么

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

六、 MyBatis 简介

  1. Mybatis 开源免费框架.原名叫 iBatis,2010 在 google code,2013 年迁移到 github . MyBatis灵活,可以动态生成映射关系的框架,那么MyBatis确实是一个最好的选择。缺陷是需要提供映射规则和SQL,所以它的开发工作量比Hibernate略大一些。
  2. 作用: 数据访问层框架.底层是对 JDBC 的封装. 半自动化ORM框架
  3. mybatis 优点之一: 使用 mybatis 时不需要编写实现类,只需要写需要执行的 sql 命令

(1)ORM模型
什么是ORM模型?简单说,ORM模型就是数据库的表和简单Java对象(Plain Ordinary Java Object,简称 POJO)的映射关系模型,它主要解决的就是数据库数据和POJO对象的相互映射。我们通过这层映射关系就可以简单迅速地把数据库表的数据转化为POJO,以便程序员更加容易理解和应用Java程序。

(2)MyBatis构成
a) SqlSessionFactoryBuilder(构造器):它会根据配置信息或者代码来生成SqlSessionFactory(工厂接口)。
b) SqlSessionFactory:依靠工厂来生成SqlSession(会话)。SqlSessionFactory一般是一个全局单例,对应一个数据库连接池,用它来创建Sqlsession。
c) SqlSession:是一个既可以发送SQL去执行并返回结果,也可以获取Mapper的接口。相当于一个jdbc的connection对象,在一次请求事务会话后,我们会将其关闭,它可以为我们获取Mapper。
d) SQL Mapper:它是MyBatis新设计的组件,它是由一个Java接口和XML文件(或注解)构成的,需要给出对应的SQL和映射规则,它负责发送SQL去执行,并返回结果。Mapper相当于去执行一条条sql,与SqlSession同时销毁。

(3)MyBatis映射原理
我们使用的仅仅是Java接口和一个XML文件(或者注解)去实现Mapper,Java接口不是实现类,对于Java语言不熟悉的读者肯定会十分疑惑,一个没有实现类的接口怎么能够运行呢?
其实它需要运用到Java语言的动态代理去实现,而实现Java语言的动态代理的方式有多种。这里我们还是集中于它的用法,所以可以这样理解:我们会在MyBatis上下文中描述这个接口,而MyBatis会为这个接口生成代理类对象,代理对象会根据“接口全路径+方法名”去匹配,找到对应的XML文件(或注解)去完成它所需要的任务,返回我们需要的结果。

七、 MyBatis 搭建流程

1. 导入 jar(截图没法显示)
2. 在 src 下新建全局配置文件(数据源 编写 JDBC 四个变量)
a) 没有名称和地址要求
b) 在全局配置文件中引入 DTD 或 schema
c) 如果导入 dtd 后没有提示
Window–> preference --> XML --> XMl catalog --> add 按钮
3. 全局配置文件内容

<?xml version="1.0" encoding="UTF-8"?>
<!-- 配置环境   数据库连接池技术    注解和路径的讲解 -->
<!-- 在全局配置文件中引入DTD或schema  不导这东西没有提示 -->
<!-- dtd:xml文件语法检查器 ,限制配置文件里写什么。将xml文件放在 src下生成的classes文件夹中,通过classpath.找到相应文件夹classes -->
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
  <configuration>
   <!-- 如果提示里面没有东西则在window->preferences->xml catalog->add -->
   <!-- default 引入environment的id=default ,当前所使用的环境 -->
   <environments  default="default">

   <!-- 连不同数据库使用不同的环境  声明所使用的环境 -->
   <environment  id="default">

   <!-- 事务管理 jdbc  事物默认为自动提交true ,为保证数据一致性,要保证事务操作一起提交一起回滚,设置 conn.setAutoCommit(false)不自动提交,在try中最后一句设定为conn.commit()一起提交,在catch中设定conn.rollback()一起回滚-->
   <!-- mybatis封装的jdbc所以 使用原生JDBC事事务-->
   <transactionManager type="JDBC"></transactionManager>
   <!-- 使用数据库连接池技术 在内存区形成多个连接对象写入 driver url username password -->
   <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="710048"/>
   </dataSource>
   </environment>
   </environments>
   <mappers>
   <!—告诉Mybatis去哪找映射文件 加载类 用.   目录结构文件用/  -->
   <mapper resource="com/bear/mapper/FlowerMapper.xml"/>
   </mappers>
  </configuration>

全局配置文件中内容详解

<transactionManager/> type 属性可取值 

a) JDBC,事务管理使用 JDBC 原生事务管理方式,这里简单使用Java的JDBC的提交和回滚设置
b) MANAGED把事务管理转交给其他容器.原生JDBC事务setAutoMapping(false);

<dataSouce/>type 属性 

a) POOLED 使用数据库连接池
b) UNPOOLED 不使用数据库连接池,和直接使用 JDBC 一样
c) JNDI :java 命名目录接口技术.
JNDI原理:
JNDI是Java 命名和目录接口(Java Naming and Directory Interface,JNDI)的简称. JNDI的目的就是对命名服务(Naming Service)与目录服务(Directory)中的资源进行查找或者管理。
命名服务的核心就在于映射,讲一个值映射成另一个值。
目录服务,它其实是命名服务的一种自然扩展,两者之间的关键差别是目录服务中对象可以有属性,而命名服务中对象没有属性。我们手机中的电话簿就是一个典型的目录服务。它将一个电话号码映射成了拥有这个号码的人,但是人这个对象不仅仅会有姓名。
从一开始就一直是 Java 2平台企业版的核心技术之一。在JMS、Mail、JDBC、EJB等技术中,就大量应用的这种技术。JNDI可访问的现有的目录及服务有:DNS、XNam 、Novell目录服务、LDAP(Lightweight Directory Access Protocol 轻型目录访问协议)、 CORBA对象服务、文件系统、Windows XP/2000/NT/Me/9x的注册表、RMI、DSML v1&v2、NIS。
JNDI架构提供了一组标准命名系统的API应用编程接口(application programming interface,API),这些API在JDK1.3之前是作为一个单独的扩展包。jndi.jar(通过这个地址下载),这个基础API构建在与SPI服务提供者接口(service provider interface,SPI)之上。
这个API提供如下五个包
javax.naming; javax.naming.directory; javax.naming.event;
javax.naming.ldap; javax.naming.spi
a) LDAP(Lightweight Directory Access Protocol)服务提供者
b) CORBA COS(Common Object Request Broker Architecture Common Object Services)命名服务提供者
c) RMI(Java Remote Method Invocation)注册服务提供者
d) DNS(Domain Name System)服务提供者.
e) FSSP(File System Service Provider)文件系统服务提供者
JNDI做法:
首先,在在J2EE容器中配置JNDI参数,定义一个数据源,也就是JDBC引用参数,给这个数据源设置一个名称;然后在程序中,通过数据源名称引用数据源从而访问后台数据库。
类似于在一个中心注册一个东西,以后要用的时候,只需要根据名字去注册中心查找,注册中心返回你要的东西。web程序,我们可以将一些东西(比如数据库相关的)交给服务器软件去配置和管理(有全局配置和单个web程序的配置),在程序代码中只要通过名称查找就能得到我们注册的东西,而且如果注册的东西有变,比如更换了数据库,我们只需要修改注册信息,名称不改,因此代码也不需要修改。
具体操作如下(以JBoss为例):

(1)配置数据源

<  <?xml version="1.0" encoding="UTF-8"?>
<  <datasources>
<  <local-tx-datasource>
   <jndi-name>MySqlDS</jndi-name>
   <connection-url>jdbc:mysql://localhost:3306/lw</connection-url>
   <driver-class>com.mysql.jdbc.Driver</driver-class>
   <user-name>root</user-name>
   <password>rootpassword</password>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
   <metadata>
   <type-mapping>mySQL</type-mapping>
   </metadata>
<  </local-tx-datasource>
<  </datasources>

(2) 在程序中引用数据源:

Connection conn=null; 
try { 
	Context ctx = new InitialContext(); 
//   从配置文件中查找jndi的name
	Object datasourceRef = ctx.lookup("java:MySqlDS"); 
	//引用数据源 
	DataSource ds = (Datasource) datasourceRef; 
	conn = ds.getConnection(); 
	...... 
	c.close(); 
} catch(Exception e) { 
	e.printStackTrace(); 
} finally { 
if(conn!=null) { 
try { 
conn.close(); 
} catch(SQLException e) { } 
} 
}

4. 新建以mapper结尾的包,在包下新建xml文件:实体类名+Mapper.xml
a) 文件作用:编写需要执行的 SQL 命令
b) 把 xml 文件理解成实现类.
c) xml 文件内容

<?xml version="1.0" encoding="UTF-8"?>
<!-- 把xml理解为实现类  代替了Dao数据访问层   进行sql操作,编写需要执行的sql语句 -->
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  <!-- namespace:理解成实现类的全路径,(包名+类名) -->
  <mapper namespace="com.bear.mapper.FlowerMapper">
  <!-- id: 方法名;parameterType:定义参数类型;resultType:返回值类型
如果方法的返回值是list,在resultType中写list的泛型,因为mybatis封装的是jdbc,一行一行读取数据;框架中xml文件,自己写的类一定是全路径,读取xml文件使用的是反射机制 -->
   <select id="selAll" resultType="com.bear.pojo.Flower">
    select * from flower
   </select>
  </mapper>

5. 测试结果
(只有在单独使用 mybatis 时使用,最后 ssm 整合时下面代码不需要编写.)

InputStream is = Resources.getResourceAsStream("myabtis.xml"); 
//使用工厂设计模式 
SqlSessionFactory factory = new  SqlSessionFactoryBuilder().build(is); 
//创建 SqlSession 
SqlSession session=factory.openSession(); 
List<Flower> list = session.selectList("a.b.selAll"); 
for (Flower flower : list) { 
System.out.println(flower.toString()); 
}
session.close();
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值