初始MyBatis、SQL映射文件

时间:2023-03-09 03:47:43
初始MyBatis、SQL映射文件

MyBatis入门

1.MyBatis前身是iBatis,是Apache的一个开源项目,2010年这个项目迁移到了Google Code,改名为MyBatis,2013年迁移到GitHub。是一个基于DAO层ORM框架      ORM:Object Relational Mapping 对象关系映射 在mybatis中指的是sql语句与实体类之间的映射

2.MyBatis的优缺点
优点:减少代码量,小巧并且简单易学,SQL语句从程序代码中彻底分离,降低耦合度,便于管理和优化,并可重用,支持编写动态SQL语句。
缺点:SQL语句编写工作量大,对开发人员有一定的要求,数据库移植性差
适用场合:MyBatis专注于SQL本身,是一个足够灵活的DAO层解决方案。对性能要求很高,或者需求变化多的项目,如互联网项目,适合适用MyBatis框架。

3.MyBatis开发环境的搭建: 3.1导入MyBatis jar包      3.2编写实体类
3.3编写MyBatis的核心配置文件 mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//初始MyBatis、SQL映射文件mybatis.org//DTD 

 Config 3.0//EN"
"初始MyBatis、SQL映射文件http://mybatis.org/dtd/mybatis-3-config.dtd 

">
<configuration>
<!-- 引入外部properties文件       注意:引入外部文件属性的优先级高于内部设置的属性 -->
<properties resource="database.properties">
<property name="username" value="root"/>
<property name="password" value="123456"/>
</properties>
<!-- 设置mybatis运行的一些行为 -->
<settings>
<setting name="logImpl" value="LOG4J" />
</settings>
<!-- 设置类型别名 -->
<typeAliases>
<package name="com.kawa.pojo"/>
</typeAliases>
<!--  方式一:比较繁琐
<typeAliases>
<typeAlias alias="User" type="com.kawa.pojo.User"/>
</typeAliases>
-->
<!-- 配置mybatis多套运行环境 -->
<environments default="development">
<environment id="development">
<!-- 配置事务管理,采用JDBC的事务管理    mybatis提供了两种事务管理类型 JDBC、MANAGED-->
<transactionManager type="JDBC" />
<!-- POOLED:mybatis自带数据源,JNDI:基于tomcat的数据源      /UNPOOLED-->
<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>
<!-- 将mapper文件加入到配置文件中 -->
<mappers>
<!-- 1.使用类资源路径获取资源 -->
<mapper resource="com/kawa/dao/UserMapper.xml" />
<!-- 2.使用URL获取资源 -->
<!-- <mapper url="file:///E:/..."/> -->
</mappers>
</configuration>

3.4编写MyBatis 实体类的映射文件xxxMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//初始MyBatis、SQL映射文件mybatis.org//DTD 

 Mapper 3.0//EN"
"初始MyBatis、SQL映射文件http://mybatis.org/dtd/mybatis-3-mapper.dtd 

">
<mapper namespace="com.kawa.dao.UserMapper">
<select id="count" resultType="int">
select count(1) as count from smbms_user
</select>
<select id="getUserList" resultType="User">
select * from smbms_user
</select>
</mapper>

3.5编写测试类测试
/**
* 测试查询用户列表      基于Mapper.xml方式操作
*/
@Test
public void testGetUserList() {
//获取SqlSession操作对象 步骤:
String resource = "mybatis-config.xml";
SqlSession sqlSession = null;
try {
//1.获取mybatis-config.xml文件的输入流
InputStream is = Resources.getResourceAsStream(resource);
//2.创建sqlSessionFactory对象
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
//3.创建sqlSession对象
sqlSession = sessionFactory.openSession();
List<User> userList = sqlSession.selectList("com.kawa.dao.UserMapper.getUserList");
for (User user : userList) {
logger.debug("UserMapperTest userName --> "+user.getUserName());
}
} catch (IOException e) {
e.printStackTrace();
}finally{
sqlSession.close();
}
}
/**
* 测试查询用户列表      基于Mapper接口方式操作数据
*/
@Test
public void testGetUserList2() {
//获取SqlSession操作对象 步骤:
String resource = "mybatis-config.xml";
SqlSession sqlSession = null;
try {
//1.获取mybatis-config.xml文件的输入流
InputStream is = Resources.getResourceAsStream(resource);
//2.创建sqlSessionFactory对象
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
//3.创建sqlSession对象
sqlSession = sessionFactory.openSession();
List<User> userList = sqlSession.getMapper(UserMapper.class).getUserList();
for (User user : userList) {
logger.debug("UserMapperTest userName --> "+user.getUserName());
}
} catch (IOException e) {
e.printStackTrace();
}finally{
sqlSession.close();
}
}
4.MyBatis的基本要素
  1.MyBatis的核心配置文件
    configuration 配置
      properties  可配置在Java属性配置文件中
      settings  修改MyBatis在运行时的行为方式
      typeAliases  为Java类型命名一个别名
      typeHAndlers 类型处理器
      objectFactory 对象工厂
      piugins  插件
      environments  环境
      environment  环境变量
        transactionManage  事务管理器
        dataSource  数据源
      mappers  映射器
2.SQL映射文件
...Mapper.xml
  SQL映射文件的几个*元素(按照定义顺序)
    mapper-namespace
    cache-配置给定命名空间的缓存
    cache-ref-从其他命名空间应用缓存配置
    resultMap-用来描述数据库结果集和对象的对应关系
    sql-可用重用的SQL块,也可以被其他语句引用
    insert-映射插入语句
    update-映射更新语句
    delete-映射删除语句
    select-映射查询语句
3.mybatis的核心接口和类:
    SqlSessionFactoryBuilder------->build() SqlSessionFactory---------->openSession() SqlSession
      SqlSessionFactoryBuilder:用过即丢,推荐作用范围:方法体内
      SqlSessionFactory:最佳作用域范围:应用的全局作用域  生命周期与应用的生命周期相同
      SqlSession:线程级  一个request请求期间