Mybatis学习笔记

骑猪看日落 2023-01-03 01:37 194阅读 0赞

一、引言

1.框架的三层架构

  1. 表现层:是用于展示数据(SpringMVC
  2. 业务层:是处理业务需求
  3. 持久层:是和数据库交互(MyBatis

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjA3MDQ3Mw_size_16_color_FFFFFF_t_70

2.持久层技术解决方案

JDBC技术:

  1. Connection PreparedStatement ResultSet

Spring的JdbcTemplate:

  1. Spring中对jdbc的简单封装

Apache的DBUtils:

  1. 它和SpringJdbcTemplate很像,也是对Jdbc的简单封装

以上这些都不是框架,JDBC是规范。 Spring的JdbcTemplate和Apache的DBUtils都只是工具类。

3.MyBatis的概述

MyBatis是一个持久层框架,用Java编写。它封装了jdbc操作的很多细节,使开发者只需要关注sql语句本身,而无需关注注册驱动,创建连接等繁杂过程。它使用了ORM思想实现了结果集的封装。

ORM (Object Relational Mapping): 对象关系映射。 就是把数据库和实体类及实体类的属性对应起来,让我们可以操作实体类就实现操作数据库表

二、MyBatis入门

1.MyBatis环境搭建

1)创建数据库

  1. CREATE TABLE `user` (
  2. `id` INT(11) NOT NULL AUTO_INCREMENT,
  3. `username` VARCHAR(32) NOT NULL COMMENT '用户名称',
  4. `birthday` DATETIME DEFAULT NULL COMMENT '生日',
  5. `sex` CHAR(1) DEFAULT NULL COMMENT '性别',
  6. `address` VARCHAR(256) DEFAULT NULL COMMENT '地址',
  7. PRIMARY KEY (`id`)
  8. ) ENGINE=INNODB DEFAULT CHARSET=utf8;
  9. INSERT INTO `user`(`id`,`username`,`birthday`,`sex`,`address`) VALUES (41,'老王','2018-02-27 17:47:08','男','北京'),(42,'小二王','2018-03-02 15:09:37','女','北京金燕龙'),(43,'小二王','2018-03-04 11:34:34','女','北京金燕龙'),(45,'传智播客','2018-03-04 12:04:06','男','北京金燕龙'),(46,'老王','2018-03-07 17:37:26','男','北京'),(48,'小马宝莉','2018-03-08 11:44:00','女','北京修正');

2)IDEA中创建Project,导入Maven工程

  1. <dependency>
  2. <groupId>org.mybatis</groupId>
  3. <artifactId>mybatis</artifactId>
  4. <version>3.4.5</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>mysql</groupId>
  8. <artifactId>mysql-connector-java</artifactId>
  9. <version>5.1.6</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>log4j</groupId>
  13. <artifactId>log4j</artifactId>
  14. <version>1.2.12</version>
  15. </dependency>
  16. <dependency>
  17. <groupId>junit</groupId>
  18. <artifactId>junit</artifactId>
  19. <version>4.10</version>
  20. </dependency>

3)创建实体类和dao的接口

  1. //按照数据库中表的属性名创建
  2. private Integer id;
  3. private String username;
  4. private Date birthday;
  5. private String sex;
  6. private String address;
  7. public Integer getId() {
  8. return id;
  9. }
  10. public void setId(Integer id) {
  11. this.id = id;
  12. }
  13. public String getUsername() {
  14. return username;
  15. }
  16. public void setUsername(String username) {
  17. this.username = username;
  18. }
  19. public Date getBirthday() {
  20. return birthday;
  21. }
  22. public void setBirthday(Date birthday) {
  23. this.birthday = birthday;
  24. }
  25. public String getSex() {
  26. return sex;
  27. }
  28. public void setSex(String sex) {
  29. this.sex = sex;
  30. }
  31. public String getAddress() {
  32. return address;
  33. }
  34. public void setAddress(String address) {
  35. this.address = address;
  36. }
  37. @Override
  38. public String toString() {
  39. return "User{" +
  40. "id=" + id +
  41. ", username='" + username + '\'' +
  42. ", birthday=" + birthday +
  43. ", sex='" + sex + '\'' +
  44. ", address='" + address + '\'' +
  45. '}';
  46. }

接口:

  1. /*
  2. 用户的持久层接口
  3. */
  4. public interface IUserDao {
  5. /*
  6. 查询所有操作
  7. */
  8. List<User> findAll();
  9. }

4)创建MyBatis的主配置文件(SqlMapConfig.xml)

  1. <configuration>
  2. <!-- 配置环境 -->
  3. <environments default="mysql">
  4. <!-- 配置mysql的环境-->
  5. <environment id="mysql">
  6. <!-- 配置事务的类型-->
  7. <transactionManager type="JDBC"></transactionManager>
  8. <!-- 配置数据源(连接池) -->
  9. <dataSource type="POOLED">
  10. <!-- 配置连接数据库的4个基本信息 -->
  11. <property name="driver" value="com.mysql.jdbc.Driver"/>
  12. <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis_study"/>
  13. <property name="username" value="root"/>
  14. <property name="password" value="wh456159"/>
  15. </dataSource>
  16. </environment>
  17. </environments>
  18. <!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 -->
  19. <mappers>
  20. <mapper resource="com/wuhao/dao/IUserDao.xml"/>
  21. </mappers>
  22. </configuration>

5)创建映射配置文件(IUserDao.xml)

  1. <mapper namespace="com.wuhao.dao.IUserDao">
  2. <!--配置查询所有-->
  3. <!--其中属性id ,写接口中方法的名称 -->
  4. <select id="findAll" resultType="com.wuhao.domain.User">
  5. select * from user
  6. </select>
  7. </mapper>

环境搭建的注意事项:

①在MyBatis中它把持久层的操作接口名称和映射文件也叫作:Mapper 所以:IUserDao和IUserMapper是一样的

②在idea中创建目录的时候,它和包是不一样的。

包在创建时: com.wuhao.dao 它是三级结构

目录在创建时:com.wuhao.dao 是一级结构

③MyBatis的映射配置文件位置必须和dao接口的包结构相同

④映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名

⑤映射配置文件的操作配置(select),id属性的取值必须是dao接口的方法名

当我们遵守了③④⑤点之后,就可以在开发中无须再写dao的实现类

2.入门案例

思路流程:

1)读取配置文件来连接数据库

2)创建SqlSessionFactory工厂

3)有了Factory就可以创建SqlSession对象,有了SqlSession对象就可以操作数据库

4)但我们不用SqlSession直接操作而是用Dao操作,所以用SqlSession创建Dao接口的代理对象

5)有了Dao对象就可以实现方法

6)释放资源

注:不要忘记在映射配置中告知MyBatis要封装到哪个实体类中(配置文件中Select 的ResultType属性)

  1. 配置的方式:指定实体类的全限定类名
  2. //1.读取配置文件
  3. InputStream in= Resources.getResourceAsStream("SqlMapConfig.xml");
  4. //2.创建SqlSessionFactory工厂
  5. SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
  6. SqlSessionFactory factory=builder.build(in);
  7. //3.使用工厂生产SqlSession对象
  8. SqlSession session=factory.openSession();
  9. //4.使用SqlSession创建Dao接口的代理对象
  10. IUserDao userDao=session.getMapper(IUserDao.class);
  11. //5.使用代理对象执行方法
  12. List<User> users=userDao.findAll();
  13. for(User user:users){
  14. System.out.println(user);
  15. }
  16. //6.释放资源
  17. session.close();
  18. in.close();

结果:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjA3MDQ3Mw_size_16_color_FFFFFF_t_70 1

入门案例解析:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjA3MDQ3Mw_size_16_color_FFFFFF_t_70 2

创建Dao接口的代理对象的分析:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjA3MDQ3Mw_size_16_color_FFFFFF_t_70 3

#

发表评论

表情:
评论列表 (有 0 条评论,194人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Mybatis学习笔记

    一、引言 1.框架的三层架构     表现层:是用于展示数据(SpringMVC)     业务层:是处理业务需求     持久层:是和数据库交互(MyBati

    相关 Mybatis学习笔记

    学习了Mybatis。相对于hibernate来说这个框架更加灵活,开发效率更快,适用于那些改动比较频繁的项目。 首先加入mybatis的配置文件myBatisConfig.