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);
}
}