一,什么是mybatis
很多IT小萌新在学习编程的过程中都会学到mybatis,但是刚接触的时候呢,可能回有这些疑问,什么是mybatis呢,有什么特点呢,学完有什么用呢,带着你的疑问,接下来就看小尘的吧!
1,MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。
2,MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
3,MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。
那总体来说呢,mybatis就是封装与数据库交互的半成品,下面的这个呢就是mybatis的架构体系图。
二,为什么需要Mybatis
1,Mybatis就是帮助程序猿将数据存入数据库中 , 和从数据库中取数据 .传统的jdbc操作 , 有很多重复代码块 .比如 : 数据取出时的封装 , 数据库的建立连接等等... , 通过框架可以减少重复代码,提高开发效率 .
2,MyBatis 是一个半自动化的ORM框架 (Object Relationship Mapping) -->对象关系映射
所有的事情,不用Mybatis依旧可以做到,只是用了它,所有实现会更加简单!技术没有高低之分,只有使用这个技术的人有高低之别。
三,Mybatis的优点
1. 与JDBC相比,减少了50%以上的代码量。
2. MyBatis是最简单的持久化框架,小巧并且简单易学。
3. MyBatis灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML里,从程序代码中彻底分离,降低耦合度,便于统一管理和优化,可重用。
4. 提供XML标签,支持编写动态SQL语句(XML中使用if, else)。
5. 提供映射标签,支持对象与数据库的ORM字段关系映射(在XML中配置映射关系,也可以使用注解)。
总结一下:就是有了MyBatis以后再也不用写原生的JDBC代码了,你说香不香!
四,Mybatis的使用
上面就是简单的给大家简单的介绍一下Mybatis,相信看到这里的铁铁已经迫不及待的想使用Mybatis写程序了吧,那咱们废话不多说,直接上代码!
1,先创建一个maven的java工程;
2,引入mybatis的jar 和 mysql的驱动jar包。
<dependencies>
<!--mysql驱动依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
</dependency>
<!--mybatis的依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
</dependency>
</dependencies>
3,创建相应的实体类
4, 配置mybatis的配置文件---mybatis会读取该文件的内容完成连接数据库的功能。
<?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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
</configuration>
5,编写相应的映射文件。-----sql语句 实体类与表的映射。
<mapper namespace="a">
<select id="getUserById" resultType="com.ykq.entity.User">
select * from users where id=#{uid}
</select>
</mapper>
6,把映射文件引入到mybatis配置文件中。
7,测试加上CRUD操作
public class TestUser {
@Test
public void testSellAll() throws Exception {
Reader reader = Resources.getResourceAsReader("mybatis.xml");
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
SqlSession session=sqlSessionFactory.openSession();
List<User> list = session.selectList("a.selectAll");
System.out.println(list);
}
@Test
public void testSelectById() throws Exception {
Reader reader = Resources.getResourceAsReader("mybatis.xml");
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
SqlSession session=sqlSessionFactory.openSession();
User user = new User();
user.setId(3);
List<User> list = session.selectList("a.getUserById", user);
System.out.println(list);
}
@Test
public void testUpdate() throws Exception {
Reader reader = Resources.getResourceAsReader("mybatis.xml");
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
SqlSession session=sqlSessionFactory.openSession();
User user = new User();
user.setName("zx");
user.setPassword("345");
user.setRealname("小尘");
user.setId(2);
session.update("a.updateUser",user);
session.commit();
}
@Test
public void testInsert() throws Exception {
Reader reader = Resources.getResourceAsReader("mybatis.xml");
SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build(reader);
SqlSession session=sessionFactory.openSession();
User user = new User();
user.setName("cc");
user.setPassword("321");
user.setRealname("墨小尘");
int row = session.insert("a.addUser",user);
System.out.println();
session.commit();
}
@Test
public void testdelete() throws Exception {
Reader reader = Resources.getResourceAsReader("mybatis.xml");
SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build(reader);
SqlSession session=sessionFactory.openSession();
User user = new User();
user.setId(3);
int delete = session.delete("a.deleteUser", user);
System.out.println(delete);
session.commit();
}
}