博客
关于我
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也可以打印日志,但是日志太多,看起来头疼。也不方便有问题时查找问题。

你可能感兴趣的文章
MySQL - 解读MySQL事务与锁机制
查看>>
MTTR、MTBF、MTTF的大白话理解
查看>>
mt_rand
查看>>
mysql -存储过程
查看>>
mysql /*! 50100 ... */ 条件编译
查看>>
mudbox卸载/完美解决安装失败/如何彻底卸载清除干净mudbox各种残留注册表和文件的方法...
查看>>
mysql 1264_关于mysql 出现 1264 Out of range value for column 错误的解决办法
查看>>
mysql 1593_Linux高可用(HA)之MySQL主从复制中出现1593错误码的低级错误
查看>>
mysql 5.6 修改端口_mysql5.6.24怎么修改端口号
查看>>
MySQL 8.0 恢复孤立文件每表ibd文件
查看>>
MySQL 8.0开始Group by不再排序
查看>>
mysql ansi nulls_SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON 什么意思
查看>>
multi swiper bug solution
查看>>
MySQL Binlog 日志监听与 Spring 集成实战
查看>>
MySQL binlog三种模式
查看>>
multi-angle cosine and sines
查看>>
Mysql Can't connect to MySQL server
查看>>
mysql case when 乱码_Mysql CASE WHEN 用法
查看>>
Multicast1
查看>>
mysql client library_MySQL数据库之zabbix3.x安装出现“configure: error: Not found mysqlclient library”的解决办法...
查看>>