博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mybatis 从入门到精通---编程不良人
阅读量:322 次
发布时间:2019-03-01

本文共 10106 字,大约阅读时间需要 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也可以打印日志,但是日志太多,看起来头疼。也不方便有问题时查找问题。

你可能感兴趣的文章