Mybatis框架学习(一)基础配置及使用

Mybatis框架

     是一个半自动化的ORM框架,是一个持久层框架,用于Dao层的编写。 ORM框架:对象关系映射框架,将数据表中的记录和对象形成映射,表的结构和类形成映射,通过配置文件形成的映射关系(ORM映射文件) 全自动化的ORM框架(Hibernate),不写SQL语句,执行SQL语句都是有框架自动生成的。 当数据库操作比较简单(项目设计的SQL语句少量的复杂语句) 半自动化的ORM框架(Mybatis),需要程序员写SQL语句,查询语句的结果和对象形成映射 当项目有大量的复杂SQL语句,需要程序员对SQL调整优化

Mybatis框架的使用

1.搭建框架
(1)mybatis的jar包导入工程的类库中
在这里插入图片描述
(2)在src下创建mybatis的主配置文件
将XML的验证文件(.dtd文件)和使用DTD验证URL绑定
1.主配置文件的验证

在这里插入图片描述在这里插入图片描述
2.映射文件的验证
在这里插入图片描述
在这里插入图片描述

在eclipse中设置绑定关系:XML Catalog中配置
步骤:window->preference->搜索XML Catlog->User Specified Entries->add->Location从File System选取文件->Key type选择URI->Key粘贴.XML文件里面的mybatis的路径,主配置文件和映射文件需要分别进行绑定。
在这里插入图片描述
2.创建实体类和Mapper文件(映射文件)
1.创建Employee的映射类,暂且要求Employee类的属性名和Employee表的列名一致
2.创建Employee的映射文件(EmployeeMapper.xml)
3.每创建一个映射文件,一定要在主配置文件中声明该映射文件的位置,因为Java程序在读取主配置文件的同时就要把所有的映射文件读到内容中。

主配置文件:

<?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>

    <!-- 配置数据库连接信息 -->
    <environments default="development">
       <environment id="development">
           <transactionManager type="JDBC" />
           <dataSource type="POOLED">
              <property name="driver" value="com.mysql.jdbc.Driver" />
              <property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=utf8" />
              <property name="username" value="root" />
              <property name="password" value="root" />
           </dataSource>
       </environment>
    </environments>
    <!-- 映射文件定位 -->
    <mappers>
    	<mapper resource="com/oracle/mapper/EmployeeMapper.xml"/>
    </mappers>
</configuration>


映射文件:

<?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="Employee">

	<insert id = "insert" parameterType = "com.oracle.po.Employee">
		insert into employee (employee_id,first_name,last_name,email,
			phone_number,hire_date,job_id,salary,commission_pct,
			manager_id,department_id)
		values(default,#{first_name},#{last_name},#{email},
			#{phone_number},#{hire_date},#{job_id},#{salary},
			#{commission_pct},#{manager_id},#{dept.department_id})
	</insert>
	
	<update id = "update" parameterType = "com.oracle.po.Employee">
		update employee set first_name=#{first_name},last_name=#{last_name},
			email=#{email},phone_number=#{phone_number},hire_date=#{hire_date},
			job_id=#{job_id},salary=#{salary},commission_pct=#{commission_pct},
			manager_id=#{manager_id},department_id=#{dept.department_id}
		where employee_id = #{employee_id}
	</update>
	
	<delete id = "delete" parameterType="int">
		delete from employee where employee_id = #{id}
	</delete>
	
	<select id = "select" resultType = "com.oracle.po.Employee">
		select employee_id,first_name,last_name,email,
			phone_number,hire_date,job_id,salary,commission_pct,
			manager_id,department_id 
		from employee
	</select>
	
	<select id = selectById resultType = "com.oracle.po.Employee" parameterType="int">
		select employee_id,first_name,last_name,email,
			phone_number,hire_date,job_id,salary,commission_pct,
			manager_id,department_id 
		from employee
		where employee_id = #{employee_id}
	</select>
</mapper>

namespace是mapper元素的属性,意味命名空间,目的是找到当前mapper中配置的内容,通过命名空间+id查找
insert元素:文本部分编写insert语句
必写属性:
id属性:为这个SQL语句定义的id
parameterType属性:执行SQL语句时传入对象的类型

#{}表达式:
1.代表了预编译的 ’ ? ’
2.是一个取值的语句,如果传入的对象是一个Map,代表获得指定key的value值;如果传入的对象是一个实体对象,代表获得指定属性值;因此#{}中写的是对象的属性名或key名,#{}中还可以写对象名.属性名,代表后的对象的属性值,例子如下:

测试:
1.select元素
resultType:指定结果集数据填充到哪个类型的对象中,按照结果集列名和对象的属性名相同形成的自动映射调用API

public class Test {
	public static void main(String [] args){
		Employee e = new Employee();
		e.setFirst_name("mybatis");
		e.setPhone_number("15945687451 ");
		e.setSalary(18000);
		Departments d = new Departments();
		d.setDepartment_id(5001);
		e.setDept(d);
		try {
			//将主配置文件的内容读到一个io.reader中
			Reader reader = Resources.getResourceAsReader("configuration.xml");
			//使用mybatis的一个核心接口 SqlSessionFactory是SqlSession的工厂,生产SqlSession对象(封装了一个连接)
			SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
			//创建SqlSession对象,使用mybatis的SqlSession核心接口
			SqlSession sqlSession = factory.openSession();
			//调用SqlSession的insert方法执行SQL语句
//			sqlSession.insert("Employee.insert",e);
//			e.setEmployee_id(3);
//			e.setFirst_name("tom");
//			sqlSession.update("Employee.update",e);
//			sqlSession.delete("Employee.delete",3);
			List<Employee> list = sqlSession.selectList("Employee.select");
			for(Employee emp:list){
				System.out.println(emp.getFirst_name());
			}
			sqlSession.commit();
			//jdbc 和  mybatis区别
			//insert插入语句
			/*
			 * jdbc
			 * 1.加载驱动创建连接
			 * 2.编写SQL语句(预编译)
			 * 3.执行SQL语句
			 * 4.处理结果集
			 * 5.关闭连接
			 */
			/*
			 *mybatis 
			 * 1.编写mapaer.xml(sql)
			 * 2.创建SqlSession对象
			 * 3.调用SqlSession对象的insert方法
			 * 4.关闭
			 */		
		} catch (IOException ex) {
			ex.printStackTrace();
		}
	}
}

test步骤:

//将主配置文件的内容读到一个io.reader中
	Reader reader = Resources.getResourceAsReader("configuration.xml");
	//使用mybatis的一个核心接口 SqlSessionFactory是SqlSession的工厂,生产SqlSession对象(封装了一个连接)
	SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
	//创建SqlSession对象,使用mybatis的SqlSession核心接口
	SqlSession sqlSession = factory.openSession();
	//调用SqlSession的insert方法执行SQL语句
	sqlSession.insert("Employee.insert",e);

思考:在update元素中写insert语句可以吗?用sqlSession的update方法执行insert语句可以吗?
可以执行,但不标准
<insert><update>等XML的元素为了区分它们有什么属性
sqlSession中的insert()update()为了区分有什么参数和结果

Configuration配置
1.配置别名:typeAlias

<!-- 定义全类名的别名 -->
	<typeAliases>
		<typeAlias type= "com.oracle.po.Employee" alias="Employee"/>
	</typeAliases>

配置别名后,在xxxMapper.XML文件中,
之前使用“com.oracle.po.Employee”这种全类名的地方都可以替换为Employee

猜你喜欢

转载自blog.csdn.net/DIDI___/article/details/104006846