目录
一、小白快速认识Mybatis
上次《原创 Spring 5 核心技术AOP基础项目实践详细记录》中学习了Spring基础知识,也是核心技术。这次需要先学习一下Mybatis框架,也是SSM框架中的重要组成部分。
MyBatis是一个操作数据库的“ORM”框架,ORM全称为面向关系映射(Object Relational Mapping)。对象指的是Java中的对象,关系也就是数据库中的数据表,MyBatis就是把数据表中的数据和Java中的对象进行映射,形成双向转换。
在后面的实践中你可以发现ORM的实际意义:1个类对应1个数据表;1个类的对象对应表中的1行;1个类的对象中的属性对应1个表中的1列。所以,以前直接使用JDBC对象操作数据库的方法不再使用,有了MyBatis框架之后,以面向对象的方式对Java中实体类进行操作,由ORM框架转化对数据库的增删查改。
那ORM框架到底是如何实现的呢?
它的内部核心技术原理为JDBC和反射机制,然后再由MyBatis进行封装。
二、MyBatis优势概括
官网:https://mybatis.org/mybatis-3/zh/index.html
MyBatis JAR下载:https://github.com/mybatis/mybatis-3/releases
Mybatis主要优势概况:
- 数据表的行和实体类双向转换,比如ResultSet对象返回的数据封装到Entity或List中,或者将实体类中的数据转换为数据表的一行,实现双向转换。
- SQL语句和Java文件分离,MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO,实现了分离,代码分层明确,有利于维护。
- 允许对SQL语句进行自定义优化,提高操作效率。这也是MyBatis框架替换掉Hibernate框架的主要原因。
- 减少DAO层的代码,MyBatis将JDBC各种操作进行封装,减少大量冗余的JDBC代码,提高了开发效率。
- MyBatis的半自动化灵活性,功能丰富,也是半自动化的ORM框架。操作数据库依然使用SQL语句,可以实现调用存储过程和高级映射等功能,将SQL的灵活性融入项目开发中。
- XML和Annotation注解进行ORM,官方推荐使用XML方式。
三、Mybatis 3和Spring 5 整合
小白刚刚入门,还未学习完整框架,许多项目使用SSM框架,也就是Spring+SpringMVC+MyBatis的整合。
这里的实现相对简单,只有Spring+MyBatis,算是一个入门,实现操作数据库CURD的基本功能。
首先,对于入门新手,需要进行准备工作。
下载Mybatis。
解压如下
另外,在Spring 5 框架中,默认不支持Mybatis 3进行直接的整合,需要依赖官方提供的插件mybatis-spring-1.x.x.jar。我已上传CSDN资源。
下载地址:https://download.csdn.net/download/Charzous/15404391
导入到library中。
1、创建实体类
/*
* User.java
* Copyright (c) 2021-02-24
* LastModified:2021/2/24 下午4:55
* Author : Charzous
* All right reserved.
*/
package spr_myb.bean;
public class User {
int id;
String username;
String password;
String sex;
String home;
String info;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getSex() {
return sex;
}
public String getHome() {
return home;
}
public void setSex(String sex) {
this.sex = sex;
}
public void setHome(String home) {
this.home = home;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return ("姓名:"+username+"\n密码:"+password+"\n性别:"+sex+"\n学校:"+home+"\n备注:"+info);
}
}
该实体类则对应一个数据表,后续操作依赖于此类。
对应数据表为:
2、创建SQL映射接口
/*
* IUser.java
* Copyright (c) 2021-02-24
* LastModified:2021/2/24 下午5:00
* Author : Charzous
* All right reserved.
*/
package spr_myb.dao;
import spr_myb.bean.User;
public interface IUser {
User getUserByID (int id);
void insertUser(User user);//update,delete,insert语句是不需要设置返回类型的,在dao的接口函数设置为void
void upUser(User user);
void delUser(int id);
}
该接口包括了增删查改4个方法,返回类型和参数类型有严格的定义。后续映射到这4个方法。
3、配置Mapper映射
<?xml version="1.0" encoding="UTF-8" ?>
<!--
~ userMap.xml
~ Copyright (c) 2021-02-24
~ LastModified:2021/2/24 下午5:58
~ Author : Charzous
~ All right reserved.
-->
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="spr_myb.dao.IUser">
<select id="getUserByID" resultType="spr_myb.bean.User" parameterType="map">
SELECT * from user where id = #{id}
</select>
<insert id="insertUser" parameterType="spr_myb.bean.User" useGeneratedKeys="true" keyProperty="id">
insert into user(id,username,password,sex,home,info) values (#{id},#{username},#{password},#{sex},#{home},#{info})
</insert>
<update id="upUser" parameterType="spr_myb.bean.User">
update user set username=#{username} where id=#{id}
</update>
<delete id="delUser" parameterType="int">
delete from user where id=#{id}
</delete>
</mapper>
注意: 每个映射的id必须和接口中的方法名一致,才能形成正确的映射关系,检验如下:可通过箭头跳转到对应接口中的方法,或通过方法跳转映射关系。
4、创建JDBC资源文件
在项目src文件下创建mysql-local.properties文件,存放连接mysql数据库的具体信息。
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost/test?serverTimezone=UTC&characterEncoding=utf8&useSSL=false
jdbc.uid=root
jdbc.password=123456
5、配置Spring
这时需要写Spring配置文件,文件的配置这里不详细讲解。
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ applicationContext.xml
~ Copyright (c) 2021-02-25
~ LastModified:2021/2/24 下午6:16
~ Author : Charzous
~ Blog : https://blog.csdn.net/Charzous
~ All right reserved.
-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/spring-tx.xsd
http://www.springframework.org/schema/aop
https://www.springframework.org/schema/aop/spring-aop.xsd">
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
<property name="locations">
<list>
<value>
mysql-local.properties
</value>
</list>
</property>
</bean>
<!--数据库连接池-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.uid}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!-- 配置SqlSessionFactory对象 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入数据库连接池 -->
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="mybatis-config.xml"/>
</bean>
<!--配置userMapper对象-->
<!--方法1:通过扫描配置,用类名获取-->
<!-- <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">-->
<!-- <property name="basePackage" value="spr_myb.*"/>-->
<!-- <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>-->
<!-- </bean>-->
<!--方法2:通过id-bean配置,用id名获取-->
<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="spr_myb.dao.IUser"/>
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
</beans>
6、Mybatis配置
<?xml version="1.0" encoding="UTF-8" ?>
<!--
~ mybatis-config.xml
~ Copyright (c) 2021-02-24
~ LastModified:2021/2/24 下午5:37
~ Author : Charzous
~ All right reserved.
-->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- mapping文件路径配置 -->
<typeAliases>
<typeAlias type="spr_myb.bean.User" alias="User"/>
</typeAliases>
<mappers>
<mapper resource="spr_myb/userMap.xml"/>
</mappers>
</configuration>
主要对类与实体的映射文件进行声明配置。
7、创建运行类
/*
* demoTest.java
* Copyright (c) 2021-02-24
* LastModified:2021/2/24 下午6:09
* Author : Charzous
* All right reserved.
*/
package spr_myb.bean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import spr_myb.dao.IUser;
public class demoTest {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
IUser userMapper = (IUser)context.getBean("userMapper");//"userMapper"
String name="testName";
int num=1010;
String pwd="123";
String sex="男";
String school="广东省";
String info="计算机";
User user1=new User();
user1.setId(num);
user1.setPassword(pwd);
user1.setUsername(name);
user1.setSex(sex);
user1.setHome(school);
user1.setInfo(info);
userMapper.insertUser(user1);
System.out.println("插入的数据为:");
System.out.println(user1);
}
}
验证一下插入数据。
数据表的存入一行数据。
其他方法也测试成功,如更新数据、删除。
四、总结
这篇学习了Mybatis框架的强大功能,以及通过实践实现了CRUD基本操作,将Spring5和Mybatis3框架进行整合,也是技术的合并应用,强化对此方面基础知识的理解。
小白学习下来,这个过程遇到了不少问题,开始感觉Spring的配置以及Mybatis的映射非常难搞定,后来也是慢慢理清思路,认真学习了技术的原理,最后成功正确配置映射文件。所以写此篇记录一些重要的知识,与正在学习的大家一起分享,共同进步,欢迎交流指正!
感兴趣的话可以看一下上篇我写的Spring入门《原创 Spring 5 核心技术AOP基础项目实践详细记录》。
五、88元可以买华为云1核2G服务器啦
如果你想把自己项目部署云服务,或者玩一玩云服务,我推荐华为云服务器,现在是购买云服务的最好时机,开年好礼,更加实惠!
推荐理由:性价比高、个人建站、云上开发必备,稳定性强!
可以看到活动非常火爆,新用户购买享受低至0.7折,原价1000元+。
步骤一:首先扫描二维码,进行用户注册。
步骤二:可以点击下方我的专属链接或者扫码享受此优惠价格。
对于购买云服务器,可以私信或者邮件咨询我哦~(猜猜我的邮箱在那里可以找到)
如果觉得不错欢迎“一键三连”哦,点赞收藏关注,有问题直接评论,交流学习!
我的CSDN博客:https://blog.csdn.net/Charzous/article/details/114325383
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/11331.html