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的字母大小写.

  • 相关阅读:
    小技巧
    常用的交互设计软件
    Android studio 使用SVN需要忽略的文件
    android studio 使用SVN 锁定文件,防止别人修改(基于Android studio 1.4 )
    git 和 github 关系?
    Double 数据保留两位小数一:五舍六入
    设计模式
    Java中关于日期类那些方法
    ios 开源免费接口
    华为招聘机试整理5:简单四则运算
  • 原文地址:https://www.cnblogs.com/cao-yin/p/10060611.html
Copyright © 2011-2022 走看看