MyBatis学习(1)

MyBatis-【第一天】

1.环境:

JDK,MySql,maven,IDEA

2.简介

2.1什么是mybatis

  • MyBatis 是一款优秀的持久层框架
  • 它支持自定义 SQL、存储过程以及高级映射。
  • MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
  • MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

如何获得mybatis:

github

maven :

<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.3</version>
</dependency>

2.2持久化

数据持久化

  • 数据持久化
  • 持久化就是将程序的数据在持久状态和瞬时状态转化的过程
  • 内存:断电即失
  • 数据库,io文件持久化

2.3持久层

  • 完成持久化工作的代码块

  • 层的界限非常明显

2.4为什么需要

  • 方便
  • 简化JDBC代码,框架实现,自动化
  • 帮助程序员将数据存入数据库中
  • 将sql和代码分离,提高可维护性
  • 提供映射标签,支持对象与数据库的orm字段的关系映射
  • 提供对象关系映射标签,支持对象关系组建维护
  • 提供xml标签,支持编写动态sql

3.第一个mybatis程序

思路:搭建环境–>导入mybatis–>编写程序

1.搭建环境

<?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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/smbms?serverTimezone=GMT%2B8&amp;useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=true"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

2.编写mybatis工具类

dao层:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!--namespace绑定dao层相应的抽象类,id绑定方法-->
<mapper namespace="com.fish.dao.UserDao">
    <select id="getUserList" resultType="com.fish.pojo.User">
        select * from smbms.smbms_user
    </select>

</mapper>

pojo层

3.测试

代码:

    @Test
    public void test(){
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        List<User> userList = mapper.getUserList();
        for (User user:userList){
            System.out.println(user);
        }
    }
  • 1.出现错误

  • mapper未注册:

  •     <mappers>
            <mapper resource="com/fish/dao/UserMapper.xml"></mapper>
        </mappers>
    
    1. mapperRegistry异常—>pom.xml文件中添加过滤
  • <!--    解决xml文件无法被导出的问题-->
        <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>
    
    

4.作用域(Scope)和生命周期

SqlSessionFactoryBuilder

这个类可以被实例化、使用和丢弃,一旦创建了 SqlSessionFactory,就不再需要它了

SqlSessionFactory

SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例

SqlSession

每个线程都应该有它自己的 SqlSession 实例。SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。

每次打开sqlSession后都要记得关闭

5.万能map和模糊查询

  • map传递参数,直接在sql中取出key即可

  • 对象传递参数时,直接在sql中取出对象的属性即可

  • 只有一个基本类型参数的情况下,可以直接在sql中取到

  • 多个参数使用map或者注解

模糊查询

    <select id="getUserByName" parameterType="String" resultType="com.fish.pojo.User">
        select * from smbms.smbms_user where userName like "%"#{name}"%"
    </select>

6.配置解析

6.1环境配置

  • MyBatis 可以配置成适应多种环境

  • 尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境

  • 每个数据库对应一个 SqlSessionFactory 实例

6.1.1事务管理器(transactionManager)
  • JDBC – 这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域。

  • MANAGED – 这个配置几乎没做什么

6.1.2数据源(dataSource)
  • UNPOOLED:没有池化技术
  • POOLED:有池化技术
  • JNDI:为了能在如 EJB 或应用服务器这类容器中使用

6.2属性(properties)

可以通过properties属性来实现引用配置文件

    <properties resource="db.properties"></properties>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/smbms?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&useSSL=true
username=root
password=123456

注意:idea中properties属性文件中url命名已经被使用,需要改变名字才能正常连接数据库

6.3类型别名

作用:类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写

实体类少的时候可以使用:

    <typeAliases>
        <typeAlias type="com.fish.pojo.User" alias="user"></typeAlias>
    </typeAliases>

实体类非常多时可以使用:

    <typeAliases>
        <package name="com.fish.pojo"/>
    </typeAliases>

在使用这种方法时,默认pojo类的首字母小写当作别名,若在pojo类上添加注解,则使用注解别名

@Alias("userAlias")
public class User {}

默认基本类型的别名映射

别名映射的类型
_bytebyte
_longlong
_shortshort
_intint
_integerint
_doubledouble
_floatfloat
_booleanboolean
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值