MyBatis 概述

一、什么是三层架构

三层架构是一种开发模式,拒户所有的公司都在使用三层架构的模式进行开发。
1)界面层:用来与客户进行数据交互,调用业务逻辑层完成业务功能,返回结果给客户端,它是一个总调度。
2)业务逻辑层:真正来事先业务功能,向上为界面提供处理结果,向下文数据访问层要数据。
3)数据访问层:主要用来与数据库进行数据交互,完成各种增删改查的功能。
三层之间的调用顺序:
	界面层<--->业务逻辑层<--->数据访问层

二、三层架构的优点

1)结构清晰、耦合度低,各层分工明确
2)可维护性,可扩展性高
3)有利于标准化
4)开发人员可以只关注整个结构中的其中某一层的功能实现
5)有力量与各层逻辑的复用

三、什么是框架

它是一个软件的半成品,更有利于功能的扩展和复用。
框架是可被应用开发者定制的应用骨架、模板。

四、什么是SSM框架

1)Spring框架:它是一个容器,它是整合其他框架的框架,它的核心是IOC和AOP。它由20多个模块,在很多领域都有非常优秀的支持。
2)SpringMVC框架:它是Spring框架的一个子框架,专门为了优化控制器(Servlet)而存在的框架。它提供了简捷的数据注入,类型转换,页面跳转,数据携带等方面的优化。
3)Mybatis框架:它是专门优化JDBC访问的框架,它专注于SQL语句。它不用创建各种JDBC访问的对象。

五、什么是MyBatis框架

MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation 迁移到了 google code,并且改名为Mybatis。
让开发者专注于SQL的处理。
减轻使用JDBC的复杂性,不用编写重复的创建 Connection,Statement;不用编写关闭资源代码。
MyBatis 是一个优秀的基于java 的持久层框架,内部封装了jdbc,开发者只需要关注sql语句本身。
MyBatis 通过xml或注解两种方式将要执行的各种sql语句。

六、使用MyBatis框架

所有框架的使用都是: 1.添加依赖	2.添加配置文件
MyBatis框架使用步骤:
1)新建项目empty Project
2)新建模块,选择quickstart模板
3)添加可视化,建库SSM建表
4)修改目录
5)修改pom.xml文件,添加MyBatis依赖,添加mysql驱动依赖
6)添加jdbc.properties属性文件,它规定了数据库连接的基本信息
7)添加SqlMapConfig.xml核心配置文件
	"https://mybatis.org/dtd/mybatis-3-config.dtd":头文档约束文件,规定可以出现哪些标签,以及子标签,以及标签中可以有哪些属性。
8)添加实体类
9)添加 表名Mapper.xml 文件,完成增删改查的所有功能
10)在SqlMapConfig.xml文件中注册 表名Mapper.xml 文件
11)添加测试类进行功能测试

七、测试类的优化

SqlSession sqlSession;
@Before //在所有的Test语句执行前执行的代码,自动执行
@After  //在所有的Test语句执行完执行的代码,自动执行

八、为实体类注册别名

在SqlMapConfig.xml配置文件中,可以注册一个简单的名称访问实体类。
<typeAliases>
	<!--
        单个实体类别名注册
            参数:
                type:要注册的实体类的类型
                alias:起的别名,一定要规范
    -->
	<!--<typeAlias type="icu.sandink.pojo.Question" alias="question"/>-->
	<!--批量注册别名,注册的别名是类名的驼峰命名法-->
	<package name="icu.sandink.pojo"/>
	<package name="icu.sandink.mapper"/>
</typeAliases>

九、设置日志输出

设置日志输出,查看底层的sql语句实现,在SqlMapConfig.xml文件中设置
<!--设置日志输出-->
<settings>
	<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>

在resources内新建SqlMapConfig.xml文件

配置文件属性
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
		PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
		"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<!--
		读取jdbc.properties文件
		参数:
			resource:从目录resource下,加载指定的属性文件
			url:使用绝对路径加载属性文件
	-->
	<properties resource="jdbc.properties"/>

	<!--设置日志输出-->
	<settings>
		<setting name="logImpl" value="STDOUT_LOGGING"/>
	</settings>
	<!--注册实体类别名-->
	<typeAliases>
		<!--
            单个实体类别名注册
                参数:
                    type:要注册的实体类的类型
                    alias:起的别名,一定要规范
        -->
		<!--<typeAlias type="icu.sandink.pojo.Question" alias="question"/>-->
		<!--批量注册别名,注册的别名是类名的驼峰命名法-->
		<package name="icu.sandink.pojo"/>
		<package name="icu.sandink.mapper"/>
	</typeAliases>

	<!--
		配置数据库信息
		参数:
			default:指定下面N套配置中的某一套配置生效,与id名称一致的配置生效
	-->
	<environments default="developmentProperties">

		<!--
			配置数据库连接的配置
			参数:
				id:为本套配置提供一个使用的名称,environments标签的default属性来应用的名称
		-->
		<environment id="development">
			<!--
				配置数据库连接的配置
				参数:
					type:
						JDBC:有程序员进行事务的控制,程序员决定增删改后事务的提交和回滚
						MANAGED:由容器进行事务的控制
			-->
			<transactionManager type="JDBC"/>
			<!--
				配置数据源,设置数据库的连接信息
				参数:
					type:
						JNDI:java命名的目录接口,就是服务器端维护的一个数据库连接池
						POOLED:MyBatis框架维护的一个数据库连接池
						UNPOOLED:不使用数据库连接池
			-->
			<dataSource type="POOLED">
				<!--
					配置具体的连接参数
						private String driver;
						private String url;
						private String username;
						private String password;
				-->
				<property name="driver" value="com.mysql.jdbc.Driver"/>
				<property name="url" value="jdbc:mysql://192.168.137.116:3306/zm"/>
				<property name="username" value="root"/>
				<property name="password" value="123"/>
			</dataSource>
		</environment>

		<environment id="developmentProperties">
			<transactionManager type="JDBC"/>
			<dataSource type="POOLED">
				<property name="driver" value="${jdbc.driverClassName}"/>
				<property name="url" value="${jdbc.url}"/>
				<property name="username" value="${jdbc.username}"/>
				<property name="password" value="${jdbc.password}"/>
			</dataSource>
		</environment>

	</environments>
	<!--注册mapper.xml文件-->
	<mappers>
		<mapper resource="MapperXML/QuestionMapper.xml"/>
		<mapper resource="MapperXML/IQuestionMapper.xml"/>
	</mappers>
</configuration>

十、动态代理

定义QuestionMapper接口
public interface QuestionMapper {
	List<Question> findAll();
	
	Question findById(Integer id);
	
	List<Question> findByAnyTitle(String anyTitle);
	
	int add(Question question);
	
	int modify(Question question);
	
	int removeById(Integer id);
}
创建QuestionMapper.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
		PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
		"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace为接口全限定类名-->
<mapper namespace="icu.sandink.mapper.QuestionMapper">
	<!-- select -->
	<!-- 
        id:与接口方法对应
        parameterType:参数类型(基本数据类型可以省略)
        resultType:返回值类型(基本数据类型可以省略)
        -->
	<select id="findAll" resultType="icu.sandink.pojo.Question">
		select id, title, optionA, optionB, optionC, optionD, answer from question;
	</select>
	<select id="findById" parameterType="int" resultType="question">
		select id, title, optionA, optionB, optionC, optionD, answer
		from question
		where id = #{id};
	</select>
	<select id="findByAnyTitle" resultType="question">
		select id, title, optionA, optionB, optionC, optionD, answer
		from question
		where title like concat('%', #{anyTitle}, '%');
	</select>

	<!-- insert -->
	<insert id="add" parameterType="question">
		insert into question
		values (#{id}, #{title}, #{optionA}, #{optionB}, #{optionC}, #{optionD}, #{answer});
	</insert>

	<!-- update -->
	<update id="modify" parameterType="question">
		update question
		set title = #{title}
		, optionA = #{optionA}
		, optionB = #{optionB}
		, optionC = #{optionC}
		, optionD = #{optionD}
		, answer = #{answer}
		where id = #{id};
	</update>

	<!-- delete -->
	<delete id="removeById">
		delete from question where id = #{id};
	</delete>
</mapper>
在SqlMapConfig.xml文件中注册
<!--注册mapper.xml文件-->
<mappers>
	<mapper resource="MapperXML/QuestionMapper.xml"/>
</mappers>
定义测试类
public class QuestionXmlTest {
	SqlSession session;
	QuestionMapper mapper;
	
	@Before
	public void open() {
		session = BATIS.getSqlSession();
		mapper = session.getMapper(QuestionMapper.class);
	}
	
	@After
	public void close() {
		
		BATIS.close();
	}
	
	@Test
	public void testAdd() {
		int add = mapper.add(new Question(
				null
				, "《龙门饭店》以下角色中谁是反派?"
				, "名角"
				, "警长"
				, "饭店大堂经理"
				, "教授"
				, "D"
		));
		session.commit();
		System.out.println(add);
	}
	
	@Test
	public void testModify() {
		
		int modify = mapper.modify(new Question(
				22
				, "剧本杀《龙门饭店》第一个死亡的角色是"
				, "土豪"
				, "跑单帮"
				, "教授"
				, "作家"
				, "C"
		));
		System.out.println(modify);
	}
	
	@Test
	public void testFindByAnyTitle() {
		mapper.findByAnyTitle("").forEach(System.out::println);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值