Mybatis入门学习
1. 框架介绍
2. mybatis介绍
3. mybatis快速入门
4. 映射文件概述
5. mybatis原生的增删改查
6. 抽取工具类【spring可以代替】
7. 核心配置文件
8. 核心api概述
9. mybatis实现dao层
传统dao(接口+实现类)
接口dao(接口)
10. 基于接口增删改查
一 框架简介
为什么学习框架?
简化代码,提高效率
二 Mybatis简介
2.1 ORM概述
ORM(object Relational Mapping)对象关系映射
常用ORM框架有:hibernate(全自动ORM映射)、mybatis(半自动ORM映射)、jpa
2.2 Mybatis介绍
历史
- MyBatis本是apache的一个开源项目,名为iBatis。
- 2010年这个项目由apache迁移到了google,并且改名为MyBatis。
- 2013年迁移到Github。
简介
MyBatis官网地址:http://www.mybatis.org/mybatis-3/
- mybatis是一款优秀的持久层框架,他不需要像JDBC繁琐编写代码,只需要开发人员关注(接口+sql)
- 它采用了简单的xml配置+接口方式实现增删改查,开发时我们只需要关注SQL本身
三 Mybatis快速入门
需求
查询数据库user表的所有记录,封装到User对象中。
3.1 步骤分析
- ① 创建mybatis_db数据库和user表
- ② 创建java项目,导入jar包
(mysql驱动、mybatis、log4j日志) - ③ 创建User实体类
- ④ 编写映射文件UserMapper.xml
- ⑤ 编写核心文件SqlMapConfig.xml
- ⑥ 编写测试代码
3.2 代码实现
① 创建mybatis_db数据库和user表
/* SQLyog Enterprise - MySQL GUI v6.03 Host - 5.0.22-community-nt : Database - mybatisdb ********************************************************************* Server version : 5.0.22-community-nt */ /*!40101 SET NAMES utf8 */; /*!40101 SET SQL_MODE=''*/; CREATE DATABASE IF NOT EXISTS `mybatis_db`; USE `mybatis_db`; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; DROP TABLE IF EXISTS `orders`; CREATE TABLE `orders` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `uid` INT(11) DEFAULT NULL, `ordertime` DATETIME DEFAULT NULL, `money` DOUBLE DEFAULT NULL, PRIMARY KEY (`id`), KEY `uid` (`uid`), CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`uid`) REFERENCES `user` (`id`) ) ENGINE=INNODB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; /*Data for the table `orders` */ INSERT INTO `orders`(`id`,`uid`,`ordertime`,`money`) VALUES (1,41,'2019-05-20 02:58:02',999.5),(2,45,'2019-02-14 07:58:00',1399),(3,41,'2019-06-01 21:00:02',1666); /*Table structure for table `user` */ DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `username` VARCHAR(32) NOT NULL COMMENT '用户名称', `birthday` DATETIME DEFAULT NULL COMMENT '生日', `sex` VARCHAR(10) DEFAULT NULL COMMENT '性别', `address` VARCHAR(256) DEFAULT NULL COMMENT '地址', PRIMARY KEY (`id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8; /*Data for the table `user` */ INSERT INTO `user`(`id`,`username`,`birthday`,`sex`,`address`) VALUES (41,'老王','2019-05-27 17:47:08','男','北京'),(42,'王小二','2019-03-02 15:09:37','女','北京金燕龙'),(43,'老李','2019-03-04 11:34:34','女','北京修正'),(45,'传智播客','2019-03-04 12:04:06','男','北京金燕龙'),(46,'王小二','2018-09-07 17:37:26','男','北京TBD'),(48,'小马宝莉','2019-03-08 11:44:00','女','北京修正'); DROP TABLE IF EXISTS `role`; CREATE TABLE `role` ( `id` INT(11) NOT NULL COMMENT '编号', `role_name` VARCHAR(30) DEFAULT NULL COMMENT '角色名称', `role_desc` VARCHAR(60) DEFAULT NULL COMMENT '角色描述', PRIMARY KEY (`ID`) ) ENGINE=INNODB DEFAULT CHARSET=utf8; /*Data for the table `role` */ INSERT INTO `role`(`ID`,`role_name`,`role_desc`) VALUES (1,'院长','管理整个学院'),(2,'总裁','管理整个公司'),(3,'校长','管理整个学校'); /*Table structure for table `user_role` */ DROP TABLE IF EXISTS `user_role`; CREATE TABLE `user_role` ( `uid` INT(11) NOT NULL COMMENT '用户编号', `rid` INT(11) NOT NULL COMMENT '角色编号', PRIMARY KEY (`uid`,`rid`), KEY `FK_Reference_10` (`rid`), CONSTRAINT `FK_Reference_10` FOREIGN KEY (`rid`) REFERENCES `role` (`id`), CONSTRAINT `FK_Reference_9` FOREIGN KEY (`uid`) REFERENCES `user` (`id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8; /*Data for the table `user_role` */ INSERT INTO `user_role`(`uid`,`rid`) VALUES (41,1),(45,1),(41,2); /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
② 创建java项目,导入jar包
③ 创建User实体类
public class User {
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
// 省略 getter、setter、toString
}
④ 编写映射文件UserMapper.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">
<mapper namespace="UserMapper">
<!--查询所有-->
<select id="findAll" resultType="com.mybatis.pojo.User">
select * from user
</select>
</mapper>
⑤ 编写核心文件SqlMapConfig.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="mysql">
<!--使用MySQL环境-->
<environment id="mysql">
<!--事务管理器:JDBC类型-->
<transactionManager type="JDBC"></transactionManager>
<!--连接池:内置POOLED-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://192.168.43.212:3306/mybatis_db"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</dataSource>
</environment>
</environments>
<!--加载映射文件-->
<mappers>
<mapper resource="com/mybatis/mapper/UserMapper.xml"></mapper>
</mappers>
</configuration>
⑥ 编写测试代码
// 查询所有
@Test
public void testFindAll() throws Exception {
// 1.加载核心配置文件(SqlMapConfig.xml)
// 2.构建SqlSessionFactory工厂对象
// 3.通过工厂创建SqlSession会话对象(Connection)
// 4.执行sql语句
// 5.释放资源
}
public class UserMapperTest {
// 查询所有
@Test
public void testFindAll() throws Exception {
// 1.加载核心配置文件(SqlMapConfig.xml)
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
// 2.构建SqlSessionFactory工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
// 3.通过工厂创建SqlSession会话对象(Connection)
SqlSession sqlSession = sqlSessionFactory.openSession();
// 4.执行sql语句 (命名空间+id)
List<User> list = sqlSession.selectList("UserMapper.findAll");
for (User user : list) {
System.out.println(user);
}
// 5.释放资源
sqlSession.close();
}
}
四 Mybatis映射文件概述
五 Mybatis增删改查
5.1 新增
① 编写映射文件UserMapper.xml
<!--新增-->
<insert id="save" parameterType="com.mybatis.pojo.User">
insert into user(username,birthday,sex,address)
values(#{username},#{birthday},#{sex},#{address})
</insert>
② 编写测试代码
// 新增
@Test
public void testSave() throws IOException {
//1.加载配置文件
InputStream in= Resources.getResourceAsStream("SqlMapConfig.xml");
// 2.构建SqlSessionFactory工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
//3.通过工厂创建SqlSession会话对象(Connection)
SqlSession sqlSession = sqlSessionFactory.openSession();
//4.执行sql语句(
User user = new User();
user.setUsername("jack");
user.setBirthday(new Date()