Bootstrap

MyBatis专栏 - 进阶(引入外部配置文件, 类型参数设置)

01.引入外部properties文件

1, 创建外部配置文件

在工程的resources目录下面创建关于数据库信息的jdbc.properties文件, 内容如下

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

2, 在主配置文件中引入文件

这里引入的是上面刚刚创建的jdbc.properties文件

主配置文件: SqlMapConfig.xml




        
    
    
        
            
            
                
                
                
                
            
        
    

    
        
    

3. 测试

略(使用上一节编写的代码能够正常操作数据库)

02.设置类型别名

第一种方式: 单个定义

主配置文件: SqlMapConfig.xml


    
        
    

Mapper配置文件: resources/com/nengli51/UserDao.xml文件


    
    
    

    
        insert into user
        values (null, #{username}, #{sex}, #{birthday}, #{address})
    

    
        delete
        from user
        where uid = #{uid}
    

    
        update user
        set username=#{username},
            sex=#{sex},
            birthday=#{birthday},
            address=#{address}
        where uid = #{uid}
    

第二种方式: 指定文件或者指定路径

原理: 设置package为别名, 则该package目录下的类型文件都可以被直接缩写使用

    
        

        

        
        
    

03.抽取SQLSessionFactory为单例

package com.nengli51.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;

/**
 * @Date 2021/2/5
 */
public class MyBatisUtils {

    private static SqlSessionFactory sqlSessionFactory = null;
    static{
        InputStream is = null;
        try {
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
            is = Resources.getResourceAsStream("SqlMapConfig.xml");
            sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 获取SqlSessionFactory
     */
    public static SqlSessionFactory getSqlSessionFactory(){
        return sqlSessionFactory;
    }

    /**
     * 提交事务, 关闭SqlSession
     */

    public static void commitAndClose(SqlSession sqlSession){
        sqlSession.commit();
        sqlSession.close();
    }

    public static void rollbackAndClose(SqlSession sqlSession){
        sqlSession.rollback();
        sqlSession.close();
    }
}

测试使用

@Test
public void testSingleInstance(){
    SqlSession sqlSession = MyBatisUtils.getSqlSessionFactory().openSession();
    UserDao userDao = sqlSession.getMapper(UserDao.class);
    List all = userDao.findAll();
    for (User user : all) {
        System.out.println(user);
    }
    MyBatisUtils.commitAndClose(sqlSession);
}

04.parameterType深入

1, SQL语句需要一个参数: 使用简单数据类型参数

2, 多个参数: (1), 使用对象封装;(2), 使用map类型;(3), 如果参数复杂, 可以使用对象封装对象.

创建代表查询参数的Bean

package com.nengli51.pojo;

import lombok.Data;

/**
 * @Date 2021/2/5
 */
@Data
public class QueryBean {
    private int id;
}

创建Dao

package com.nengli51.dao;

import com.nengli51.pojo.QueryBean;
import com.nengli51.pojo.User;

public interface UserDao2 {
    User findUser(QueryBean queryBean);
}

创建配置文件




    
    

修改核心配置文件




    
    
    
    
        
        
        
    
    
        
            
            
                
                
                
                
            
        
    

    
        

        

        
        
    

测试

package com.nengli51;

import com.nengli51.dao.UserDao2;
import com.nengli51.pojo.QueryBean;
import com.nengli51.pojo.User;
import com.nengli51.utils.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

/**
 * @Date 2021/2/5
 */
public class TestMybatisDemo3 {
    @Test
    public void testMethod(){

        SqlSession sqlSession = MyBatisUtils.getSqlSessionFactory().openSession();
        UserDao2 userDao = sqlSession.getMapper(UserDao2.class);
        QueryBean queryBean = new QueryBean();

        queryBean.setId(1);
        User user = userDao.findUser(queryBean);
        System.out.println(user);
    }
}