zoukankan      html  css  js  c++  java
  • MyBatis01 MyBatis基础知识【搞清楚原理】

     

    1 MyBatis是什么

      mybatis是一个持久层的框架,它对jdbc做了封装;是apache下的顶级项目

      mybatis让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成(半自动化,大部分需要程序员编写sql)满足需要sql语句

      mybatis可以将向 preparedStatement中的输入参数自动进行输入映射,将查询结果集灵活映射成java对象。(输出映射)

    2 如何使用MyBatis

      2.1 导包

        mybatis : mybatis包

        mysql : MySQL数据库驱动包

        junit : 单元测试包

      

      2.2 添加myBatis的配置文件

        配置文件中需要配置的内容

          environment配置

          jdbc事务管理

          数据库连接池

          指定映射文件

     1 <?xml version="1.0" encoding="UTF-8" ?>  
     2 <!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN" 
     3     "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
     4 <configuration>
     5     <!-- 和spring整合后,environment配置将被废除 -->
     6     <environments default="environment">
     7         <environment id="environment">
     8             <!-- 使用jdbc事务管理,事务控制由mybatis实现 -->
     9             <transactionManager type="JDBC" />
    10             <!-- 数据库连接池,由mybatis进行管理 -->
    11             <dataSource type="POOLED">
    12                 <property name="driver" value="com.mysql.jdbc.Driver" />
    13                 <property name="url"
    14                     value="jdbc:mysql://127.0.0.1:3306/xiangxu" />
    15                 <property name="username" value="root" />
    16                 <property name="password" value="182838" />
    17             </dataSource>
    18         </environment>
    19     </environments>
    20     
    21     <!--  指定映射文件的位置(即:加载映射文件)  -->        
    22     <mappers>
    23         <mapper resource="cn/xiangxu/telecom/login/entity/AdminMapper.xml" /> <!-- 注意:包名的 . 全部换成 / -->
    24     </mappers>
    25     
    26 </configuration> 
    配置好的SqlMapConfig.xml

      2.3 写实体类

        要求:实体类的属性名要与表的字段名一致

     1 package cn.xiangxu.telecom.login.entity;
     2 
     3 import java.io.Serializable;
     4 
     5 public class Admin implements Serializable {
     6     private Integer id;
     7     private String name;
     8     private String password;
     9     private String gender;
    10     
    11     public Integer getId() {
    12         return id;
    13     }
    14     public void setId(Integer id) {
    15         this.id = id;
    16     }
    17     public String getName() {
    18         return name;
    19     }
    20     public void setName(String name) {
    21         this.name = name;
    22     }
    23     public String getPassword() {
    24         return password;
    25     }
    26     public void setPassword(String password) {
    27         this.password = password;
    28     }
    29     public String getGender() {
    30         return gender;
    31     }
    32     public void setGender(String gender) {
    33         this.gender = gender;
    34     }
    35     
    36     public String toString() {
    37         return "Admin [id=" + id + ", name=" + name + ", password=" + password + ", gender=" + gender + "]";
    38     }
    39     
    40 }
    编写好的Admin.java

      2.4 写实体类的映射文件

        映射文件主要内容是要执行的sql

     1 <?xml version="1.0" encoding="UTF-8" ?>  
     2 <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"      
     3  "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
     4 
     5 <mapper namespace="login">
     6     <insert id="insert" parameterType="cn.xiangxu.telecom.login.entity.Admin">
     7     <!-- 注意:parameterType的属性值一定要写上类名(基本类型除外) -->
     8         INSERT INTO admin
     9         (name, password, gender)
    10         VALUES(#{name}, #{password}, #{gender})
    11     </insert>    
    12     
    13     <select id="findAll" resultType="cn.xiangxu.telecom.login.entity.Admin">
    14         SELECT * FROM admin
    15     </select>
    16 </mapper>
    配置好的AdminMapper.xml

      2.5 使用myBatis提供的api来访问数据库

     1 package test;
     2 
     3 import java.io.Serializable;
     4 import java.util.List;
     5 
     6 import org.apache.ibatis.session.SqlSession;
     7 import org.apache.ibatis.session.SqlSessionFactory;
     8 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
     9 import org.junit.Before;
    10 import org.junit.Test;
    11 
    12 import cn.xiangxu.telecom.login.entity.Admin;
    13 
    14 public class TestCase implements Serializable {
    15     private SqlSession sqlSession;
    16     @Before
    17     public void init() {
    18 //        获得SqlSession对象
    19         SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
    20         SqlSessionFactory ssf = ssfb.build(TestCase.class.getClassLoader().getResourceAsStream("SqlMapConfig.xml"));
    21 //        SqlSession是执行sql的容器
    22         sqlSession = ssf.openSession();
    23         /*
    24          * 注意:
    25          *         getResourceAsStream 将文件找到并变成输入流
    26          */
    27     }
    28     
    29     @Test
    30 //    测试插入数据
    31     public void test01() {
    32         Admin admin = new Admin();
    33         admin.setName("warrior");
    34         admin.setPassword("182838");
    35         admin.setGender("Man");
    36         sqlSession.insert("login.insert", admin);
    37         
    38         sqlSession.commit();
    39         sqlSession.close();
    40     }
    41     
    42     @Test
    43 //    测试查询所有数据
    44     public void test02() {
    45         List<Admin> lists = sqlSession.selectList("login.findAll");
    46         for(Admin admin : lists) {
    47             System.out.println(admin);
    48         }
    49         sqlSession.close();
    50     }
    51 }
    利用MyBatis提供的API访问数据库源代码

    3 MyBatis工作原理

      

    4 查询结果放回Map类型

      mybatis会将查询到的记录先转换成对应的Map 对象(以字段名作为key,以字段值作为value。 一条记录对应一个Map)。然后再将Map中的数据 存放到对应的实体对象里面。

      

      如果想要结果返回Map类型,仅仅需要修改resultType的属性值就可以啦

    5 解决实体类的属性与表的字段名不一致

      5.1 使用别名实现

        在sql语句中使用别名,别名和实体类的字段名保持一致

      5.2 使用resultMap元素实现

     

    本博客源码下载:点击前往

  • 相关阅读:
    poj_2417 (baby_step,giant_step算法)
    多校第4场1012
    欧拉回路小结:hihocoder49,50,51
    xor问题的小结(HDU_5269 && HDU_5270 && NEU_1600)
    2015年大连邀请赛F题
    字符串处理——Tire树__LA3942
    15陕西省赛——数学题——n维空间切d刀共能分成多少份???
    ACM荣耀之路;
    选课时间!
    二叉树模板!
  • 原文地址:https://www.cnblogs.com/NeverCtrl-C/p/6871564.html
Copyright © 2011-2022 走看看