思维导图

@有对应的例子

@1接入数据库 配置文件

<?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>
<!-- 使用外部文件传入连接数据库信息 -->
<properties resource ="conf/jdbc_oracle.properties" />
<!-- 简化 在需要写路经的地方可以直接简化掉com.ljk.model这些 -->
<typeAliases>
<package name="com.ljk.model"/>
</typeAliases>
<!-- 连接数据库需要的信息 -->
<environments default="test">
<environment id="test">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.ClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.name}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments> <!--集合 映射文件-->
<mappers>
<!--找到 映射文件的地址-->
<!-- 定义的 映射文件 需要在这里把路经写出来 -->
<mapper resource="com/ljk/mapper/ClasMapper.xml"/>
<mapper resource="com/ljk/mapper/StudentMapper.xml"/>
</mappers>
</configuration>

@2 储存连入数据信息文件

jdbc.name=XXXX
jdbc.password=XXXX
jdbc.ClassName=oracle.jdbc.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:orcl

@3 获取SqlSession

/**连接数据库
* @author 墨水瓶
*/
public class Mybatis_DB {
private static SqlSessionFactory sqls;
public static SqlSessionFactory getSqlSessionFactory() {
//写连接数据库 的配置文件
String s = "conf/Mybatis_config.xml";
try {
InputStream in = Resources.getResourceAsStream(s);
sqls = new SqlSessionFactoryBuilder().build(in);
} catch (IOException e) {
e.printStackTrace();
}
return sqls;
}
/**调用这个
* @return 连接数据库
*/
public static SqlSession getSqls() {
if(sqls == null) {
sqls = getSqlSessionFactory();
}
return sqls.openSession();
}
}

@4 级联

<?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"> <mapper namespace="com.ljk.mapper.StudentMapper"> <!-- 级联 -->
<!-- 类型为获取到的数据的类型 id与底下对应的select的resultMap一样 -->
<resultMap type="Student" id="resultStudent">
          <!-- 一对一查询 返回的是一个clas类 -->>
<association property="_class" column="CLASSID"
select="com.ljk.mapper.ClassMapper.select_class"/>
</resultMap>
<!-- 值为想要连接的resultMap的id的值-->
<select id="select_student" resultMap="resultStudent">
select * from student
</select>
</mapper>

以上为1对1的查询方式

1对多需要用到collection标签

使用级联 时 model 模型类里面的 模型中需要加入对应的属性

例 :

// 在clas 模型类中 需要有一个 Student的集合
// 因为一个班级包含多个学生
private List<Student> student; //在Student 中 有一个Clas 类
// 因为 学生对应着只有一个班级
private Class _class;

@5 映射文件

<?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"> <!-- mapper name属性传入对应接口的限定名 -->
<mapper namespace="com.ljk.mapper.ClasMapper"> <!-- id 对应接口中的方法名 resultType 返回的 类型是一个Clas类-->
<select id="select_clas" resultType="Clas">
<!-- 写sql语句 -->
select * from class c where c.ids = #{ids}
</select> <!-- 传值得时候是条件查询 不传值的时候是全表查询 -->
<select id="select_dong" resultType="clas">
<!-- 动态sql 语句 -->
<!-- 可以根据传入值得不同执行不同的sql语句 -->
select * from class c
<if test="ids != null">
where c.ids = #{ids}
</if>
</select> </mapper>

动态sql语句
    1, <if>条件
        <if test="key!=null">
            拼接sql语句
        </if>
    2, <choose><when><otherwise>
        <choose>
            <when test="key=='value'">
                拼接sql语句
            </when>
            <when test="key=='value'">
                拼接sql语句
            </when>
            <otherwise>
                拼接sql语句
            </otherwise>
        </choose>
    3, <where>
        自动添加where关键字
        如果where子句第一句中有 or 或者 and 则删除第一个
    4, <trim>
        功能与<where>类似, 并且提供了前缀, 后缀的添加, 更加灵活
    5, <foreach>
        用来遍历传入的集合参数
            item(定义集合中每个对象的名字),
            collection(集合的对象的名字),
            open(定义开始的字符),
            close(定义结束的字符),
            separator(定义分割的字符)
    6, <set>
        主要用于update
        自动加上set关键字
        自动剔除最后一个 ","
    7, <sql>
        经常用于一些常用或者固定的语句, 在外面定义一个语句, 在各种标签中引入
        使用include, 相当于直接写在上面
    8, <selectKey>
        用于不支持自增长主键的数据库, 尽量避免写这个东西

xml中的 符号
    &lt;    <    小于号                                           
    &gt;    >    大于号
    &amp;    &    和
    &apos;    ’    单引号
    &quot;    "    双引号

符号也可以写到中括号中间使用
    <![CDATA[]]>

Mybatis框架 基础的更多相关文章

  1. MyBatis 框架 基础应用

    1.ORM的概念和优势 概念: 对象关系映射(Object Relational Mapping,简称ORM)是通过使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据 ...

  2. MyBatis框架基础详细开发流程

    MyBatis 项目已托管到GitHub,大家可以去GitHub查看下载!并搜索关注微信公众号 码出Offer 领取各种学习资料! 一.框架概述 1.1 什么是框架? 软件的半成品,解决了软件开发过程 ...

  3. Mybatis框架基础入门(三)--Mapper动态代理方式开发

    使用MyBatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper动态代理开发方法. 原始Dao开发方法需要程序员编写Dao接口和Dao实现类,此方式开发Dao,存在以下问题: Dao方 ...

  4. Mybatis框架基础支持层——日志模块(8)

    前言: java开发中常用的日志框架有Log4j,Log4j2,Apache Commons Log,java.util.logging,slf4j等,这些工具对外的接口不尽相同.为了统一这些工具的接 ...

  5. Mybatis框架基础支持层——反射工具箱之Reflector&ReflectorFactory(3)

    说明:Reflector是Mybatis反射工具的基础,每个Reflector对应一个类,在Reflector中封装有该类的元信息, 以及基于类信息的一系列反射应用封装API public class ...

  6. Mybatis框架基础入门(一)--简介及优势

    一.什么是Mybatis 这里借用官网的一句话介绍什么是mybatis:MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC ...

  7. Mybatis框架基础支持层——反射工具箱之MetaClass(7)

    简介:MetaClass是Mybatis对类级别的元信息的封装和处理,通过与属性工具类的结合, 实现了对复杂表达式的解析,实现了获取指定描述信息的功能 public class MetaClass { ...

  8. Mybatis框架基础支持层——反射工具箱之实体属性Property工具集(6)

    本篇主要介绍mybatis反射工具中用到的三个属性工具类:PropertyTokenizer.PropertyNamer.PropertyCopier. PropertyTokenizer: 主要用来 ...

  9. Mybatis框架基础支持层——反射工具箱之对象工厂ObjectFactory&DefaultObjectFactory(5)

    ObjectFactory官方简介:MyBatis每次创建结果集对象的新实例时,它都会使用一个对象工厂(ObjectFactory)实例来完成. 默认的对象工厂需要做的仅仅是实例化目标类,要么通过默认 ...

随机推荐

  1. java获取properties配置文件值

    package me.ilt.Blog.util; import java.io.File; import java.io.FileInputStream; import java.io.IOExce ...

  2. oracle自动备份_expdp_Linux

    [oracle@hbsjxtdb1 ~]$ crontab -e 0 4 * * * /backup/script/backupexpdp.sh [oracle@hbsjxtdb1 ~]$ cront ...

  3. Java版本APP接口安全设计

    Java版本APP接口安全设计 安全设计分为两种: 1.传输安全. 2. 会话安全. 1.传输安全 怎么保证接口经过网络传输不被抓包获取? 1.如果只是使用对称性算法,破解APP拿到加密密钥就可以解密 ...

  4. solr 的 field, copyfield ,dynamic field

    Field: Field就是一个字段,定义一个Field很简单: <field name="price" type="sfloat" indexed=&q ...

  5. APP开发选择什么框架好? 请看这里!

    背景 App的开发一般都需要满足Android和iOS两个系统环境,也就意味着一个App需要定制两套实现方案,造成开发成本和维护成本都很高.为了解决这个问题,最好的办法就是实现一套代码跨端运行,所以H ...

  6. SCOI 2010 序列操作

    题目描述 lxhgww最近收到了一个01序列,序列里面包含了n个数,这些数要么是0,要么是1,现在对于这个序列有五种变换操作和询问操作: 0 a b 把[a, b]区间内的所有数全变成0 1 a b ...

  7. Python day02 三元运算

     type  查看数据类型.2 **32  :2的32次方 .浮点的表示类型是小数,但是小数不仅仅包括浮点 浮点数用来处理实数,即带有小数的数字 三元运算:  result = 值1 if 条件 el ...

  8. Go 语言编写单元测试

    吾尝终日而思矣,不如须臾之所学也:吾尝跂而望矣,不如登高之博见也.登高而招,臂非加长也,而见者远:顺风而呼,声非加疾也,而闻者彰.假舆马者,非利足也,而致千里:假舟楫者,非能水也,而绝江河.君子生非异 ...

  9. Python核心编程笔记--动态属性

    一.动态语言与静态语言 1.1 静态语言特点: a. 在定义变量时需要指定变量的类型,根据指定的类型来确定变量所占的内存空间 b. 需要经过编译才能运行 c. 在代码编译后,运行过程不能对代码进行操作 ...

  10. 关于php变量的赋值和引用的区别

    刚开始学习php,发现有些地方和js语法不同,所以记录下来. 这篇文章是总结php中变量赋值和引用的区别. 我们知道,js中,原始类型的赋值,是将值直接复制给变量:引用类型的赋值,是将内存地址复制给变 ...