mybatis框架的总结(一)


MyBatis 是一个开源的数据持久层框架。它内部封装了通过JDBC访问数据库的操作,支持普通的SQL查询、存储过程和高级映射,几乎消除了所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 作为持久层框架,其主要思想是将程序中的大量SQL语句剥离出来,配置在配置文件中,实现SQL的灵活配置。这样做的好处是将SQL 与程序代码分离,可以在不修改程序代码的情况下,直接配置在文件中修改SQL,Mybatis是javaweb开发中数据持久层使用的一个框架,它是一个不完全的ORM框架,这是它和Hibernate的区别之一

MyBatis 官网:http://mybatis.org

                                               mybatis的架构图

                          

                                                                            解读上图中的mybatis配置

 SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。

  1. 通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂
  2. 由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。
  3. mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。
  4. Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。
  5. Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程

mybatis的创建步骤:

      第一步:创建java工程,加入mybatis核心包、依赖包、数据驱动包。

                      

第二步:log4j.properties ,在classpath下创建log4j.properties如下:

# Global logging configuration

log4j.rootLogger=DEBUG, stdout

# Console output...

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

mybatis默认使用log4j作为输出日志信息。

第三步:创建SqlMapConfig.xml,在classpath下创建SqlMapConfig.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 resource="db.properties">

	</properties>

	<!--设置延迟加载 <setting name="lazyLoadingEnabled" value="true"/> <setting name="aggressiveLazyLoading" 
		value="false"/> -->
	<settings>
		<!-- 打开延迟加载的开关 -->
		<setting name="lazyLoadingEnabled" value="true" />
		<!-- 将积极加载改为消极加载 即按需加载 -->
		<setting name="aggressiveLazyLoading" value="false" />
		<!-- 开启二级缓存-->
		<setting name="cacheEnabled" value="true"/>
		
	</settings>

	<!-- 定义别名 -->
	<typeAliases>
		<!-- 定义单个别名 <typeAlias type="com.itheima.mybatis.po.User" alias="user"/> -->
		<!--批量定义别名,名字默认为类名,首字母可以大写或者小写 -->
		<package name="com.itheima.mybatis.po" />
	</typeAliases>
	<!-- 和spring整合后 environments配置将废除 -->
	<environments default="development">
		<environment id="development">
			<!-- 使用jdbc事务管理 -->
			<transactionManager type="JDBC" />
			<!-- 数据库连接池 -->
			<dataSource type="POOLED">
				<property name="driver" value="${jdbc.driver}" />
				<property name="url" value="${jdbc.url}" />
				<property name="username" value="${jdbc.username}" />
				<property name="password" value="${jdbc.password}" />
			</dataSource>
		</environment>
	</environments>
	<!-- 加载映射文件 -->
	<mappers>
		<!-- 单个加载映射文件 <mapper resource="sqlmap/User.xml"/> <mapper resource="mapper/UserMapper.xml"/> -->
		<!-- 加载 com.itheima.mybatis.mapper下的所有配置文件 -->
		<package name="com.itheima.mybatis.mapper" />
		<!-- -->
	</mappers>

</configuration>

          第四步:创建实体类pojo

 package com.itheima.mybatis.po;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

/**
 * 用户po
 * 
 * @author 45948
 *
 */
public class User implements Serializable {

	private int id;
	private String username;// 用户姓名
	private String sex;// 性别
	private Date birthday;// 生日
	private String address;// 地址

	//用户创建的订单列表
	private List<Orders> ordersList;
	
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	
	
	public List<Orders> getOrdersList() {
		return ordersList;
	}

	public void setOrdersList(List<Orders> ordersList) {
		this.ordersList = ordersList;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ", username=" + username + ", sex=" + sex + ", birthday=" + birthday + ", address="
				+ address + "]";
	}

	
}

第五步:创建mappe和mapper.xml

package cn.itcast.ssm.mapper;

import cn.itcast.ssm.po.User;

/**
 * Mapper接口
 * 
 * @author 45948
 *
 */
public interface UserMapper {
	
	//根据id查询客户
	public User findUserById(int id) throws Exception;
	
	
}
<?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命名空间 就是指对sql进行分类化管理 ,在使用mapper开发时,namespace等于mapper接口地址 -->
<mapper namespace="cn.itcast.ssm.mapper.UserMapper">



	<select id="findUserById" parameterType="int" resultType="User">
		SELECT * FROM USER WHERE id=#{id}
	</select>

</mapper>

第六步:创建测试类

package cn.itcast.ssm.mapper;

import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import cn.itcast.ssm.po.User;

public class UserMapperTest {
	private ApplicationContext applicationContext;

	@Before
	public void setUp() throws Exception {
		applicationContext = new ClassPathXmlApplicationContext("spring/applicationContext.xml");
	}

	@Test
	public void testFindUserById() throws Exception {
		UserMapper userMapper = (UserMapper) applicationContext.getBean("userMapper");
		User user = userMapper.findUserById(1);
		System.out.println(user);
	}

}

猜你喜欢

转载自blog.csdn.net/Gray_humor/article/details/83788608