Mybatis1

目录

一、MyBatis框架API

二、使用mybatis框架

1.创建java项目

2.在项目下新建文件夹lib ,把jar包导入进去

3.在src下写一个mybatis.xml配置文件

4.在src/com下写一个db.properties配置文件

5.测试连接数据库(写好表对应的实体类)

6.写mapper.xml映射文件

7.在mybatis.xml中加载mapper.xml文件

8.测试

9.结果

9.1#{}和${}

9.2自定义别名和批量别名

9.3ORM映射

三、Mybatis用动态代理方式实现


JAVAEE开发的三大框架:MyBatis、Spring MVC、Spring

MyBatis:封装jdbc代码的一个框架

Spring MVC:封装Servlet编程的一个框架

Spring:无缝融合MyBatis框架和Spring MVC框架的粘合框架

一、MyBatis框架API

--sqlSession相当于Connection连接对象,有一些操作数据库的方法

--SqlSessionFactory创建sqlSession回话对象的工厂

--SqlSessionFactoryBuilder创建SqlSessionFactory对象,加载mybatis.xml配置文件

--使用mybatis框架,让你不再关注数据库是如何连接的,让你重点写sql语句

二、使用mybatis框架

 

1.创建java项目

2.在项目下新建文件夹lib ,把jar包导入进去

3.在src下写一个mybatis.xml配置文件

--在mybatis.xml配置文件中加载db.properties

<?xml version="1.0" encoding="UTF-8"?>

<!-- .DTD文件是xml格式文件的约束文件,它约束了该xml文件使用的标签以及标签之间的关系 -->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
 
 <!-- 根标签 -->
<configuration>

<!-- properties 标签代表 加载指定路径的properties文件 -->
<properties resource="com/db.properties"></properties>


<!-- 配置 -->
<settings>
<!-- 默认mybatis3 传入null值 会报错.设置  当传入值为null时,字段值使用NULL来代替  -->
	<setting name="jdbcTypeForNull" value="NULL"/>

</settings>

<!-- 类型别名: 自定义别名 -->
<typeAliases>
	<!-- 实体的包名+类名 -->
	<!-- <typeAlias type="com.entity.Pep5bean" alias="_pep5bean"/> -->
	
</typeAliases>

<!-- 可以配置很多数据库环境 -->
<environments default="development">
	<environment id="development">
		
		<!-- 使用jdbc事务管理 -->
		<transactionManager type="JDBC"/>
		
		<!-- 数据库连接池 -->
		<dataSource type="POOLED">
			<!-- 数据库连接的参数 -->
			<property name="driver" value="${driverName}"/>
			<property name="url" value="${url}"/>
			<property name="username" value="${userName}"/>
			<property name="password" value="${password}"/>
		</dataSource>
	</environment>

</environments>

<!-- 加载 mapper映射文件 -->
<mappers>
	<!-- <mapper resource="com/dao/mapper.xml"/> -->
</mappers>

</configuration>

4.在src/com下写一个db.properties配置文件

url=jdbc:oracle:thin:@localhost:1521:orcl
driverName=oracle.jdbc.driver.OracleDriver
userName=scott
password=a733511

5.测试连接数据库(写好表对应的实体类)

6.写mapper.xml映射文件

此时名称空间可以命自己想命的名字

<?xml version="1.0" encoding="UTF-8"?>
<!-- dtd约束 -->
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 名称空间 namespace :区别不同映射文件中的唯一标识 -->
<mapper namespace="stu">

 
<select id="findById" parameterType="int" resultType="com.a_test.Stu">
   select * from stu where u_id=${value}
</select>

</mapper>

7.在mybatis.xml中加载mapper.xml文件

<!-- 加载 mapper映射文件 -->
<mappers>
	<mapper resource="com/a_test/mapper.xml"/>
</mappers>

8.测试

package com.a_test;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class Test1 {
	public static void main(String[] args) throws IOException {
		//1.构建配置文件的输入流
		InputStream in = Resources.getResourceAsStream("mybatis.xml");
		
		//2.创建sqlSessionFactory对象		
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
		
		//3.创建会话实例(相当于connection)
		SqlSession sqlSession = sqlSessionFactory.openSession();
		
		System.out.println(sqlSession);
		
		/**
		 * 第一个参数:你要调用哪个映射文件的哪个标签
		 * 第二个参数:要传入的参数
		 * 
		 */
		Stu stu = sqlSession.selectOne("stu.findById",2);
		System.out.println(stu);
		
	
		//4.关闭资源
		sqlSession.close();
	}

}

9.结果

org.apache.ibatis.session.defaults.DefaultSqlSession@3b81a1bc
Stu [u_id=2, u_username=小lan, u_password=1d3]

9.1#{}和${}

#{}和${value}表示参数的注入

#{}表示preparedStatement的占位符,传入的参数会自动进行类型转换

${value}参数的 字符串拼接,不会进行类型转换
如下:该sql语句输入参数类型为Stu,呢么#{u_id}中的u_id一定要是Stu的一个属性

输入参数的类型可以是实体类、int、double......

如果方法的输入参数是List<Product>  ,ParamterType就写Product

9.2自定义别名和批量别名

在mybatis.xml中为实体类添加别名  ,写在mybatis.xml的根标签中

目的:在写mapper.xml时的resultType和parameterType可以不用写全类限定名可以使用别名替代。

自定义别名:


<typeAliases>
<!-- 类型别名: 自定义别名 -->
	<!-- 实体的包名+类名 -->
	 <typeAlias type="a_cache.Stu" alias="_stu"/>
	<!-- 类型别名:批量别名 --> 
	 <package name="b_batch"/>

	<package name="i_eg.entity"/>
	
</typeAliases>

 

9.3ORM映射

如果数据库的字段名和实体类的属性名不一样。又没有ORM映射,就获取不到数据库中字段的值。
像一些查询语句获取某个字段的值就获取不到。

<!-- ORM映射 -->
<resultMap type="_student" id="student">
	<!-- 要将 实体类的属性 与 数据库的字段名对应起来 -->
	<!-- 主键设置 -->
	<id property="uid" column="u_id"/>
	
	<!-- 其他字段的映射 -->

	<result property="uPwd" column="u_Pwd"/>
	<result property="uRegtime" column="u_Regtime"/>
	
	<!-- 没有写的字段,默认ResultSet 对象会获取 与 实体属性名一样的 字段名 -->

</resultMap>

三、Mybatis用动态代理方式实现

避免出现 Stu stu = sqlSession.selectOne("stu.findById",2);这样的"stu.findById"硬编码

StuMapper mapper = sqlSession.getMapper(StuMapper.class);
		List<Stu> list = mapper.findAllstu();

/**
		 *  	获取dao接口的代理实现对象(动态代理对象,帮你实现了UserMapper接口,
		 *  	并且实现了其中的方法)
		 *  
		 *  mybatis会提供一个代理实现类,代理实现类重写了该接口(UserMapper)的所有方法
		 * 		
		 * 		过程:
		 * 		1)通过getMapper(Mapper.class)获取 该接口对应的mapper.xml文件
		 * 			规范1:接口的包名+类名  要对应唯一的 一个映射文件的名称空间
		 * 		2)读取并且加载mapper.xml文件
		 * 		3)当你调用 代理实现类的方法的时候,会从mapper.xml文件中找到对应的statement对象
		 * 			规范2:接口的方法名 要 与 mapper.xml文件中的标签的ID属性 一致
		 */

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值