Mybatis

Mybits

corejava  ooad   xml   oracle

jdbc--mybatisjdbc封装,框架)

web项目中的客户端技术:html/css/js/jquery

web项目中的服务端技术:servlet/jsp

mybatis

spring/springmvc

框架:封装了jdbc

jdbc:和数据库进行交互(增删改查)

6大步骤:

1.注册驱动

2.获取连接

3.获取statement对象

4.执行sql语句

5.如果有结果集,处理之

6.关闭资源。

jdbc的封装:

ConnectionFactory

Connection:步骤固定的

Statement(sql)

PreparedStatement(sql,obj)

 

students(stud_id,name,email,dob)

studId,name,email,dob

//创建一个对象

Student s = new Student(1,"",,,);

//工具类,调用save(对象),对象保存到对应的数据表中去

ORMUtil util = new ORMUtil();

util.save(s);

 

信息:insert into tableName(colNames) values(??s);

1.哪种类型-- 对应哪张表

2.属性    -- 字段

配置xml

 

jdbc--封装--ORM---ORM框架(hibernate,mybatis)

简化,

hibernatesql语句自动生成,笨重)

mybatissql语句由自己编写,灵活)轻量级

ORM:对象关系映射Object relational mapping

面对对象的  关系型数据库

程序中的对象自动持久化到关系型数据库中

通过映射一个持久化类--一张关系型数据库中的表

类中的每个属性--表中的每个字段

类的实例--表中的一条/行 记录

持久化层:数据库交互相关

Mapper:映射器

 

Mybatis

1. Mybatis的入门/概述

2.Mybatis的配置文件的配置和使用

3. Mybatis的映射文件的配置和使用/映射接口

4. 单表中的配置和使用:增删改查

5. 多表的配置和使用   1:1  1:n n:m

6. Mybatis的动态sql的配置和使用

配置文件:类型别名

Mybatis:

1. jar包(mybatis的核心功能)

2. 配置文件(给类型别名,数据库连接信息等,映射文件)mybatis-config.xml

3. 映射文件:列出来要执行的所有SQL语句的列表,标签中的id属性  

StduentMapper.xml   :Student

StudentMapper.java{

void insertStudent(Student s);

}

<mapper namespace="映射接口的全类名">

<insert id="映射接口中的方法名" parameterType="Stuent的全类名">

insert into students(stud_id,name)

values(#{studId},#{name});

</insert>

     </mapper>

4. 配置文件:要执行的各个方法,方法名对应映射文件标签中的id属性

 

 

项目中引入mybatis的核心包以及可选的依赖包

必须的包  mybatis-3.3.0.jar    ojdbc14.jar

可选的包  junit-4.7.jar        log4j-1.2.17.jar

 

 

mybatis的功能insert:

1.jar(mybatis的核心功能)

2.配置文件(数据库连接的4个信息)

mybatis-config.xml

----映射文件

3.映射文件:mapper

(列出来要执行的所有sql语句:标签)

StduentMapper.xml   :Student

StudentMapper.java{

void insertStudent(Student s);

}

<mapper namespace="映射接口的全类名">

<insert id="映射接口中的方法名" parameterType="Stuent的全类名">

insert into students(stu_id,name)

values(#{stuId},#{name});

</insert>

</mapper>

4.映射接口,持久化类

5.测试:SqlSession

  1.读取mybatis-config.xml

  2.创建sqlSessionFactory工厂对象

  3.获取SqlSession对象

  4.动态获取映射接口的实现类对象

  StudentMapper mapper =sqlSession.getMapper(StudentMapper.class);

  5.执行实现类(接口(映射文件))中的方法

  mapper.insertStudent(new Student(,,));

  6.提交事务(默认不提交,需手动提交)

  sqlSession.commit;

  程序中的对象  持久化 保存到数据库

数据库   查到的对象--应该创建初始化  对象

attribute

property

  Student{

private Integer studId;//attribute

get/setter ;//property

}

Oracle中的列名不区分大小写

 

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

 

DOCTYPE:声明

mapper:配置映射文件的根元素/根标签,名称为mapper

PUBLIC:公共的   SYSTEM:本地的,系统的

"-//mybatis.org//DTD Mapper 3.0//EN":公共资源标识符 (组织,文件类型,版本,语言)   

-表示未通过ISO(国际标准化组织)的校验;+表示通过了ISO的校验

 

mybatis的配置详解

 

<environments default="数据库1">

<environment id="数据库1">

1.连接数据库的4个信息

driver url username password

dataSource--property

 --type:数据源连接池:分配,管理,释放

2.事务管理的方式

transactionManager

</environment>

<environment id="数据库2">

1.连接数据库的4个信息

2.事务管理的方式

</environment>

<environment id="数据库3">

1.连接数据库的4个信息

2.事务管理的方式

</environment>

<environment id="数据库4">

1.连接数据库的4个信息

2.事务管理的方式

</environment>

</environments>

 

//默认的环境 default

SqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

 

//统计明细的环境 cart

SqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream, "shoppingcart");

 

//统计报表的环境 report

SqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream, "reports");

 

The content of element type "configuration" must match

 "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,plugins?,environments?,databaseIdProvider?,mappers?)".

 

-----------------------

mybatis测试:增删改查       java,sql

 

配置文件:mybatis读取配置文件,生成SqlSessionFactory工厂对象---SqlSession

environments:数据库连接

transactionManager:事务管理方式(JDBC)

dataSource:数据源(连接池)

properties:声明变量,读取properties文件

typeAliases:类型起别名:映射文件中

 参数类型:para..Type 返回数据类型:res..Type

typeHandlers:自定义的类型处理器

生成sql:ps.set???(parameter???)

返回结果集:???Type (一个字段的值)

settings元素: 全局参数设置

mappers元素: SQL映射,指定映射文件路径

 

映射文件:insert delete update

 select:结果集映射(单表,多表(1:1,1:n,n:n)),resultMap

 

---------------------------------------------------------------------------------------------

mybatis:

1.概述(持久层/dao/数据访问层框架),jdbc

程序中的对象     持久化    关系型数据库

数据库中的数据  查询封装  程序中的对象

--与数据库交互相关。

2.配置文件--SqlSessionFactory

3.映射文件/接口

4.SqlSessionFactory---SqlSession--映射接口的实现类对象

 

映射文件详解:

insert:添加

delete

update

select:多种查询

resultMap:结果集的封装

--单表的配置操作,多表(1:1,1:n,n:m)的配置操作

student,PhoneNumber   students

--多表的配置和操作

 

 

数据库中的表:1:1,1:n,n:n

 

1:1

select

3中结果集封装

1.resultMap的基本映射

<resulyMap type="Student">

<result property="address.state" column="state">

</resulyMap>

2.嵌套结果

<resulyMap>

...

对象的关联

<association keyProperty="address" resultMap="addressResult">

...

</resulyMap>

<resulyMap id="addressResult">

.....

</resulyMap>

3.嵌套查询

<resulyMap type="Student">

...

对象的关联

<association keyProperty="address" column="add_id" select="findAddressById">

...

</resulyMap>

<select id="findAddressById" parameterType="int"

resultMap/Type="Address">

 

</select>

 

增删改:先后顺序

1:n

 

 

------------------

 

<insert para="Student">

<selectKey keyProperty="studId" result="int" order="BEFORE"> :ID

</selectKey>

insert into()  values(#{addrss.})

</insert>

findStudentById   resultMap--student

findAllStudents   resultMap--List<student>

 

<resultMap type="Student">

<result property="addrss." column="">

<assioction property="address">

<assioction property="address" resultMap="">

<assioction property="address" column="" select="">

<collection property="courses">

<collection property="courses" resultMap="">

<collection property="courses" column="" select="">

</resultMap>

 

 

 

 

n:m

    STUD_ID NAME    EMAIL           DOB            PHONE

---------- ------- --------------- -------------- ---------------

         4 ls      ls@briup.com    01-12-17     100-101-102

map:HashMap

  key:字段名   value:字段值

 

   STUD_ID NAME    EMAIL           DOB            PHONE

---------- ------- --------------- -------------- -----------

         4 ls      ls@briup.com    01-12-17     100-101-102

         5 tom5    5@briup.com     04-12-17     100-110-101

         3 tom3    333@briup.com   01-12-17

         6 tom5    5@briup.com     04-12-17     100-110-101

         7 tom5    5@briup.com     04-12-17     100-110-101

         8 tom5    5@briup.com     04-12-17     100-110-101

 

List{

map{

key:第一条数据的第1个列,v:

key:第一条数据的第2个列,v:

...

}

map2{

}

}

 

:association是关联的意思

元素<association>被用来导入“有一个”(has-one)类型的关联。在上述的例子中,我们使用了<association>元素引用了另外的在同一个XML文件中定义的<resultMap>

同时我们也可以使用<association> 定义内联的resultMap

 

 

注意:在一对多关系中,数据库建表的时候外键一定是在多的那一方建立.

<collection>元素被用来将多行课程结果映射成一个课程Course对象的一个集合。和一对一映射一样,我们可以使用【嵌套结果ResultMap】和【嵌套查询Select】语句两种方式映射实现一对多映射。

不论是一对一还是一对多还是多对多,都不能在mybatis中进行级联保存、更新、删除,我们需要使用sql语句控制每一步操作。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值