首页 > 代码库 > MyBatis入门

MyBatis入门

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.org//DTD Config 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

<!-- 引入外部properties文件       注意:引入外部文件属性的优先级高于内部设置的属性 -->

<properties resource="database.properties">

<property name="username" value="http://www.mamicode.com/root"/>

<property name="password" value="http://www.mamicode.com/123456"/>

</properties>

<!-- 设置mybatis运行的一些行为 -->

<settings>

<setting name="logImpl" value="http://www.mamicode.com/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="http://www.mamicode.com/${driver}" />

<property name="url" value="http://www.mamicode.com/${url}" />

<property name="username" value="http://www.mamicode.com/${username}" />

<property name="password" value="http://www.mamicode.com/${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.org//DTD Mapper 3.0//EN"

"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.MaBatis的基本要素

1.MyBatis的核心配置文件

mybatis-config.xml

 

技术分享

 

2.SQL映射文件

xxxMapper.xml

 

技术分享

 

3.mybatis的核心接口和类

 

技术分享

 

 

 

SqlSessionFactoryBuilder

    用过即丢,推荐作用域范围:方法体内

SqlSessionFactory

    最佳作用域范围:应用的全局作用域

    生命周期与应用的生命周期相同

SqlSession

    线程级

    一个request请求期间

MyBatis入门