mybatis配置解析

Posted XiaoMa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis配置解析相关的知识,希望对你有一定的参考价值。

一.引言:参考官方文档mybatis中提供了如下的配置,其中标红的需要掌握,其余的作为了解即可

二:配置解析之前的环境准备:进行配置之前要先有这几个东西,包括数据库表、Mybatis全局配置文件、实体类、mapper接口、mapper配置文件、用来连接数据库的工具类

  1.建库建表

 
    
 
 
 ;
 
 ;
 
 ;
 ;
 ;
 ;
 CREATE DATABASE `mybatis` ;
 
 USE `mybatis`;
 
 
 
 DROP TABLE IF EXISTS `user`;
 
 CREATE TABLE `user` (
   `id` int(20) NOT NULL,
   `name` varchar(30) DEFAULT NULL,
   `pwd` varchar(30) DEFAULT NULL,
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
 
 
 insert  into `user`(`id`,`name`,`pwd`) values (1,\'xiaoma\',\'123\'),(2,\'zhangsan\',\'1234\'),(3,\'lisi\',\'12345\'),(4,\'王五\',\'1234\'),(5,\'王六\',\'123456\'),(6,\'王五\',\'123456\');
 
 ;
 ;
 ;
 ;

  2.新建一个maven项目,在resources文件夹下新建一个mybatis-config.xml全局配置文件

 <?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.jdbc.Driver"/>
                 <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                 <property name="username" value="root"/>
                 <property name="password" value="123456"/>
             </dataSource>
         </environment>
     </environments>
     <mappers>
         <mapper resource="com/xiaoma/mapper/UserMapper.xml"/>
     </mappers>
 </configuration>

  3.在java文件夹下新建一个util文件夹,用来存放工具类,在util文件夹下新建一个MybatisUtils.java的工具类

 package com.xiaoma.utils;
 
 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;
 
 public class MybatisUtils {
     private static SqlSessionFactory sqlSessionFactory;
 
     //1.获取sqlSessionFactory对象
     static{
         try {
             String resource="mybatis-config.xml";
             //以流的方式去读取配置文件信息
             InputStream inputStream= Resources.getResourceAsStream(resource);
             //拿到sqlSessionFactory才能吧执行sql的东西生产出来,通过SqlS essionFactoryBuilder去构建这个流
             sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
         } catch (IOException e) {
             e.printStackTrace();
         }
     }
 
     //既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例
     //SqlSession 提供了在数据库执行 SQL 命令所需的所有方法
     public static SqlSession getSession(){
         return sqlSessionFactory.openSession();
     }
 }

  4.在java文件夹下新建一个pojo文件夹,用来存放实体类,在pojo文件夹下新建一个名为User的实体类

 package com.xiaoma.pojo;
 
 import lombok.Data;
 
 @Data
 public class User {
     private int id;
     private String name;
     private String pwd;
 
     public User() {
     }
 
     public User(int id, String name, String pwd) {
         this.id = id;
         this.name = name;
         this.pwd = pwd;
     }
 }

  5.在java文件夹下新建一个mapper文件夹,用来存放mapper接口和配置文件,在mapper文件夹下新建一个名为UserMapper的接口,接口中包括简单的增删改查

 package com.xiaoma.mapper;
 
 import com.xiaoma.pojo.User;
 import java.util.List;
 
 public interface UserMapper {
     //查询所有用户
     List<User> selectUser();
 
     //根据id查询用户
     User getUserById(int id);
 
     //插入用户到user表
     int insertUser(User user);
 
     //根据用户名修改用户密码
     int updataUser(User user);
 
     //根据用户名删除用户
     int deleteUser(String name);
 }

  6.在mapper文件夹下新建一个名为UserMapper.xml的配置文件,包括增删改查的实现,也就是写sql

 <?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 namespace="com.xiaoma.mapper.UserMapper">
     <!--查询所有用户-->
     <select id="selectUser" resultType="com.xiaoma.pojo.User">
         select * from user
     </select>
 
     <!--根据id查询用户-->
     <select id="getUserById" resultType="com.xiaoma.pojo.User">
         select * from user where id=#{id}
     </select>
     
     <!--向user表插入一个用户-->
     <insert id="insertUser" parameterType="map">
         insert into user(id,name,pwd) values(#{id},#{name},#{pwd})
     </insert>
 
     <!--根据用户名修改用户密码-->
     <update id="updataUser" parameterType="com.xiaoma.pojo.User">
         update user set pwd=#{pwd} where name=#{name}
     </update>
 
     <!--根据用户名删除用户-->
     <delete id="deleteUser" parameterType="com.xiaoma.pojo.User">
         delete from user where name=#{name}
     </delete>
 </mapper>

 

三:配置解析—环境配置(Environments)

  1.MyBatis可以在environments配置多个environment,每一个environment都配一个唯一标识id,通过environments中的default属性绑定environment的id进行环境的切换(注意:多个环境的时候,MyBatis只能选择一种环境)

  2.MyBatis中有两种事务管理器,一个是JDBC,一个是MANAGED ,默认的事务管理器是JDBC,MANAGED 这个事务管理器一般不去用他,因为官方文档告诉我们这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期

  3.MyBatis的默认连接池POOLED

 

四:配置解析—属性配置(Properties)

  1.在MyBatis01这个demo中,我把配置都包含在了全局配置文件(mybatis-config.xml)中,现在可以通过优化属性,动态获取driver,url,username等信息

  2.第一步就是在resources文件夹下先建立一个db.properties文件,里边包含driver,url,username,password等信息

 driver=com.mysql.jdbc.Driver
 url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
 username=root
 password=123456

  3.在全局配置文件中引入外部配置文件,然后通过${}的形式去绑定db.properties文件中的值

 <!--引入外部配置文件-->
 <properties resource="db.properties"/>
 <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>

  4.在java文件夹下新建一个mybatis02的测试文件,编写测试代码,这里就以查询所有用户为例

 package com.xiaoma;
 
 import com.xiaoma.mapper.UserMapper;
 import com.xiaoma.pojo.User;
 import com.xiaoma.utils.MybatisUtils;
 import org.apache.ibatis.session.SqlSession;
 import org.junit.Test;
 
 import java.util.List;
 
 public class MyTest02 {
     @Test
     public void selectAllUser(){
         SqlSession session = MybatisUtils.getSession();
         UserMapper mapper = session.getMapper(UserMapper.class);
         List<User> users = mapper.selectUser();
         for (User user:users) {
             System.out.println(user);
         }
     }
 }

  5.运行效果

 

五:配置解析—别名配置(typeAliases)

  方式1.在mybatis-config.xml这个全局配置文件中添加如下代码,这样的话就可以将UserMapper.xml中的resultType属性从com.xiaoma.pojo.User改为User

 <!--别名配置-->
 <typeAliases>
     <typeAlias type="com.xiaoma.pojo.User" alias="User"></typeAlias>
 </typeAliases>

  方式2.以扫描包的方式去,和方式一的效果是一样的,如果用这个方式,建议将UserMapper.xml中的resultType属性从com.xiaoma.pojo.User改为user时u尽量用小写,不用大写。

 <typeAliases>
2     <package name="com.xiaoma.pojo"/>
3 </typeAliases>

  运行mybatis02测试文件,测试即可。

  注:这两种方式,当实体类比较多可以用第二种,实体类比较少可以用第一种。

 

六:配置解析—设置配置(Setting),参考官方文档,这个地方太特喵的多了https://mybatis.org/mybatis-3/zh/configuration.html#settings

 

七:配置解析—映射配置(mappers):注册绑定我们的mapper文件的

  有几个注意点:

  1.mappers使用class方式和class方式绑定的时候,接口和他的mapper配置文件必须同名

  2.mappers使用class方式和class方式绑定的时候。接口和他的mapper配置文件必须在同一个包下,使用resource不用注意这两种情况

以上是关于mybatis配置解析的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis-Plus中的代码生成器AutoGenerator超详细解析!完整配置!

Mybatis-Plus中的代码生成器AutoGenerator超详细解析!完整配置!

Mybatis-Plus中的代码生成器AutoGenerator超详细解析!完整配置!

Mybatis-Plus中的代码生成器AutoGenerator超详细解析!完整配置!

2-6 Mybatis-Plus配置和代码生成器解析

13.3.2 完整的MBG配置文件(MyBatis Generator逆向代码生成工具) -《SSM深入解析与项目实战》