Mybatis框架 基础
思维导图
@有对应的例子
@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中的 符号
< < 小于号
> > 大于号
& & 和
' ’ 单引号
" " 双引号
符号也可以写到中括号中间使用
<![CDATA[]]>
Mybatis框架 基础的更多相关文章
- MyBatis 框架 基础应用
1.ORM的概念和优势 概念: 对象关系映射(Object Relational Mapping,简称ORM)是通过使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据 ...
- MyBatis框架基础详细开发流程
MyBatis 项目已托管到GitHub,大家可以去GitHub查看下载!并搜索关注微信公众号 码出Offer 领取各种学习资料! 一.框架概述 1.1 什么是框架? 软件的半成品,解决了软件开发过程 ...
- Mybatis框架基础入门(三)--Mapper动态代理方式开发
使用MyBatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper动态代理开发方法. 原始Dao开发方法需要程序员编写Dao接口和Dao实现类,此方式开发Dao,存在以下问题: Dao方 ...
- Mybatis框架基础支持层——日志模块(8)
前言: java开发中常用的日志框架有Log4j,Log4j2,Apache Commons Log,java.util.logging,slf4j等,这些工具对外的接口不尽相同.为了统一这些工具的接 ...
- Mybatis框架基础支持层——反射工具箱之Reflector&ReflectorFactory(3)
说明:Reflector是Mybatis反射工具的基础,每个Reflector对应一个类,在Reflector中封装有该类的元信息, 以及基于类信息的一系列反射应用封装API public class ...
- Mybatis框架基础入门(一)--简介及优势
一.什么是Mybatis 这里借用官网的一句话介绍什么是mybatis:MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC ...
- Mybatis框架基础支持层——反射工具箱之MetaClass(7)
简介:MetaClass是Mybatis对类级别的元信息的封装和处理,通过与属性工具类的结合, 实现了对复杂表达式的解析,实现了获取指定描述信息的功能 public class MetaClass { ...
- Mybatis框架基础支持层——反射工具箱之实体属性Property工具集(6)
本篇主要介绍mybatis反射工具中用到的三个属性工具类:PropertyTokenizer.PropertyNamer.PropertyCopier. PropertyTokenizer: 主要用来 ...
- Mybatis框架基础支持层——反射工具箱之对象工厂ObjectFactory&DefaultObjectFactory(5)
ObjectFactory官方简介:MyBatis每次创建结果集对象的新实例时,它都会使用一个对象工厂(ObjectFactory)实例来完成. 默认的对象工厂需要做的仅仅是实例化目标类,要么通过默认 ...
随机推荐
- java.util.HashSet
Operations Time Complexity Notes add, remove, contains, size O(1) assuming the hash functions has di ...
- C/C++调用Golang 二
C/C++调用Golang 二 <C/C++调用Golang 一>简单介绍了C/C++调用Golang的方法步骤,只涉及一个简单的函数调用.本文总结具体项目中的使用场景,将介绍三种较复杂的 ...
- linux下新建svn项目
1.新建项目svnadmin create /mnt/fbdisk/svn/newproject 2.会在svn下面建立newproject目录total 24drwxr-xr-x 2 root ro ...
- CSS实现商城分类导航效果(hover选择器)
学完制作出这个导航效果之后,收获最多的是了解了hover选择器的功能,:hover 选择器用于选择鼠标指针浮动在上面的元素.在鼠标移到元素上时向此元素添加特殊的样式(CSS).例如:改变鼠标悬停处的元 ...
- Tomcat在windows系统中的防火墙设置
在Win7下安装Tomcat后,其他机器无法访问到Tomcat服务,需要修改防火墙设置. 控制面板->window防火墙->允许程序通过Windows防火墙通信 将Tomcat目录下\bi ...
- 三:Redis连接池、JedisPool详解、Redisi分布式
单机模式: package com.ljq.utils; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; ...
- c# 去除字符串中重复字符
String.Join 和 Distinct 方法 https://www.cnblogs.com/louby/p/6224960.html 1.在写程序中经常操作字符串,需要去重,以前我的用方式利用 ...
- 动态求区间K大值(权值线段树)
我们知道我们可以通过主席树来维护静态区间第K大值.我们又知道主席树满足可加性,所以我们可以用树状数组来维护主席树,树状数组的每一个节点都可以开一颗主席树,然后一起做. 我们注意到树状数组的每一棵树都和 ...
- alpha rarefaction using qiime
shannon菌群多样性指数 H=-∑(Pi)(㏑Pi) Pi=样品中属于第i种的个体的比例,如样品总个体数为N,第i种个体数为ni,则Pi=ni/N: 各种之间,个体分配越均匀,H值就越大.如果每一 ...
- java多线程(八)-死锁问题和java多线程总结
为了防止对共享受限资源的争夺,我们可以通过synchronized等方式来加锁,这个时候该线程就处于阻塞状态,设想这样一种情况,线程A等着线程B完成后才能执行,而线程B又等着线程C,而线程C又等着线程 ...