博客
关于我
Mybatis 从入门到精通---编程不良人
阅读量:324 次
发布时间:2019-03-01

本文共 10069 字,大约阅读时间需要 33 分钟。

视频

https://www.bilibili.com/video/BV1EE411W7Q1
代码
https://github.com/wei198621/allTypes_persistence

mybatis 相关网站

MyBatis中文官网 http://www.mybatis.cn/
mybatis中文网 http://www.mybatis.org (202012不可以访问了,原因未知)

在这里插入图片描述

mybatis 简介

在这里插入图片描述

环境搭建

获取sqlSession

public class TestMybatis {       public static void main(String[] args) throws SQLException, IOException {         /*  //读取配置  方式一        InputStream resourceAsStream = TestMybatis.class.getResourceAsStream("/mybatis-config.xml");        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);*/        //Mybatis读取配置文件的方式        Reader resourceAsReader = Resources.getResourceAsReader("mybatis-config.xml");        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(resourceAsReader);        SqlSession sqlSession = sessionFactory.openSession();        System.out.println(sqlSession);        //org.apache.ibatis.session.defaults.DefaultSqlSession@5a39699c        sqlSession.getConnection().commit();    }}

执行查询

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

在这里插入图片描述在这里插入图片描述

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

mybatis 增删改

在这里插入图片描述https://www.bilibili.com/video/BV1EE411W7Q1?p=4

20201210 12

mybatis SQL进阶学习

Xml中的特殊字符

在这里插入图片描述

关于 jdbcType

全部的jdbcType属性

在这里插入图片描述

// 测试的时候,不写  ,jdbcType=INTEGER   也可以正常更细 Null  类型的值,可能是最新版本的mybatis 解决了陈老师讲解时间点2018年时候的问题(也可能是数据库原因,我测试库是mysql)
update t_emp set name=#{ name,jdbcType=VARCHAR},age=#{ age,jdbcType=INTEGER},birthday=#{ bir,jdbcType=DATE} where id=#{ id}

关于like

//like '%keyWords%'  ⇒   like '%'||#{keyWords}||'%'

关于分页查询

动态sql

sql标签 & include 标签

id,name,publishDate pubDate,price,author

if 标签 版本一

这样做

当 name author 都为空 sql 语句为 **** where 会报错
当前name为空 sql 语句为 **** where and author= 会报错

id,name,publishDate pubDate,price,author

if 标签 版本二

id,name,publishDate pubDate,price,author

if 标签 版本三 (if标签 + where 标签)

id,name,publishDate pubDate,price,author

在这里插入图片描述

choose when 标签

// name price 都不为空 ,只执行第一个name ***的匹配

id,name,publishDate pubDate,price,author

set 标签

// A code blockvar foo = 'bar';

在这里插入图片描述在这里插入图片描述

trim 标签

update t_book
name = #{ name},
author = #{ author}
id = #{ id}

在这里插入图片描述

foreach 批处理

---- 批处理 BEGIN	insert into t_book values('13','六脉神剑',sysdate,120.23,'小黑');	insert into t_book values('14','如来神掌',sysdate,110.23,'小名');	insert into t_book values('15','葵花宝典',sysdate,80.23,'无名');	insert into t_book values('16','星星点灯',sysdate,90.34,'小牛');	insert into t_book values('17','黯然销魂掌',sysdate,67.23,'小伟');END;
BEGIN
insert into t_book values(#{ book.id},#{ book.name},#{ book.pubDate},#{ i},#{ book.author})
END;

关联关系 一对一

数据库关系描述 : 用户表 user 与 身份信息表 card 是一对一的关系 ,数据库中可以在user表中加入外键cardid 引用 card 表,也可以在card表中加入user表id,作为外键。现实操作中我没有使用外键的习惯,(不清楚是好是坏)

代码中类描述: 可以如下,在User类中加入Card类,也可以在Card 类中引入 User ,

public class User {   		private String id;	private String name;	private Integer age;	private Date bir;		private Card card;//关系属性  不要出现在toString方法里面  	}

当SQL结果集,不是java代码中的对象时候, 用resultMap 替换resultType

association 处理一对一关系

//关系属性 不要出现在toString方法里面

如果 User.Card Card.User 相互出现在彼此的toString方法里面, 当打印某个toString方法时候,会形成回环,造成栈溢出,稍后试试
在这里插入图片描述
视频地址 – 编程不良人
https://www.bilibili.com/video/BV1EE411W7Q1?p=10

id,name,publishDate pubDate,price,author
update mybatis_baizhi_book
name=#{ name}
author =#{ author},
id=#{ id}
BEGIN
insert into mybatis_baizhi_book values(#{ book.id},#{ book.name},#{ book.pubDate},#{ i},#{ book.author})
END;

关联关系 一对多

// A code blockvar foo = 'bar';

在这里插入图片描述

在这里插入图片描述

关联关系 多对多

学生与课程的关系是多对多 (通过选课表关联)

代码
https://github.com/wei198621/allTypes_persistence

/** * @author leowei * @date 2020/12/13  - 10:01 */public class Student {       private String id;    private String name;    private Integer age;    private List
courses;//关系属性 用来表示一个学生选了多个课程 }
/** * @author leowei * @date 2020/12/13  - 10:01 */public class Course {       private String id;    private String name;    }
/** * @author leowei * @date 2020/12/13  - 13:19 */public interface StudentDAO {       public List
queryAll();}
package com.tiza.leo._05mybatis_baizhi03_complex_plus.test;import com.tiza.leo._05mybatis_baizhi03_complex_plus.dao.StudentDAO;import com.tiza.leo._05mybatis_baizhi03_complex_plus.entity.Course;import com.tiza.leo._05mybatis_baizhi03_complex_plus.entity.Student;import com.tiza.leo._05mybatis_baizhi03_complex_plus.util.MybatisUtil;import java.util.List;/** * @author leowei * @date 2020/12/13  - 13:25 */public class TestStudentDAO {       public static void main(String[] args) {           StudentDAO mapper = MybatisUtil.getSqlSession().getMapper(StudentDAO.class);        List
students = mapper.queryAll(); for (Student student : students) { System.out.println("student = " + student); List
courses = student.getCourses(); for (Course cours : courses) { System.out.println("cours = " + cours); } System.out.println("==================================================="); } }}

MyBatis 通过包含的jdbcType类型

在这里插入图片描述

BIT FLOAT CHAR TIMESTAMP OTHER UNDEFINED

TINYINT REAL VARCHAR BINARY BLOB NVARCHAR
SMALLINT DOUBLE LONGVARCHAR VARBINARY CLOB NCHAR
INTEGER NUMERIC DATE LONGVARBINARY BOOLEAN NCLOB
BIGINT DECIMAL TIME NULL CURSOR

Mybatis中javaType和jdbcType对应和CRUD例子

//column 列名

Mybatis中javaType和jdbcType对应关系

JDBCType            JavaType    CHAR                String    VARCHAR             String    LONGVARCHAR         String    NUMERIC             java.math.BigDecimal    DECIMAL             java.math.BigDecimal    BIT                 boolean    BOOLEAN             boolean    TINYINT             byte    SMALLINT            short    INTEGER             int    BIGINT              long    REAL                float    FLOAT               double    DOUBLE              double    BINARY              byte[]    VARBINARY           byte[]    LONGVARBINARY       byte[]    DATE                java.sql.Date    TIME                java.sql.Time    TIMESTAMP           java.sql.Timestamp    CLOB                Clob    BLOB                Blob    ARRAY               Array    DISTINCT            mapping of underlying type    STRUCT              Struct    REF                 Ref    DATALINK            java.net.URL[color=red][/color]

配置logback打印SQL日志

恰好我的环境跟这位兄台的一直,所以 参考文章 :

https://blog.csdn.net/u012489412/article/details/86691611

我的配置

我当前的springboot版本2.1.2.RELEASE

myabtis版本为3.5.0
logback版本为1.2.3

开始配置

1.在application.yml里面添加logback-spring.xml配置

下面是我的logback.xml文件

logback
即DEBUG
%d [%thread] %-5level %logger{ 36} [%file : %line] - %msg%n
${ scheduler.manager.server.home}/logs/${ app.name}.log
${ scheduler.manager.server.home}/logs/${ app.name}.%d{ yyyy-MM-dd.HH}.log.gz
60
20GB
100MB
%d [%thread] %-5level %logger{ 36} [%file : %line] - %msg%n

关于这里,有两点想说明,

第一点:需要添加logger

第二点:root的level为INFO,这里使用debug也可以打印日志,但是日志太多,看起来头疼。也不方便有问题时查找问题。

你可能感兴趣的文章
mysql5.7 for windows_MySQL 5.7 for Windows 解压缩版配置安装
查看>>
Webpack 基本环境搭建
查看>>
mysql5.7 安装版 表不能输入汉字解决方案
查看>>
MySQL5.7.18主从复制搭建(一主一从)
查看>>
MySQL5.7.19-win64安装启动
查看>>
mysql5.7.19安装图解_mysql5.7.19 winx64解压缩版安装配置教程
查看>>
MySQL5.7.37windows解压版的安装使用
查看>>
mysql5.7免费下载地址
查看>>
mysql5.7命令总结
查看>>
mysql5.7安装
查看>>
mysql5.7性能调优my.ini
查看>>
MySQL5.7新增Performance Schema表
查看>>
Mysql5.7深入学习 1.MySQL 5.7 中的新增功能
查看>>
Webpack 之 basic chunk graph
查看>>
Mysql5.7版本单机版my.cnf配置文件
查看>>
mysql5.7的安装和Navicat的安装
查看>>
mysql5.7示例数据库_Linux MySQL5.7多实例数据库配置
查看>>
Mysql8 数据库安装及主从配置 | Spring Cloud 2
查看>>
mysql8 配置文件配置group 问题 sql语句group不能使用报错解决 mysql8.X版本的my.cnf配置文件 my.cnf文件 能够使用的my.cnf配置文件
查看>>
MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
查看>>