闻与MyBatis之MyBatis快速指南

本文内容如有错误、不足之处,欢迎技术爱好者们一同探讨,在本文下面讨论区留言,感谢。欢迎转载,转载请注明出处(https://blog.csdn.net/feng_xiaoshi/article/details/105776373),谢谢。

简介

MyBatis 是一个开源的持久性框架,它简化了 Java 应用程序中数据库访问的实现。它提供对自定义 SQL,存储过程和高级映射(不同类型的映射关系的支持)。
MyBatisApache iBatis 的开源项目。在2010年,该项目从 apache 软件基础迁移到了 Google 代码,并重命名为 MyBatis。2013年11月移至 Github
MyBatis 消除了几乎所有 JDBC 代码和参数的手动设置以及结果集的检索。MyBatis 使用简单的 XML 或注释进行配置和原始映射,映射接口以及 Java POJO(普通普通 Java 对象)来记录数据库中的记录。

半自动化特性

初次接触 MyBatis,总是会接触 Mybatis 风格是半自动 ORM 映射工具,它和自动有什么区别的疑问。

这是由于与 Hibernate 框架进行对比,因为 Hibernate 是一个全自动的 ORM 映射工具。当使用 Hibernate 查询关联对象或关联集合对象时,可以根据对象关系模型直接获取,因此是全自动的。当 Mybatis 查询关联的对象或关联的集合对象时,它需要手动编写 sql 才能完成,同构灵活地配置 XML 或标注运行的 SQL 语句,并映射 Java 对象和 sql 语句,执行 sql,因此它被称为半自动 ORM 映射工具。

与 Hibernate 的区别

上面说了 Hibernate 的自动化不同,MyBatis 是半自动化框架。下面讨论还有其他什么区别。

  • Mybatis 具有较低的学习门槛,易于学习。程序员直接编写原始的 sql,可以严格控制sql的执行性能,具有很高的灵活性。它非常适合对关系数据模型要求不高的软件开发,例如 互联网软件和企业运营软件。,因为对这种软件的需求经常变化,所以一旦需求变化,结果的输出就很快。但是,灵活性的前提是 mybatis 无法实现数据库独立性。如果需要实现支持多个数据库的软件,则需要自定义多组sql映射文件,这是很多重复的工作。
  • Hibernate 对象/关系映射能力强,数据库独立性好,对关系模型有很高要求的软件(如定点定制软件)可以节省大量代码,提高效率。但是 Hibernate 的缺点是学习门槛高,掌握门槛高以及如何设计 O/R 映射。如何在性能和对象模型之间取得平衡,以及如何使用Hibernate,需要大量的经验和能力。

简而言之,只要在有限的资源环境中根据用户的需求,只要软件架构的维护和可伸缩性是一个好的架构,那么该架构就是最好的。MyBatisHibernate 并没有谁优谁劣之分。

Maven 依赖

pom.xml 中添加依赖

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.4</version>
</dependency>
配置信息

在配置文件中配置如下信息:

数据库配置

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm?characterEncoding=utf-8
jdbc.username=root
jdbc.password=root

日志配置

log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
SQLSessionFactory

SQLSessionFactory 是每个 MyBatis 应用程序的核心类。分为手动加载和自动加载两种方式:

自动加载

自动加载类逻辑:MybatisAutoConfig.java

String resource = "mybatis-config.xml";
InputStream inputStream Resources.getResourceAsStream(resource);
SQLSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

Mybats 配置文件:mybatis-config.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>
 <!-- Load jdbc.properties -->
<properties resource="jdbc.properties"></properties>
 
 <!-- 配置别名扫描 -->
 <!-- 通过包扫描,类名不区分大小写 -->
<typeAliases>
<!-- <typeAlias type="cn.xxs.pojo.User" alias="user"/> -->
 <package name="cn.xxs.pojo"/> 
</typeAliases>
 
	 <!-- 环境配置 -->
	<environments default="development">
		<environment id="development">
			 <!-- JDBC 连接管理方式 -->
			<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>
	 <!-- 映射接口和xml文件 -->
	<mappers>
	 <!-- Mapper 映射 xml 文件  -->
		<!-- <mapper resource="UserMapper.xml"/> -->
		
		 <!-- 配置 Mapper 接口所在的路径 -->
		<package name="cn.xxs.mapper"/>
	</mappers>
</configuration>
手动加载

手动加载类逻辑:MybatisManualConfig.java

public static SqlSessionFactory buildqlSessionFactory() {
    DataSource dataSource 
      = new PooledDataSource(DRIVER, URL, USERNAME, PASSWORD);
 
    Environment environment 
      = new Environment("Development", new JdbcTransactionFactory(), dataSource);
         
    Configuration configuration = new Configuration(environment);
    configuration.addMapper(StudentMapper.class);
    // ...
 
    SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
    return builder.build(configuration);
}

Student 映射接口:StudentMapper.java

package cn.xxs.mapper;
 
import java.util.List;
 
import cn.xxs.pojo.Student;
 
public interface StudentMapper {
	/**
	 * 根据学生id 查询学生
	 * @param id
	 * @return
	 */
	public Student getStudentById(Integer studentId);
	/**
	  * 插入学生数据
	 * @param user
	 */
	public void addStudent(Student student);
	/**
	  * 修改学生数据
	 * @param user
	 */
	public void updateStudent(Student student);
	/**
	  * 根据学生id 删除学生数据
	 * @param id
	 */	 
	public void delStudent(Integer student);	
	/**
	  * 批量查询
	 * @param studentName
	 * @return
	 */
	public List<Student> getStudentByName(String studentName);
}
SQLSession

SQLSession包含用于执行数据库操作,获取映射器和管理事务的方法。可以从SQLSessionFactory类实例化它。注意:该类的实例不是线程安全的。执行数据库操作后,应关闭会话。

// SqlSession实现了AutoCloseable接口,可以使用try-with-resources
try(SqlSession session = sqlSessionFactory.openSession()) {
    // do work
}
Mapper 文件

上面介绍的 UserMapper.java 文件就是 Mapper 文件,下面是与之配套的映射文件:

<?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 Name #{}: Placeholder, equivalent to jdbc?-->
<mapper namespace="cn.xxs.mapper.StudentMapper">
	 <!-- id: sql中语句的唯一标识符
	     parameterType : 输入参数的数据类型
		 resultType: 返回结果的数据类型
	 -->
	 
	<select id="getStudentById" parameterType="int" resultType="student">
		select * from tblstudent where studentId = #{studentId}
	</select>
	
	<insert id="addStudent" parameterType="student">
		insert into tblstudent(studentId,studentName,age,studentNo,birthDay)
		values(#{studentId},#{studentName},#{age},#{studentNo},#{birthDay})
	</insert>
	
	<update id="updateStudent" parameterType="student">
		update tblstudent set studentName = #{studentName},
		age = #{age}
		where studentId = #{studentId}		
	</update>
	
	<delete id="delStudent" parameterType="int">
		delete from tblstudent where studentId = #{studentId}
	</delete>
	 
	<select id="getStudentByName" parameterType="String" resultType="student">
		 select * from tblstudent where studentName LIKE "%"#{studentName}"%"		 
		 <!-- select * from tblstudent where studentName LIKE concat(concat('%',#{studentName}),'%') -->		 
	</select>
</mapper>
注解方式实现
public interface PersonMapper {
 
 /**
	 * 根据学生id 查询学生
	 * @param id
	 * @return
	 */
	@Select("select * from tblstudent where studentId = #{studentId}")
	public Student getStudentById(Integer studentId);
	/**
	  * 插入学生数据
	 * @param user
	 */
	@Insert("insert into tblstudent(studentId,studentName,age,studentNo,birthDay)"+
		" values(#{studentId},#{studentName},#{age},#{studentNo},#{birthDay})")
	public void addStudent(Student student);
	/**
	  * 修改学生数据
	 * @param user
	 */
	 @Update("update tblstudent set studentName = #{studentName},"+
		" age = #{age}"+
		" where studentId = #{studentId} ")
	public void updateStudent(Student student);
	/**
	  * 根据学生id 删除学生数据
	 * @param id
	 */	 
	@Delete("Delete from tblstudent where studentId=#{student}")
	public void delStudent(Integer student);	
	/**
	  * 批量查询
	 * @param studentName
	 * @return
	 */
	 @Select("select * from tblstudent where studentName = #{studentName}")
	public List<Student> getStudentByName(String studentName);

}
总结

在本文中,简单介绍了 MyBatis 的使用和依赖,MyBatis 提供的不同功能如:查询、更新、删除、新增。以及如何通过注解简化面向数据库的应用程序的开发。

参考资料

Quick Guide to MyBatis (MyBatis快速指南

Mybatis implementation principle and simple additions, deletions and changes (Mybatis的实现原理以及简单的添加,删除和更改)

Mybatis Mapper implementation mechanism and principle(Mybatis Mapper的实现机制和原理)

mybatis 官网

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值