一、框架是什么?
1.java常见框架:
SSM三大框架:Spring+Mybatis+SpringMvc
2.什么是框架?
框架本身就是对于通用代码的封装,提前写好的类和方法,我们在做项目的时候直接引入这些框架(本质就是引入类和接口),基于这些框架,简化我们的开发。框架一般都以jar包的形式存在。
3.mvc三层架构
这里引用动力节点的一张图
表现层:它直接和前端打交道,一方面接收ajax请求,一方面返回json数据给前端。
业务逻辑层:它一方面处理表现层转发过来的请求,一方面将持久层处理的数据返回给表现层。
持久层:它直接和数据库打交道,就是完成crud操作的,并且将数据返回给业务逻辑层。
我们的mybatis就属于Java持久层框架。
二.JDBC有哪些不足/为什么开发中用Mybatis而不是JDBC?
1.sql语句写死在Java程序中,修改sql文件就要去修改java文件,这明显违背了开闭原则。
2.给占位符?传值操作是繁琐的,而Mybatis可以帮我们自动传值
3.JDBC将查询结果集封装成Java对象繁琐,Mybatis帮我们将结果集自动封装成对象。
三.Mybatis本质?
1.可以理解为Mybatis是升级版的JDBC,它本质上就是对JDBC的封装,使开发者只需要关注SQL语句,而不用关注JDBC的代码,使开发变得更加的简单。
2. MyBatis通过XML或者注解的方式将要执行的各种Statement对象配置起来,通过Java对象和statement中SQL的动态参数进行映射,并最终执行SQL语句。执行SQL后,最终将结果已Java对象返回。
3. 采用了半个ORM的思想。hibernate 完全的ORM思想
四.Mybatis入门程序
1.创建数据库和表结构
create database mybatis_demo;
use mybatis_demo;
CREATE TABLE `user` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(32) NOT NULL COMMENT '用户名称',
`birthday` datetime default NULL COMMENT '生日',
`sex` char(1) default NULL COMMENT '性别',
`address` varchar(256) default NULL COMMENT '地址',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into `user`(`id`,`username`,`birthday`,`sex`,`address`) values (1,'老王','2018-02-27
17:47:08','男','北京'),(2,'熊大','2018-03-02 15:09:37','女','上海'),(3,'熊二','2018-03-04
11:34:34','女','深圳'),(4,'光头强','2018-03-04 12:04:06','男','广州');
2.创建Maven工程,创建java项目即可。
3.引入坐标
3.1引入Mybatis的jar包
3.2引入MySQL驱动的jar包
3.3引入Junit单元测试的jar包
3.4引入log4j的jar包
<dependencies>
<!--mybatis核心包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<!--mysql驱动包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<!-- 日志 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
4.在rescources下新建mybatis-config.xml,这个是mybatis的核心配置文件
这里mybatis-config.xml名字不是必须的,但是最好遵循规范。
这里创建在rescources目录下,表示mybatis-config.xml在类的根路径下。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!--这里写自己的数据库连接信息-->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/powernode"/>
<property name="username" value="root"/>
<property name="password" value="2020"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--sql映射文件创建好之后,需要将该文件路径配置到这里-->
<mapper resource=""/>
</mappers>
</configuration>
5.在rescources下新建CarMapper.xml文件,这里写我们的sql语句
这里sql语句结尾可以不写";"
CarMapper.xml也不是固定的。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace先随意写一个-->
<mapper namespace="car">
<!--insert sql:保存一个汽车信息-->
<insert id="insertCar">
insert into t_car
(id,car_num,brand,guide_price,produce_time,car_type)
values
(null,'102','丰田mirai',40.30,'2014-10-05','氢能源')
</insert>
</mapper>
6.将CarMapper.xml文件路径配置到mybatis-config.xml文件中
<mapper resource="CarMapper.xml"/>
7.编写测试文件
public class MyBatisIntroductionTest {
public static void main(String[] args) {
// 1. 创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 2. 创建SqlSessionFactory对象
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
// 3. 创建SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
// 4. 执行sql
int count = sqlSession.insert("insertCar"); // 这个"insertCar"必须是sql的id
System.out.println("插入几条数据:" + count);
// 5. 提交(mybatis默认采用的事务管理器是JDBC,默认是不提交的,需要手动提交。)
sqlSession.commit();
// 6. 关闭资源(只关闭是不会提交的)
sqlSession.close();
}
}
运行即可