本文共 10106 字,大约阅读时间需要 33 分钟。
视频
https://www.bilibili.com/video/BV1EE411W7Q1 代码 https://github.com/wei198621/allTypes_persistencemybatis 相关网站
MyBatis中文官网 http://www.mybatis.cn/ mybatis中文网 http://www.mybatis.org (202012不可以访问了,原因未知)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(); }}
https://www.bilibili.com/video/BV1EE411W7Q1?p=4
全部的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 '%keyWords%' ⇒ like '%'||#{keyWords}||'%'
id,name,publishDate pubDate,price,author
这样做
当 name author 都为空 sql 语句为 **** where 会报错 当前name为空 sql 语句为 **** where and author= 会报错id,name,publishDate pubDate,price,author
id,name,publishDate pubDate,price,author
id,name,publishDate pubDate,price,author
// name price 都不为空 ,只执行第一个name ***的匹配
id,name,publishDate pubDate,price,author
// A code blockvar foo = 'bar';
update t_book id = #{ id} name = #{ name}, author = #{ author}
---- 批处理 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方法时候,会形成回环,造成栈溢出,稍后试试id,name,publishDate pubDate,price,author update mybatis_baizhi_book id=#{ id} name=#{ name} author =#{ author}, 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 Listcourses;//关系属性 用来表示一个学生选了多个课程 }
/** * @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 ListqueryAll();}
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); Liststudents = 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("==================================================="); } }}
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//column 列名
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]
恰好我的环境跟这位兄台的一直,所以 参考文章 :
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也可以打印日志,但是日志太多,看起来头疼。也不方便有问题时查找问题。