zoukankan      html  css  js  c++  java
  • mybatis-01

    Mybatis第一天

    1、什么是框架:Framework 模板. 简化开发的工具。
    2、框架学习难度
     2.1 应用 =>简单,编写代码简单。
     2.2 理解 =>了解框架的开发模式,底层实现,源代码解读。
     2.3 开发 =>编写框架,架构师难度。
    3、MyBatis框架
     3.1 历史
      Apache开源组织的开源框架.  iBatis.  版本有1.x和2.x.
      2010年,迁移到google code平台下,更名为MyBatis,版本为3.x
      2014年,迁移到github平台下,沿用命名MyBatis,版本为3.x.
     3.2 框架由来
       3.2.1 快速开发方式 JSP+Servlet+JavaBean开发方式
         免容器启动,可以直接影响开发结果的开发方式.
         结构不完整,维护成本高昂,可复用能力几乎为零.
       3.2.2 MVC架构 JSP+Control开发方式
         技术:JSP+Servlet+JDBC
         优点:结构清晰. 代码部分复用
         缺点:代码结构繁琐, 每次开发有大量重复代码
         重复代码:处理请求参数(getParameter / getParameterValues / getParameterNames),处理文件上传(FileItem),处理文件下载(设置响应类型[application/octet-stream],设置响应头[content-dispositon;attchement;filename=xxxx]),处理AJAX数据返回(java对象->JSON字符串, response.getWriter().print(xxx) response.getWriter().flush())等.
       3.2.3 框架开发(Spring+SpringMVC+MyBatis)
         struts1,hibernate2.x,spring2.x,struts2,iBatis2.x, MyBatis,SpringMVC…….
         优点:使用框架代替基础技术,实现针对性开发(只编写有效的业务代码,减少或杜绝编写重复的逻辑代码). 易于维护,易于升级,扩展
         缺点:学习框架技术,XML配置文件大量出现。
    4、MyBatis框架简介
    mybatis是ORM框架,也可以称为OXM框架。
    MyBatis框架对ORM做了小幅度改动,映射的结果集.不是数据库表和数据,半封装的数据访问层框架。
    所有操作都是针对查询结果集实现的映射机制,就是JDBC中的ResultSet。
    优点:灵活
    缺点:自定义SQL语法
     4.1 什么是ORM?
      Object Relational Mapping 对象,关系型数据库映射。
      将java中的类和数据库的表做映射,将java中的对象和数据库中的行记录做映射,将java对象中的属性和数据库中的字段做映射。
    5、Mybatis入门案例(数据库表user的全局查询)
    1.定义数据库表格

    1 CREATE TABLE `user` (
    2   `userid` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户名ID',
    3   `username` varchar(20) DEFAULT NULL COMMENT '用户姓名',
    4   `userage` int(5) DEFAULT NULL COMMENT '用户年龄',
    5   PRIMARY KEY (`userid`)
    6 ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

    2.提供测试数据

    3.mybatis的环境的搭建
    3.1 资源介绍
    mybatis-x.x.x.jar 框架的核心jar包.
    mybatis-x.x.x.pdf 官方提供的帮助文档, 英文版.
    lib目录 MyBatis框架开发需要的依赖jar包.

    3.2创建简单的Java工程项目并导入相应的jar
    mybatis-3.2.7.jar  mybatis核心包
    lib/*.jar  mybatis所有的依赖包
    数据库驱动包

    3.3 提供核心配置文件
    为了提供数据库访问基础信息的配置文件.
    数据库位置(URL), 登录名(username), 密码(password), 驱动类名(driver)
    模板内容,核心配置文件的头信息从官方帮助文档中摘取.

    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 <configuration>
    6     
    7 </configuration>

     导入离线dtd文件:mybatis-3-config.dtd(提示相应的根标签,快捷开发)

    核心配置文件详情

     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 <configuration>
     6     <!-- 配置数据库环境 -->
     7     <environments default="development">
     8         <environment id="development">
     9             <!-- 配置Mybatis中的事物管理器
    10                    JDBC:使用jdbc的事物来处理
    11                    MANAGED:不做任何事物处理
    12                 -->
    13             <transactionManager type="JDBC" />
    14             <!--数据库连接信息
    15                    type:
    16                        UNPOOLED:直连
    17                        POOLED:池连
    18                        JNDI:使用容器的池连。需要依赖jndi获取连接对象
    19                     -->
    20             <dataSource type="UNPOOLED">
    21                 <!-- 配置连接的具体参数 -->
    22                 <property name="driver" value="com.mysql.jdbc.Driver" />
    23                 <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
    24                 <property name="username" value="root" />
    25                 <property name="password" value="123456" />
    26             </dataSource>
    27         </environment>
    28     </environments>
    29     <!-- 引用映射配置文件 -->
    30     <mappers>
    31     <!-- resource:相对路径查询资源的属性,相当于当前核心配置文件的位置开始查找 -->
    32         <mapper resource="com/boom/pojo/User.xml"/>
    33     </mappers>
    34 </configuration>
    mybatis.xml

    3.4 编写pojo实体类和创建mapper配置映射文件

     1 package com.boom.pojo;
     2 
     3 import java.io.Serializable;
     4 
     5 /**
     6  * 实体对应的数据库表
     7  * @project_name mybatis-01 
     8  * @class_name User
     9  * @author Dilraba
    10  */
    11 public class User implements Serializable {
    12     
    13     private Integer userid;//用户名ID
    14     private String username;//用户姓名
    15     private Integer userage;//用户年龄
    16     
    17     public Integer getUserid() {
    18         return userid;
    19     }
    20     public void setUserid(Integer userid) {
    21         this.userid = userid;
    22     }
    23     public String getUsername() {
    24         return username;
    25     }
    26     public void setUsername(String username) {
    27         this.username = username;
    28     }
    29     public Integer getUserage() {
    30         return userage;
    31     }
    32     public void setUserage(Integer userage) {
    33         this.userage = userage;
    34     }
    35     public User(Integer userid, String username, Integer userage) {
    36         super();
    37         this.userid = userid;
    38         this.username = username;
    39         this.userage = userage;
    40     }
    41     
    42     public User() {
    43         super();
    44     }
    45     
    46     @Override
    47     public String toString() {
    48         return "User [userid=" + userid + ", username=" + username + ", userage=" + userage + "]";
    49     }
    50     
    51 }
    user-pojo

    mapper映射配置文件的头信息

    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>
    6     
    7 </mapper>

    mapper配置信息的详情(简单的SQL语句的编写)

    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="suibian">
    6     <select id="selectUserAll" resultType="com.boom.pojo.User">
    7         select * from user;
    8     </select>
    9 </mapper>
    user.xml

    3.5 MyBatis工厂工具类 MyBatisUtils

     1 package com.boom.util;
     2 
     3 import java.io.InputStream;
     4 
     5 import org.apache.ibatis.io.Resources;
     6 import org.apache.ibatis.session.SqlSession;
     7 import org.apache.ibatis.session.SqlSessionFactory;
     8 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
     9 
    10 public class MybatisUtil {
    11     private static SqlSessionFactory factory = null;
    12     static{
    13         try {
    14             if(factory == null){
    15                 //通过工具类加载配置文件,返回读取配置文件的IO流
    16                 InputStream is = Resources.getResourceAsStream("suibian.xml");
    17                 //SqlSessionFactoryBuilder创建SqlSessionFactory对象的构建器
    18                 factory = new SqlSessionFactoryBuilder().build(is);
    19             }
    20         } catch (Exception e) {
    21             e.printStackTrace();
    22         }
    23     }
    24     //获取mybatis上下文对象
    25     public static SqlSessionFactory getSqlSessionFactory(){
    26         return factory;
    27     }
    28     //获取SqlSession
    29     public static SqlSession openSession(){
    30         return factory.openSession();
    31     }
    32 }
    MybatisUtil

    3.6 定义DAO层的接口和接口的实现类

     1 package com.boom.dao;
     2 
     3 import java.util.List;
     4 
     5 import com.boom.pojo.User;
     6 
     7 public interface IUserDao {
     8     //查询user表所有的数据
     9     List<User> selectUserAll();
    10     
    11 }
    接口
     1 package com.boom.dao.impl;
     2 
     3 import java.util.List;
     4 
     5 import org.apache.ibatis.session.SqlSession;
     6 
     7 import com.boom.dao.IUserDao;
     8 import com.boom.pojo.User;
     9 import com.boom.util.MybatisUtil;
    10 
    11 public class UserDaoImpl implements IUserDao {
    12 
    13     /**
    14      * 查询user表所有的数据
    15      */
    16     @Override
    17     public List<User> selectUserAll() {
    18         SqlSession session = MybatisUtil.openSession();
    19         return session.selectList("selectUserAll");
    20     }
    21     
    22 }
    接口实现类

     3.7 编写测试类测试代码

     1 package com.boom.test;
     2 
     3 import java.io.IOException;
     4 import java.io.InputStream;
     5 import java.util.List;
     6 
     7 import org.apache.ibatis.io.Resources;
     8 import org.apache.ibatis.session.SqlSession;
     9 import org.apache.ibatis.session.SqlSessionFactory;
    10 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    11 
    12 import com.boom.dao.IUserDao;
    13 import com.boom.dao.impl.UserDaoImpl;
    14 import com.boom.pojo.User;
    15 
    16 public class MybatisTest {
    17 
    18     public static void main(String[] args) {
    19         
    20         /*
    21         //1.指定配置文件的名称与路径
    22         String resource = "suibian.xml";
    23         try {
    24             //2.通过工具类加载配置文件,返回读取配置文件的IO流
    25             InputStream is = Resources.getResourceAsStream(resource);
    26               //3  1.SqlSessionFactoryBuilder创建SqlSessionFactory对象的构建器
    27               //   2.SqlSessionFactory:mybatis上下文对象,
    28             SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
    29             SqlSession session = factory.openSession();
    30             List<User> list = session.selectList("selectUserAll");
    31             for (User user : list) {
    32                 System.out.println(user);
    33             }
    34         } catch (IOException e) {
    35             e.printStackTrace();
    36         }
    37         */
    38         
    39         IUserDao ud = new UserDaoImpl();
    40         List<User> list = ud.selectUserAll();
    41         for (User user : list) {
    42             System.out.println(user);
    43         }
    44     }
    45 
    46 }
    MybatisTest

    测试结果

     查询单条数据mapper写法:

    1 <select id="selectById" parameterType="int" resultType="com.boom.pojo.User">
    2     select * from user where userid = #{userid}
    3 </select>

    dao接口和实现类

    1 //根据id查询数据
    2 User selectById(Integer userid);
    1 /**
    2  * 根据id查询数据
    3  */
    4 @Override
    5 public User selectById(Integer userid) {
    6     SqlSession session = MybatisUtil.openSession();
    7     return session.selectOne("selectById", userid);
    8 }

    测试类及结果:

    1 //根据id查询数据
    2 IUserDao ud = new UserDaoImpl();
    3 User selectById = ud.selectById(new Integer(1));
    4 System.out.println(selectById);

    4、MyBatis框架中的常用查询方法
    selectList
    查询多数据的方法.
    方法定义: <T> List<T> selectList(String statement);
    参数:statement - 映射文件中SQL语法对应的标签的ID属性值.
    返回值:查询结果
    有查询结果,返回对应长度的集合.
    无查询结果,返回长度为0的集合对象.
    selectOne
    查询单一数据的方法.
    方法定义:<T> T selectOne(String statement);
    参数:statement - 映射文件中SQL语法对应标签的ID
    返回值:查询结果
    无查询结果,返回null
    唯一查询结果,返回对象
    多查询结果数据,抛出异常.
    5、初试查询结果的映射
    MyBatis的映射是针对ResultSet实现的映射关系.
    MyBatis(所有的数据访问层框架)底层使用的技术都是JDBC.
    可以通过分析ResultSet内容数据,实现映射.
    MyBatis框架的默认映射规则是:
    根据ResultSet中的字段名作为标准, 查询resultType类型中的property,或field,做数据的设置.
    MyBatis忽略property/field的字母大小写.

  • 相关阅读:
    D. Constructing the Array
    B. Navigation System
    B. Dreamoon Likes Sequences
    A. Linova and Kingdom
    G. Special Permutation
    B. Xenia and Colorful Gems
    Firetrucks Are Red
    java getInstance()的使用
    java 静态代理和动态代理
    java 类加载机制和反射机制
  • 原文地址:https://www.cnblogs.com/cao-yin/p/10060611.html
Copyright © 2011-2022 走看看