可以看到两张表的关系是第一张表的id对应第二张表的dept_id
(1)导入依赖(2)根据ROM创建实体类4.0.0 com.qianwz mybatis021.0-SNAPSHOT jar junit junit4.13 com.alibaba druid1.0.9 mysql mysql-connector-java8.0.26 org.mybatis mybatis3.5.7 org.projectlombok lombok1.18.20 log4j log4j1.2.17
package com.qianwz.entity;
import lombok.Data;
@Data
public class Department {
private Integer id;
private String name;
private String location;
}
package com.qianwz.entity;
import lombok.Data;
@Data
public class Employee {
private Integer id;
private String name;
private String salary;
private Department departments;
}
(3)创建接口
package com.qianwz.dao;
import com.qianwz.entity.Department;
public interface DepartmentDao {
Department findById(Integer id);
}
package com.qianwz.dao;
import com.qianwz.entity.Employee;
public interface EmployeeDao {
Employee findById(Integer id);
}
(4)创建工具类
package com.qianwz.util;
import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.datasource.pooled.PooledDataSourceFactory;
public class DruidDataSourceFactory extends PooledDataSourceFactory {
public DruidDataSourceFactory(){
this.dataSource = new DruidDataSource();//替换数据源
}
}
(5)
1、log4j.properties 的文件 方便我们之后查看懒加载
# Global logging configuration log4j.rootLogger=DEBUG, stdout # Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n2、db.properties 文件
db.driverClassName = com.mysql.cj.jdbc.Driver db.url = jdbc:mysql://localhost:3306/javacoffee?serverTimezone=Asia/Shanghai&characterEncoding=UTF8 db.username=root db.password=1234(6)mybatis-config.xml 文件
(7)EmployeeDao.xml 与 DepartmentDao.xml mapper文件
(8)测试代码
@org.junit.Test
public void test2() throws IOException {
String resourrce = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resourrce);
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = build.openSession();
EmployeeDao mapper = sqlSession.getMapper(EmployeeDao.class);
Employee dById = mapper.findById(1);
System.out.println(dById);
sqlSession.close();
inputStream.close();
}
结果如下,可以看到执行的sql语句连接到一起了,并且查出来的结果和联合查询的结果差不多
2、懒加载
懒加载对于程序的优化很重要,这里就只是一个简单的小入门,便于大家了解懒加载这个是什么,就拿上面的代码举个栗子
首先我们把懒加载打开,把之前注释的代码取消注释一下
当我们开启懒加载之前,我们控制台打印出来的日志文件如下,会看到执行了两次
sql语句,那么懒加载是什么?我的理解就是开启懒加载之后,程序就只会用什么加载
什么,也可以当成单例模式的懒汉式
下面是开启懒加载之后,控制台打印出来的
可以看到现在只是执行了一半的sql语句,另一半没有执行,可能有的朋友发现他们用
了控制台打印这个对象,最后还是两条,我的理解是当你打印的时候,调用了他们的
toString方法,自然也就会执行两次sql了,懒加载这种思想,也就是用什么调什么方
法,大大节省了系统的开销,对于程序的优化很有用,在面试的时候也是很经常问的,
3、IDEA逆向工程
逆向工程这名字听起来高大上,实际上可以理解为通过数据库表,生成一系列
mapper.xml 实体类等等的文件,就不用咱们按着数据库来一个一个苦逼的建实体类和
xml文件了,对于我们来说十分方便,同时生成的mapper文件中的方法也还挺重要
的,下面就简单介绍一下逆向工程的使用,其实生产逆向工程需要我们自己写的东西不
超过十行,完全cv大法
首先这是我的文件及结构
pom.xml文件导入依赖
4.0.0 com.coffee abs1.0-SNAPSHOT org.mybatis.generator mybatis-generator-maven-plugin1.3.6 log4j log4j1.2.17 org.mybatis mybatis3.5.7 mysql mysql-connector-java8.0.26 org.mybatis.generator mybatis-generator-core1.3.6
log4j的配置文件
# Global logging configuration log4j.rootLogger=DEBUG, stdout # Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%ngenerationConfig,xml文件
最后是工具类
package test;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class Generator {
public void generator() throws Exception{
List warnings = new ArrayList();
boolean overwrite = true;
File configFile = new File("D:\javast\java_ssm\abs\src\main\resources\generationConfig.xml");
ConfigurationParser parser = new ConfigurationParser(warnings);
Configuration config = parser.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,
callback, warnings);
myBatisGenerator.generate(null);
}
public static void main(String[] args) throws Exception {
try {
Generator generatorSqlmap = new Generator();
generatorSqlmap.generator();
} catch (Exception e) {
e.printStackTrace();
}
}
}
注意!!!
我在写的时候也磕磕绊绊出现了很多问题
(1)报找不到文件的错误,当时我困惑了很久,因为我当时用的相对路径,怎么也找
不出路径上的错误,甚至都放到一个文件夹中也还是找不到,后来上网上找了找办法,
看了挺多的,因为我建的是Module文件而不是project文件,所以路径上可能有点不一
样,解决办法就是我把路径改为绝对路径,就可以找到了。
(2)log4j的日志文件不显示,我是先导入依赖再复制的properties文件,导致我的日
志文件打印不出来,后来先导入配置文件,再导入log4j依赖,就解决了
(3)控制台不报错,但是出不来文件,按照正确的来说当程序跑完之后,相应的一些
列文件就该出来了,可我还是不出来,我也试了刷新重启什么的,还是无效,后来也是
想到既然刚开始报找不到文件的错误,是不是导出文件的路径也有点问题,于是我也把
导出的pojo、mapper什么的路径都改为绝对路径,完美解决。
最后控制台输出的内容
再看一下生成的文件,就可以使用啦!!!



