乐趣区

关于mybatis:Mybatis配置解析

1、外围配置文件

  • mybatis-config.xml
  • Mybatis 的配置文件蕴含了会深深的影响 Mybatis 行为的设置和属性信息

    configuration(配置)properties(属性)settings(设置)typeAliases(类型别名)typeHandlers(类型处理器)objectFactory(对象工厂)plugins(插件)environments(环境配置)environment(环境变量)transactionManager(事务管理器)dataSource(数据源)databaseIdProvider(数据库厂商标识)mappers(映射器)

    1.1、新建 maven 我的项目

    编写工具类

    package com.jialidun.utils;
    
    //sqlSessionFactory--->sqlSession
    public class MybatisUtils{
    
    private static SqlSessionFactory sqlSessionFactory;
    static{
    try{
        // 应用 mybatis 第一步:获取 sqlSessionFactory 对象
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        }catch(IOException e){e.printStackTrace();
        }
    }
    // 既然有了 SqlSessionFactory,顾名思义,咱们能够从中取得 SqlSession 的实例。//SqlSession 提供了在数据库执行 SQL 命令所需的所有办法。public static SqlSession getSqlSession(){return sqlSessionFactory.openSession();
    }
    }

    实体类

    package com.jialidun.pojo;
    
    @Data
    public class User{
    private int id;
    private String name;
    private String pwd;
    }

    接口

    package com.jialidun.dao;
    
    public interface UserDao{
       // 查问全副用户
    List<User> getUserList();
    // 依据 id 查问用户
    User getUserById(int id);
    //insert 一个用户
    int addUser(User user);
    // 批改用户
    int updateUser(User user);
    // 删除用户
    int deleteUser(int id);
    
    }

    mapper.xml 映射文件

    <?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/Mapper 接口 -->
    <mapper namespace="com.jialidun.dao.UserDao">
    
     <!--select 查问语句 -->
    <select id="getUserList" resultType="com.jialidun.pojo.User">
    select * from mybatis.user
    </select>
    
    <select id="getUserById" parameterType="int" resultType="user">
    select * from mybatis.user where id = #{id}
    </select>
    
    <!-- 对象中的属性,能够间接取出来 -->
    <insert id="addUser" parameterType="com.jialidun.pojo.User">
     insert into mybatis.user(id,name,pwd) values(#{id},#{name},#{pwd});
    </insert>
    
    <update id="updateUser" parameterType="com.jialidun.pojo.User">
       update mybatis.user set name=#{name},pwd=#{pwd} where id=#{id};
    </update>
    
    <delete id="deleteUser" parameterType="int">
     delete from mybatis.user where id=#{id};
    
    </delete>
    
    </mapper>
    
    

    测试

    package com.jialidun.dao;
    
    public class UserDaoTest{
    @Test
    public void test(){
        
        // 第一步:取得 SqlSession 对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        
        try{UserDao userDao= sqlSession.getMapper(UserDao.class);
        List<User> userList = userDao.getUserList();
        
        // 形式二://List<User> userList = sqlSession.selectList("com.jialidun.dao.UserDao.getUserList");
        for(User user:userList){System.out.println(user);
        }
        }catch(Exception e){e.printStackTrace();
        }finally{
            // 敞开 SqlSession
            sqlSession.close();}
    
        
    }
    
    @Test
    public void getUserById(){SqlSession sqlSession = MybatisUtils.getSqlSession();
       
       UserMapper mapper = sqlSession.getMapper(UserDao.class);
       
      User user = mapper.getUserById(1);
       System.out,println(user);
       sqlSession.close();}
    
    @Test
    public void addUser(){SqlSession sqlSession = MybatisUtils.getSqlSession();
       
       UserMapper mapper = sqlSession.getMapper(UserDao.class);
       
      int num = mapper.addUser(4,"沙和尚","444555");
       if(num>0){System.out.println("增加用户胜利!");
       
       }
       
       // 提交事务
       sqlSession.commit();
       sqlSession.close();}
    
    @Test
    public void updateUser(){SqlSession sqlSession = MybatisUtils.getSqlSession();
       
       UserMapper mapper = sqlSession.getMapper(UserDao.class);
       
      mapper.updateUser(new User(4,"悟净","666666"));
       // 提交事务
       sqlSession.commit();
       sqlSession.close();}
    
    @Test
    public void deleteUser(){SqlSession sqlSession = MybatisUtils.getSqlSession();
       
       UserMapper mapper = sqlSession.getMapper(UserDao.class);
       
      mapper.deleteUser(4);
      
      // 提交事务
      sqlSession.commit();
      
       sqlSession.close();}
    }

2、环境配置(encironments)

<?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>
    
    <!-- 引入内部配置文件 -->
    <properties resource="db.properties">
        <property name="username" value="root"/>
        <property name="password" value="1111"/>
    </properties>

    <!-- 能够给实体类起别名 -->
    <typeAliases>
        <package name="com.jialidun.pojo"/>
    </typeAliases>

<environments default="development">
  <environment id="development">
    <transactionManager type="JDBC"/>
    <dataSource type="POOLED">
      <property name="driver" value="${driver}"/>
      <property name="url" value="${url}"/>
      <property name="username" value="${username}"/>
      <property name="password" value="${password}"/>
    </dataSource>
  </environment>
</environments>
<mappers>
  <mapper resource="com/jialidun/dao/UserMapper/xml"/>
</mappers>
</configuration>

Mybatis 能够配置成适应多种环境
不过要记住:只管能够配置多个环境,但每个 SqlSessionFactory 实例只能抉择一种环境。
学会应用配置多套运行环境!
Mybatis 默认的事务管理器就是 JDBC,连接池:POOLED

3、属性(properties)

咱们能够通过 properties 属性来实现援用配置文件
这些属性能够在内部进行配置,并能够进行动静替换。你既能够在典型的 Java 属性文件中配置这些属性,也能够在 properties 元素的子元素中设置。【db.properties】

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC%2B+8
username=root
password=root

在外围配置中引入

<!-- 引入内部配置文件 -->
    <properties resource="db.properties">
        <property name="username" value="root"/>
        <property name="password" value="1111"/>
    </properties>
  • 能够间接引入内部文件
  • 能够在其中减少一些属性配置
  • 如果两个文件有同一个字段,优先应用内部配置文件的!

4、typeAliases(类型别名)

  • 类型别名可为 Java 类型设置一个缩写名字
  • 意在升高冗余的全限定类名书写
<!-- 能够给实体类起别名 -->
    <typeAliases>
        <tyoeAlias type="com.jialidun.pojo.User" alias="User"/>
    </typeAliases>

也能够指定一个包名,MyBatis 会在包名上面搜寻须要的 Java Bean,比方:
死奥秘实体类的包,它的默认别名就为这个类的类名,首字母小写!

<!-- 能够给实体类起别名 -->
    <typeAliases>
        <package name="com.jialidun.pojo"/>
    </typeAliases>

在实体类比拟少的时候,应用第一种形式
如果实体类非常多,倡议应用第二种
第一种能够自定义别名,然而第二种不能够自定义,如果非要改,须要在实体类上增加 @Alias(“xxx”)注解

@Alias("user")
public class User{
  private int id;
  private String name;
  private String pwd;
}

5、settings(设置)

这是 MyBatis 中极为重要的调整设置,它们会扭转 MyBatis 的运行时行为。

6、其余配置

  • typeHandlers(类型处理器)
  • objectFactory(对象工厂)
  • plugins(插件)
    mybatis-generator-core
    mybatis-plus
    通用 mapper

    7、映射器(mappers)

    MapperRegistry:注册绑定咱们的 Mapper 文件
    形式一:【举荐应用】

    <mappers>
    <mapper resource="com/jialidun/dao/UserMapper/xml"/>
    </mappers>

    形式二:

    <mappers>
    <mapper class="com.jialidun.dao.UserMapper"/>
    </mappers>

    形式三:应用扫描包进行注入绑定

    <mappers>
    <package name="com.jialidun.dao"/>
    </mappers>

    留神点:

  • 接口和他的 Mapper 配置文件必须同名
  • 接口和他的 Mapper 配置文件必须在对立包下

将数据库配置文件内部引入
实体类别名
保障 UserMapper 接口和 UserMapper.xml 改为统一!并且在同一个包下!

退出移动版