资讯详情

Mybatis

2020年9月10日19:29:16

一、什么是Mybatis

1.1、什么是mybatis

  • Mybatis是优秀的
  • 他支持定制化SQL、存储过程和高级映射。
  • MyBatis几乎所有的避免JDBC代码、手动设置参数和获取结果集。
  • Mybatis使用简单XML或注释配置和映射原始类型java的POJO(Plain Old java Objects,普通老式java对象)是数据库中的记录。
  • Mybatis本是apache开源项目iBtis,这个项目是2010年的原因Apache software foundation前移到了google code,并且改名为MaBatis。
  • 2013年11月迁移到GItHub。

1.2、持久化

数据持久性:是程序数据的过程。

  • 状态,如数据库(JDBC),IO文件持久。

  • 状态:如内存,

  • 冷藏在生活中也是一种持久性。

为什么需要持久化?

  • 避免断电丢失
  • 内存太贵

1.3、持久层

Dao层、Service层、Controller层

  • 持久工作的王朝代码块
  • 层界线明显

1.4.为什么需要?MyBatis?

二、第一次使用MyBatis程序

2.1、搭建环境

2.1.1、搭建数据

CREATE TABLE `user`  (   `id` int(20) NOT NULL AUTO_INCREMENT,   `name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,   `pws` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,   PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;  INSERT INTO `user` VALUES (1, '悟空', '123'); INSERT INTO `user` VALUES (2, '八戒', '321'); INSERT INTO `user` VALUES (3, '沙僧', '000');  

2.1.2、新建项目

  1. 新建一个maven项目
    • 获取mybatis
      <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->   <dependency>       <groupId>org.mybatis</groupId>       <artifactId>mybatis</artifactId>       <version>3.5.2</version>   </dependency> 
  2. 删除sre文件
  3. 在mop.xml文件中导入maven依赖
<!--导入依赖--> <dependencies>     <!--sql驱动-->         <dependency>             <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.16</version>
        </dependency>

    <!--mybatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.2</version>
        </dependency>

    <!--junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
</dependencies>
<!--防止导包出问题-->
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
</project>

2.2、创建.xml配置文件

  1. 创建module。

    1. 配置mybatis-config.xml文件

      易忘点:

      1. 驱动使在mysql包下的jdbc包里。
      2. useUnicode=true(安全连接)
      3. useUnicode=true(Unicode编码可以正常输出,作用:可以使用中文)
      4. characterEncoding=UTF-8(解决了读取数据库产生的数据乱码的问题,从数据库读数据和写数据时MySQL的默认编码非UTF8编码,需要设置字符集编码为utf8 )
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">

<!--configuration核心配置-->
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <!-- 与&同意 Unicode编码可以正常显示中文 时区-->
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=Asia/Shanghai"/>
                <property name="username" value="root"/>
                <property name="password" value="123"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/lyx/mapper/StuMapper.xml"/>
    </mappers>
</configuration>
  1. 编写MyBatis工具类

package main.java.com.lyx.dao;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

/** * 工具类 * 获取sqlSessionFactory --> sqlSession */

public class MybatisUtils { 
        
    //提升作用域
    private static SqlSessionFactory  sqlSessionFactory;
    static { 
        
        try { 
        
            //使用MyBatis第一步: 获取sqlSessionFactory对象
            String resource = "org/mybatis/example/mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) { 
        
            e.printStackTrace();
        }
    }
    //有了sqlSessionFactory对象,获取到SqlSession的实例了。
    //SqlSession中包含了面向数据库执行Sql命令的所有方法。
    public static SqlSession getSqlSession(){ 
        
        return sqlSessionFactory.openSession();
    }
}

2.3、编写代码

2.4、测试

注意点:

  • 测试类最好写在与被测试类的路径类似
package com.lyx;

import com.lyx.mapper.StuMapper;
import com.lyx.pojo.Stu;
import com.lyx.util.StuUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class StuTest { 
        
    @Test
    public void  test(){ 
        
        //调用util中的getSession方法获取到sqlSession方法
        SqlSession sqlSession = StuUtil.getSqlSession();
        //调用sqlSession方法获取
        StuMapper mapper = sqlSession.getMapper(StuMapper.class);
        List<Stu> stu = mapper.getStu();
        System.out.println(stu);
    }
    @Test
    public void TestId(){ 
        
        SqlSession sqlSession = mybatisUtil.getSqlSession();
        StuMapper mapper = sqlSession.getMapper(StuMapper.class);
        List<Stu> stuId = mapper.getStuId(1);
        System.out.println(stuId);
        sqlSession.close();
    }
}

  • 总结:失败的原因只有一个那就是懒性

三、拓展

1、万能的Map

接口

 //Map测试
    int addMap(Map<String,Object> map);

接口xml文件

<!--测试Map-->
    <insert id="addMap" parameterType="map" >
        insert into mybatis.stu (id,name,age) values (#{a},#{b},#{c})
    </insert>

测试

@Test
    public void addMap(){ 
        
        SqlSession sqlSession = mybatisUtil.getSqlSession();
        StuMapper mapper = sqlSession.getMapper(StuMapper.class);
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("a",5);
        map.put("b","Map测试!");
        map.put("c",333333);
        mapper.addMap(map);
        sqlSession.commit();
        sqlSession.close();
    }

##2、模糊查询

//接口代码
	//模糊查询
    List<Stu> getStuN(String name);

//接口.xml代码
 <select id="getStuN"  resultType="com.lyx.pojo.Stu">
        select * from mybatis.stu where name like "%"#{ 
        name}"%"
    </select>

//测试
    @Test
    public void getStuN(){ 
        
        SqlSession sqlSession = mybatisUtil.getSqlSession();
        StuMapper mapper = sqlSession.getMapper(StuMapper.class);
        List<Stu> stuN = mapper.getStuN("李");
        System.out.print(stuN);
        sqlSession.close();
    }

四、配置优化

4.1、属性

  1. 在resources中新建.properties文件
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&&characterEncoding=UTF-8&&serverTimezone=Asia/Shanghai
username=root
password=123
  1. 在mybatis-config。xml文件中导入
<!-- 方式一 -->
<properties resource="db.properties"/>


<!-- 方式二 -->
<properties resource="org/mybatis/example/config.properties">
    
  <property name="username" value="dev_user"/>
  <property name="password" value="F2Fa3!33TYyg"/>
</properties>
  • 注意点:

    ①.properties文件和.xml数据库连接的url部分中的&&的解读方式不一样,在.xml文件中&amp; ,在.properties文件应该被写成&&

​ ②在xml文件中所有的标签都有其对应的位置。

​ ③方式二优先执行外部映入文件中的内容。

4.2、别名

  • 类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写。
  1. 实体类别名 (mybatis的mapper层是是不能起别名的)
  <!-- mybatis文件中配置 配置别名-->
    <typeAliases >
        <typeAlias type="lyx.pojo.Stu" alias="Stu"/>
    </typeAliases>

<!--接口.xml文件中使用-->
    <select id="getStu" resultType="Stu">
    select * from stu
    </select>
  1. 包别名:指定一个包名,MyBatis 会在包名下面搜索需要的
<!-- mybatis文件中配置 -->
<typeAliases>
	<package name="com.lyx.mapper"/>
</typeAliases>	
  • 注意点:

    • 在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名 。

    • 接口不可以使用第一种方法。(namespace属性:在MyBatis中,Mapper中的namespace用于绑定Dao接口的,即面向接口编程。

      它的好处在于当使用了namespace之后就可以不用写接口实现类,业务逻辑会直接通

标签: 2237zjbm圆形连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司