目录
准备数据库表
搭建工程
引入日志框架lockback
SqlSessionUtil工具类封装
CREATE TABLE `t_car` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`car_num` varchar(100) DEFAULT NULL COMMENT '汽车编号',
`brand` varchar(100) DEFAULT NULL COMMENT '品牌',
`guide_price` decimal(10,0) DEFAULT NULL COMMENT '指导价',
`produce_time` varchar(10) DEFAULT NULL COMMENT '生成时间',
`car_type` varchar(100) DEFAULT NULL COMMENT '汽车类型',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
创建Project:建议创建Empty Project,设置Java版本以及编译版本等。
创建Module:普通的Maven Java模块
打包方式:jar(不需要war,因为mybatis封装的是jdbc。)
com.study
mybatis001
jar
1.0-SNAPSHOT
引入依赖(mybatis依赖 + mysql驱动依赖)
org.mybatis
mybatis
3.5.10
mysql
mysql-connector-java
8.0.30
在resources根目录下新建mybatis-config.xml配置文件
注意1:mybatis核心配置文件的文件名不一定是mybatis-config.xml,可以是其它名字。
注意2:mybatis核心配置文件存放的位置也可以随意。这里选择放在resources根下,相当于放到了类的根路径下。
在resources根目录下新建CarMapper.xml配置文件
insert into t_car
(id,car_num,brand,guide_price,produce_time,car_type)
values
(null,'102','丰田mirai',40.30,'2014-10-05','氢能源')
- 注意1:sql语句最后结尾可以不写“;”
- 注意2:CarMapper.xml文件的名字不是固定的。可以使用其它名字。
- 注意3:CarMapper.xml文件的位置也是随意的。这里选择放在resources根下,相当于放到了类的根路径下。
- 注意4:将CarMapper.xml文件路径配置到mybatis-config.xml:
编写MyBatisIntroductionTest代码
/**
* @author 风轻云淡
*/
public class MybatisIntroductionTest {
public static void main(String[] args) {
//1.创建sqlSessionFactorBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//2.创建sqlSessionFactor对象
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
//3.创建sqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//4.执行sql语句
//insertCar为执行sql语句的id
int count = sqlSession.insert("insertCar");
System.out.println("插入数据条数:"+count);
//5.提交(mybatis默认采用的事务管理器为JDBC,默认是不提交的,需要手动提交)
sqlSession.commit();
//6.关闭资源
sqlSession.close();
}
}
注意1:默认采用的事务管理器是:JDBC。JDBC事务默认是不提交的,需要手动提交。
核心配置文件的名字是随意的,因为以下的代码:
// 文件名是出现在程序中的,文件名如果修改了,对应这里的java程序也改一下就行了。 InputStream is = Thread.currentThread().getContextClassLoader() .getResourceAsStream("mybatis-config.xml");
mybatis核心配置文件的名字是随意的,存放路径也是随意的。
虽然mybatis核心配置文件的名字不是固定的,但通常该文件的名字叫做:mybatis-config.xml
虽然mybatis核心配置文件的路径不是固定的,但通常该文件会存放到类路径当中,这样让项目的移植更加健壮。
- 在mybatis中提供了一个类:Resources【org.apache.ibatis.io.Resources】,该类可以从类路径当中获取资源,我们通常使用它来获取输入流InputStream,代码如下
// 这种方式只能从类路径当中获取资源,也就是说mybatis-config.xml文件需要在类路径下。 InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
运行程序,查看运行结果,以及数据库表中的数据:
完整规范写法
public class MyBatisCompleteCodeTest {
public static void main(String[] args) {
SqlSession sqlSession = null;
try {
// 1.创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 2.创建SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));
// 3.创建SqlSession对象
sqlSession = sqlSessionFactory.openSession();
// 4.执行SQL
int count = sqlSession.insert("insertCar");
System.out.println("更新了几条记录:" + count);
// 5.提交
sqlSession.commit();
} catch (Exception e) {
// 回滚
if (sqlSession != null) {
sqlSession.rollback();
}
e.printStackTrace();
} finally {
// 6.关闭
if (sqlSession != null) {
sqlSession.close();
}
}
}
}
mybatis-config.xml修改增加:
标准日志也可以用,但是配置不够灵活,可以集成其他的日志组件,例如:log4j,logback等。
ch.qos.logback
logback-classic
1.2.11
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log
30
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
100MB
再次执行main方法
/**
* @author 风轻云淡
*/
public class SqlSessionUtil {
private static SqlSessionFactory sqlSessionFactory;
/**
* 类加载时初始化sqlSessionFactory对象
*/
static {
try {
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 每调用一次openSession()可获取一个新的会话,该会话支持自动提交。
*
* @return 新的会话对象
*/
public static SqlSession openSession() {
return sqlSessionFactory.openSession(true);
}
}