logo资料库

Mybatis的笔记pdf.pdf

第1页 / 共39页
第2页 / 共39页
第3页 / 共39页
第4页 / 共39页
第5页 / 共39页
第6页 / 共39页
第7页 / 共39页
第8页 / 共39页
资料共39页,剩余部分请下载后查看
Mybatis-9.28
1、简介
1.1、什么是Mybatis
1.2、持久化
1.3、持久层
1.4 为什么需要Mybatis?
2、第一个Mybatis程序
2.1、搭建环境
2.2、创建一个模块
2.3、编写代码
2.4、测试
3、CRUD
1、namespace
2、select
3、Insert
4、update
5、Delete
6、分析错误
7、万能Map
8、思考题
4、配置解析
1、核心配置文件
2、环境配置(environments)
3、属性(properties)
4、类型别名(typeAliases)
5、设置
6、其他配置
7、映射器(mappers)
8、生命周期和作用域
5、解决属性名和字段名不一致的问题
1、 问题
2、resultMap
6、日志
6.1、日志工厂
6.2、Log4j
7、分页
7.1、使用Limit分页
7.2、RowBounds分页
7.3、分页插件
8、使用注解开发
8.1、面向接口编程
8.2、使用注解开发
8.3、CRUD
9、Lombok
10、多对一处理
测试环境搭建
按照查询嵌套处理
按照结果嵌套处理
11、一对多处理
环境搭建
按照结果嵌套处理
按照查询嵌套处理
小结
12、动态 SQL
搭建环境
IF
choose (when, otherwise)
trim (where,set)
SQL片段
Foreach
13、缓存 (了解)
13.1、简介
13.2、Mybatis缓存
13.3、一级缓存
13.4、二级缓存
13.5、缓存原理
13.6、自定义缓存-ehcache
练习:29道练习题实战!
Mybatis-9.28 环境: JDK1.8 Mysql 5.7 maven 3.6.1 IDEA 回顾: JDBC Mysql Java基础 Maven Junit   SSM框架:配置文件的。 最好的方式:看官网文档; 1、简介 1.1、什么是Mybatis MyBatis 是一款优秀的持久层框架 它支持定制化 SQL、存储过程以及高级映射。 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。 MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁 移到了google code,并且改名为MyBatis 。 2013年11月迁移到Github。   如何获得Mybatis? maven仓库:    org.mybatis    mybatis    3.5.2 Github : https://github.com/mybatis/mybatis-3/releases
中文文档:https://mybatis.org/mybatis-3/zh/index.html   1.2、持久化 数据持久化 持久化就是将程序的数据在持久状态和瞬时状态转化的过程 内存:断电即失 数据库(Jdbc),io文件持久化。 生活:冷藏. 罐头。 为什么需要需要持久化? 有一些对象,不能让他丢掉。 内存太贵了   1.3、持久层 Dao层,Service层,Controller层…. 完成持久化工作的代码块 层界限十分明显。   1.4 为什么需要Mybatis? 帮助程序猿将数据存入到数据库中。 方便 传统的JDBC代码太复杂了。简化。框架。自动化。 不用Mybatis也可以。更容易上手。 技术没有高低之分 优点: 简单易学 灵活 sql和代码的分离,提高了可维护性。 提供映射标签,支持对象与数据库的orm字段关系映射 提供对象关系映射标签,支持对象关系组建维护 提供xml标签,支持编写动态sql。   最重要的一点:使用的人多! Spring SpringMVC SpringBoot   2、第一个Mybatis程序 思路:搭建环境-->导入Mybatis-->编写代码-->测试! 2.1、搭建环境
搭建数据库 CREATE DATABASE `mybatis`; USE `mybatis`; CREATE TABLE `user`(  `id` INT(20) NOT NULL PRIMARY KEY,  `name` VARCHAR(30) DEFAULT NULL,  `pwd` VARCHAR(30) DEFAULT NULL )ENGINE=INNODB DEFAULT CHARSET=utf8; INSERT INTO `user`(`id`,`name`,`pwd`) VALUES (1,'狂神','123456'), (2,'张三','123456'), (3,'李四','123890') 新建项目 1. 新建一个普通的maven项目 2. 删除src目录 3. 导入maven依赖                                    mysql            mysql-connector-java            5.1.47                                            org.mybatis            mybatis            3.5.2                                    junit            junit            4.12             2.2、创建一个模块 编写mybatis的核心配置文件
                                                                                                                            编写mybatis工具类 //sqlSessionFactory --> sqlSession public class MybatisUtils {    private static SqlSessionFactory sqlSessionFactory;    static{        try {            //使用Mybatis第一步:获取sqlSessionFactory对象            String resource = "mybatis-config.xml";            InputStream inputStream = Resources.getResourceAsStream(resource);            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);       } catch (IOException e) {            e.printStackTrace();       }   }    //既然有了 SqlSessionFactory,顾名思义,我们就可以从中获得 SqlSession 的实例了。    // SqlSession 完全包含了面向数据库执行 SQL 命令所需的所有方法。    public static SqlSession  getSqlSession(){        return sqlSessionFactory.openSession();   } } 2.3、编写代码 实体类 package com.kuang.pojo; //实体类
public class User {    private int id;    private String name;    private String pwd;    public User() {   }    public User(int id, String name, String pwd) {        this.id = id;        this.name = name;        this.pwd = pwd;   }    public int getId() {        return id;   }    public void setId(int id) {        this.id = id;   }    public String getName() {        return name;   }    public void setName(String name) {        this.name = name;   }    public String getPwd() {        return pwd;   }    public void setPwd(String pwd) {        this.pwd = pwd;   }    @Override    public String toString() {        return "User{" +                "id=" + id +                ", name='" + name + '\'' +                ", pwd='" + pwd + '\'' +                '}';   } } Dao接口 public interface UserDao {    List getUserList(); } 接口实现类由原来的UserDaoImpl转变为一个 Mapper配置文件.
                  2.4、测试 注意点: org.apache.ibatis.binding.BindingException: Type interface com.kuang.dao.UserDao is not known to the MapperRegistry. MapperRegistry是什么? 核心配置文件中注册 mappers junit测试 @Test public void test(){    //第一步:获得SqlSession对象    SqlSession sqlSession = MybatisUtils.getSqlSession();    //方式一:getMapper    UserDao userDao = sqlSession.getMapper(UserDao.class);    List userList = userDao.getUserList();    for (User user : userList) {        System.out.println(user);   }    //关闭SqlSession    sqlSession.close(); }   你们可以能会遇到的问题: 1. 配置文件没有注册 2. 绑定接口错误。 3. 方法名不对 4. 返回类型不对 5. Maven导出资源问题
  3、CRUD 1、namespace namespace中的包名要和 Dao/mapper 接口的包名一致! 2、select 选择,查询语句; id : 就是对应的namespace中的方法名; resultType:Sql语句执行的返回值! parameterType : 参数类型!   1. 编写接口 //根据ID查询用户 User getUserById(int id); 2. 编写对应的mapper中的sql语句 3. 测试    @Test    public void getUserById() {        SqlSession sqlSession = MybatisUtils.getSqlSession();        UserMapper mapper = sqlSession.getMapper(UserMapper.class);        User user = mapper.getUserById(1);        System.out.println(user);        sqlSession.close();   } 3、Insert               insert into mybatis.user (id, name, pwd) values (#{id},#{name},#{pwd});     4、update
          update mybatis.user set name=#{name},pwd=#{pwd} where id = #{id} ;     5、Delete           delete from mybatis.user where id = #{id};       注意点: 增删改需要提交事务!   6、分析错误 标签不要匹配错 resource 绑定mapper,需要使用路径! 程序配置文件必须符合规范! NullPointerException,没有注册到资源! 输出的xml文件中存在中文乱码问题! maven资源没有导出问题!   7、万能Map 假设,我们的实体类,或者数据库中的表,字段或者参数过多,我们应当考虑使用Map!    //万能的Map    int addUser2(Map map);               insert into mybatis.user (id, pwd) values (#{userid},#{passWord});       @Test   public void addUser2(){       SqlSession sqlSession = MybatisUtils.getSqlSession();       UserMapper mapper = sqlSession.getMapper(UserMapper.class);       Map map = new HashMap();       map.put("userid",5);       map.put("passWord","2222333");
分享到:
收藏