MyBatis学习笔记2

MyBatis学习笔记—2

1、使用Mapper的接口编写MyBatis项目

1.1 Mapper接口

MyBatis 框架抛开了 Dao 的实现类,直接定位到映射文件 mapper 中的相应 SQL 语句,对DB进行操作。这种对 Dao 的实现方式称为 Mapper接口的动态代理方式。

Mapper 动态代理方式无需程序员实现 Dao 接口。接口是由 MyBatis 结合映射文件自动生成的动态代理实现的。

2、Mapper实现步骤

2.1 编写接口

package com.xaf.mapper;
import com.xaf.pojo.Team;
import java.util.List;
public interface TeamMapper {
	List<Team> queryAll();
	Team queryById(int teamId);
	int add(Team team);
	int update(Team team);
	int del(int teamId);
}

当然,我们需要创建相应的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">
<!--namespace=“完全限定名,接口的完全限定名”-->
<mapper namespace="com.xaf.mapper.TeamMapper">
	<!--省略内容,复制Team.xml中的内容即可-->
</mapper>

mybatis.xml配置文件中注册映射文件

<mappers>
	<!--省略其他-->
	<mapper resource="com/xaf/mapper/TeamMapper.xml"/>
</mappers>

2.2 getMapper方法获取代理对象

只需调用 SqlSessiongetMapper()方法,即可获取指定接口的实现类对象。

package com.xaf.test;
import com.xaf.dao.TeamDao;
import com.xaf.dao.TeamDaoImpl;
import com.xaf.mapper.TeamMapper;
import com.xaf.pojo.Team;
import com.xaf.utils.MybatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.Date;
import java.util.List;
/**
* ClassName: TeamDaoTest
* TeamMapper的测试类
* @version 1.0
*/
public class TeamMapperTest {
	private SqlSession sqlSession=MybatisUtil.getSqlSession();
	@Test
	public void test01(){
		TeamMapper teamDao= sqlSession.getMapper(TeamMapper.class);
		//添加
		Team team=new Team();
		team.setTeamName("勇士");
		team.setLocation("金州");
		team.setCreateTime(new Date());
		int num=teamDao.add(team);
		sqlSession.commit();//必须提交才能让增删改生效
		System.out.println(num);
		//更新
		Team team1 = teamDao.queryById(1001);
		team1.setTeamName("XiaoAiFu的球队");
		num = teamDao.update(team1);
		sqlSession.commit();//必须提交才能让增删改生效
		System.out.println(num);
		//删除
		num=teamDao.del(1001);
		sqlSession.commit();//必须提交才能让增删改生效
		System.out.println(num);
		//查询所有
		List<Team> teams = teamDao.queryAll();
		teams.forEach(t-> System.out.println(t));
	}
}

当然,如上的操作只是让大家了解怎么使用Mapper动态代理自己的项目,不需要大家跟着复制粘贴。

3、#{} 和 ${}的区别

3.1 #{}

#{}:表示一个占位符,通知Mybatis 使用实际的参数值代替。并使用 PrepareStatement 对象执行 sql 语句, #{…}代替sql 语句的“?”。这个是Mybatis 中的首选做法,安全迅速。

<select id="queryById" parameterType="int" resultType="com.kkb.pojo.Team">
	select * from team where teamId=#{id}
</select>
<!--Mybatis执行的时候是:
	String sql="select * from team where teamId=?";
	PreparedStatement ps = conn.prepareStatement(sql);
	ps.setInt(1,1001);
	where teamId=? 实际就是 where teamId=#{id}
	ps.setInt(1,1001) 中的1001会替换#{id}
-->

3.2 ${}

: 表 示 字 符 串 原 样 替 换 , 通 知 ‘ M y b a t i s ‘ 使 用 ‘ {}:表示字符串原样替换,通知`Mybatis` 使用` Mybatis使包含的“字符串”替换所在位置。使用Statement或者PreparedStatementsql语句和${}`的内容连接起来。一般用在替换表名,列名,不同列排序等操作。

举例一:

TeamMapper接口添加如下内容:

List<Team> queryByName(String teamName);
List<Team> queryByLocation(String location);

TeamMapper.xml配置文件中添加如下:

<select id="queryByName" resultType="com.xaf.pojo.Team">
	select * from team where teamName=#{teamName}
</select>
<select id="queryByLocation" resultType="com.xaf.pojo.Team">
	select * from team where location=#{location}
</select>

举例二:

TeamMapper接口添加如下内容:

List<Team> queryByFiled(@Param("column") String column,@Param("columnValue") String columnValue);

TeamMapper.xml配置文件中添加如下:

<select id="queryByFiled" resultType="com.xaf.pojo.Team">
	select * from team where ${column}=#{columnValue}
</select>

这就是以上配置的区别。前者是作为占位符使用居多;后者一般会事先告知程序替换字符串后并将字符串原样替换。

4、Mybatis的全局配置文件

Mybatis配置文件包含了会影响Mybatis行为的设置和属性信息。其配置文件顶层结构如下:
configuration(配置)
	properties--属性:加载外部的配置文件,例如加载数据库的连接信息
	Settings--全局配置参数:例如日志配置
	typeAliases--类型别名
	typeHandlers----类型处理器
	objectFactory-----对象工厂
	Plugins------插件:例如分页插件
	Environments----环境集合属性对象
		environment(环境变量)
			transactionManager(事务管理器)
			dataSource(数据源)
	Mappers---映射器:注册映射文件用

4.1 属性(properties)

属性可以在外部进行配置,并可以进行动态替换。我们既可以在 properties 元素的子元素中设置(例如DataSource节点中的properties节点),也可以在 Java 属性文件中配置这些属性。

数据源中有连接数据库的四个参数数据,我们一般都是放在专门的属性文件中,mybatis的全局配置文件直接从属性文件中读取数据即可。

1、在 resources 目录创建 jdbc.properties 文件,文件名称可以自定义。

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/mybatis?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT
jdbc.username=root
jdbc.password=root

2、mybatis的全局配置文件引入属性文件

<properties resource="jdbc.properties"/>

3、使用属性文件中的值

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

4.2 设置Settings

MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为.例如我们配置的日志就是应用之一。

<!--配置日志-->
<settings>
	<setting name="logImpl" value="LOG4J"/>
</settings>

4.3 类型别名typeAliases

类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写。

4.3.1 Mybatis中已经支持的别名
4.3.2 自定义别名
<!--自定义类型别名-->
<typeAliases>
	<!--对单个的实体类定义别名-->
	<typeAlias type="com.kkb.pojo.Team" alias="Team"/>
	<!--推荐写法:批量定义别名:扫描指定包下的所有类,同时别名定义为类名,别名的首字母大小写都可以-->
	<package name="com.kkb.pojo"/>
</typeAliases>

4.4 映射器Mappers

配置的方式:

4.4.1 使用相对于类路径的资源引用
语法:<mapper resource=""/>
使用相对于类路径的资源,从 classpath 路径查找文件
例如:<mapper resource="com/kkb/mapper/TeamMapper.xml" />
4.4.2 使用映射器接口实现类的完全限定类名
语法:<mapper class=""/>
使用的mapper接口的完全限定名
要求:接口和映射文件同包同名
例如<mapper class="com.kkb.mapper.GameRecordMapper"/>
4.4.3 将包内的映射器接口实现全部注册为映射器–推荐
语法:<package name=""/>
指定包下的所有Mapper接口
如:<package name="com.kkb.mapper"/>
注意:此种方法要求 Mapper接口名称和 mapper 映射文件名称相同,且在同一个目录中。

4.5 dataSource标签

Mybatis 中访问数据库支持连接池技术,而且是采用的自己的连接池技术。在 Mybatismybatis.xml配置文件中,通过来实现 Mybatis 中连接池的配置。MyBatis 在初始化时,根据的 type 属性来创建相应类型的的数据源 DataSource

UNPOOLED: 不使用连接池的数据源
POOLED:使用连接池的数据源
JNDI:使用JNDI实现的数据源
前两个数据源都实现javax.sql.DataSource接口

4.6 事务

4.6.1 默认手动配置

Mybatis 框架是对 JDBC 的封装,所以 Mybatis 框架的事务控制方式,本身也是用 JDBCConnection对象的 commit(), rollback() .Connection 对象的 setAutoCommit()方法来 设置事务提交方式的。自动提交和手工提交。

<transactionManager type="JDBC"/>

该标签用于指定 MyBatis所使用的事务管理器。MyBatis 支持两种事务管理器类型:JDBCMANAGED

以上就是对MyBatis的进一步介绍,谢谢大家阅读。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xiao艾扶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值