MyBatis学习笔记 初步

梦想与她 提交于 2019-11-30 23:07:14
1.框架:
    Def:它是我们软件开发中的一套解决方案,不同的框架解决的是不同的问题。 
        Mybatis解决的是持久层的问题 https://blog.csdn.net/ycgslh/article/details/80050025
  使用框架的好处:
    框架封装了很多的细节,使开发者可以使用极简的方式实现功能。大大提高开发效率。
    

 


 

2.三层架构
    表现层:展示数据                                     类似JSP            
    业务层:处理业务需求                                  类似Service层 
    持久层:与数据库交互                                  类似DAO层

    
    JDBC技术:
            Connection
            PreparedStatement
            ResultSet
    Spring的JdbcTemplate:
            Spring中对jdbc的简单封装
    Apache的DBUtils:
            它和Spring的jdbcTemplate很像,也是对jdbc的简单封装
    以上这些都不是框架
            JDBC是规范
            Spring的JdbcTemplate和Apache的DBUtils都只是工具类
3.mybatis的概述

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

mybatis通过配置.xml或注解的方式将要执行的各种Statement配置起来,并通过java对象和Statement中的sql的动态参数进行映射,生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成为java对象并返回。

方法:ORM(Object Relational Mappging 对象关系映射)  ------>解决实体和数据库映射的问题

简单的说:
    就是把数据库表和实体类及实体类的属性对应起来
    让我们可以操作实体类就实现操作数据库表。
    要将实体类中的属性(私有属性需要有get、set方法)和数据库表的字段名保持一致。   使其得以映射
        注意:命名规则:小驼峰的大写字母会自动更改成_+其小写字母 eg:realName  -- >   real_name
(在eclipse中需打开setting的开关 不然无法找到)
4.建立简单MyBatis项目
  4.1.打开idea 建立maven文件
  4.2.在pom.xml中配置打包方式和依赖  这个依赖不只要配置mybatis的,由于是对数据库的操作,因此也需要配置mysql的依赖

 


   4.3 创建实体类和Dao接口

  建立model包 创建UserModel类 
   与数据库表中字段对应创建属性 即可自动映射
   生成get()、set()、toString()方法
 1 package model;
 2 
 3 import java.io.Serializable;
 4 import java.util.Calendar;
 5 
 6 public class UserModel implements Serializable {
 7     private Integer id;
 8     private String userName;
 9     private Calendar birthday;
10     private String sex;
11     private String address;
12     @Override
13     public String toString() {
14         return "UserModel{" +
15                 "id=" + id +
16                 ", userName='" + userName + '\'' +
17                 ", birthday=" + birthday +
18                 ", sex='" + sex + '\'' +
19                 ", address='" + address + '\'' +
20                 '}';
21     }
22 
23     public Integer getId() {
24         return id;
25     }
26 
27     public void setId(Integer id) {
28         this.id = id;
29     }
30 
31     public String getUserName() {
32         return userName;
33     }
34 
35     public void setUserName(String userName) {
36         this.userName = userName;
37     }
38 
39     public Calendar getBirthday() {
40         return birthday;
41     }
42 
43     public void setBirthday(Calendar birthday) {
44         this.birthday = birthday;
45     }
46 
47     public String getSex() {
48         return sex;
49     }
50 
51     public void setSex(String sex) {
52         this.sex = sex;
53     }
54 
55     public String getAddress() {
56         return address;
57     }
58 
59     public void setAddress(String address) {
60         this.address = address;
61     }
62 }

 1 package dao;
 2 
 3 /*
 4 * 用户的持久层接口
 5 * */
 6 
 7 import model.UserModel;
 8 
 9 import java.util.List;
10 
11 public interface UserDao {
12     /*
13     * 获取全部列表 即查询所有操作
14     * @return List<UserModel>
15     * */
16     List<UserModel> list();
17 }

  4.4 创建Mybatis的主配置文件 my.xml

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <!DOCTYPE configuration
 3         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4         "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5 <!--mybaits的主配置文件-->
 6 <configuration>
 7     <!--配置环境-->
 8     <!--default的名称自定义 但是必须要在id里进行声明-->
 9     <environments default="development">
10         <!--配置mysql环境-->
11         <environment id="development">
12             <!--配置事务类型-->
13             <!-- 一般J2EE服务器支持三种类型的事务管理。即:JDBC事务,JTA事务,容器管理事务。 -->
14             <transactionManager type="JDBC"></transactionManager>
15             <!--配置数据源(连接池)-->
16             <dataSource type="POOLED">
17                 <!--配置连接数据库的4个基本信息-->
18                 <property name="driver" value="com.mysql.jdbc.Driver"/>
19                 <property name="url" value="jdbc:mysql://localhost:3306/eesy_mybatis"/>
20                 <property name="username" value="root"/>
21                 <property name="password" value="123456"/>
22             </dataSource>
23         </environment>
24     </environments>
25 
26 
27     <!--指定映射配置文件的位置,映射配置文件指的的每个dao独立的配置文件-->
28     <mappers>
29         <mapper resource="config/mybatis/UserDao.xml"></mapper>
30     </mappers>
31 </configuration>
4.5 创建映射配置文件 UserDao.xml
 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper
 3         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 <mapper namespace="config/mybatis/UserDao.xml">
 6     <!--配置查询所有   所以用select标签 id=" " 方法名称 -->
 7     <select id="list" resultMap="">
 8         select * from user ;
 9     </select>
10 </mapper>
环境搭建的注意事项:
第一个:创建IUserDao.xml 和 IUserDao.java时名称是为了和我们之前的知识保持一致。
在Mybatis中它把持久层的操作接口名称和映射文件也叫做:Mapper
所以:IUserDao 和 IUserMapper是一样的
第二个:在idea中创建目录的时候,它和包是不一样的
包在创建时:com.itheima.dao它是三级结构
目录在创建时:com.itheima.dao是一级目录
第三个:mybatis的映射配置文件位置必须和dao接口的包结构相同(三级结构原因)
第四个:映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名
第五个:映射配置文件的操作配置(select),id属性的取值必须是dao接口的方法名

当我们遵从了第三,四,五点之后,我们在开发中就无须再写dao的实现类。
 mybatis的入门案例
    1.读取配置文件
    2.创建SqlSessionFactory工厂
    3.创建SqlSession
    4.创建Dao接口的代理对象
    5.使用代理对象执行dao中的方法
    6.释放资源创建一个MyBatisTest的java类
 1 import dao.UserDao;
 2 import model.UserModel;
 3 import org.apache.ibatis.io.Resources;
 4 import org.apache.ibatis.session.*;
 5 
 6 import java.io.InputStream;
 7 import java.util.List;
 8 
 9 public class MyBatisTest {
10     public static void main(String[] args) throws  Exception{
11 //        1.读取配置文件
12         InputStream in=Resources.getResourceAsStream("config/mybatis/my.xml");                //自己根据自己所建的项目目录进行创建
13 //        2.创建工厂对象
14         SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
15 //        3.创建SqlSession
16         SqlSession session = factory.openSession();
17 //        4.创建Dao接口的代理对象
18         UserDao userDao=session.getMapper(UserDao.class);
19 //        5.使用代理对象执行dao中的方法
20         List<UserModel> userDaoList=userDao.list();
21         for(UserModel userModel: userDaoList){
22             System.out.println(userModel);
23         }
24 //        6.释放资源
25         session.close();
26         in.close();
27     }
28 }

   贴心附上本人目录结构

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!