MyBatis-----1.MyBatis简介和使用

Posted zyl187110

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis-----1.MyBatis简介和使用相关的知识,希望对你有一定的参考价值。

MyBatis介绍:

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。

MyBatis的特点:

简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。

灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。

解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。

提供映射标签,支持对象与数据库的orm字段关系映射

提供对象关系映射标签,支持对象关系组建维护

提供xml标签,支持编写动态sql

(以上内容摘自百度百科,网址:https://baike.baidu.com/item/MyBatis/2824918?fr=aladdin

MyBatis的简单使用:

1. 添加 jar

Mybatis:  mybatis-3.2.2.jar

下载地址:https://github.com/mybatis/mybatis-3/releases

mysql驱动包:mysql-connection-java-5.1.7-bin.jar

下载地址:https://dev.mysql.com/downloads/connector/j/

 

2. 创建数据库+数据表users

create database mybatis;

use mybatis;

CREATE TABLE users(id INT PRIMARY KEY AUTO_INCREMENT, NAME

VARCHAR(20), age INT);

INSERT INTO users(NAME, age) VALUES(Tom, 12);

INSERT INTO users(NAME, age) VALUES(Jack, 11);

3. 添加MyBatis的配置文件conf.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>
  <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>

其中<property>中放的时连接数据库需要的信息

Driverjdbc驱动位置

Url:     数据库路径

Username:连接数据库的用户名

Password:连接数据库密码

4. 创建usersbean实体类

public class User 

  private int id;

  private String name;

  private int age;

  //get,set 方法

 

5. 定义操作users表的sql映射文件userMapper.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">
<mapper namespace="com.zhiyou.zyl.mapper.userMapper">
    <select id="getUser" parameterType="int"
    resultType="com.zhiyou.zyl.bean.User">
        select * from users where id=#id
    </select>
</mapper>    

 

Namespace: 命名空间,这里一般指向Dao接口路径,例如com.zhiyou.zyl.dao.UserDao

Select: mybatis提供的查询标签,用于查询语句的实现

id:标识唯一id,这里一定要和映射的dao接口中的方法名相同。

parameterType: 传入参数类型,这里传入的时Id

ResultType: 结果参数类型,返回类型为User实体类

#: 用于mybatis解析。

6. conf.xml文件中注册userMapper.xml文件

<mappers>
  <mapper resource="com/zhiyou/zyl/mapper/userMapper.xml"/>
</mappers>

 

7. 测试,创建测试类Test

public class Test 

    public static void main(String[] args) throws IOException 

    String resource = "conf.xml";

    //加载 mybatis 的配置文件(它也加载关联的映射文件) 

    Reader reader = Resources.getResourceAsReader(resource);

    //构建 sqlSession 的工厂

    SqlSessionFactory sessionFactory = new         SqlSessionFactoryBuilder().build(reader);

    //创建能执行映射文件中 sql 的 sqlSession

    SqlSession session = sessionFactory.openSession();

    //映射 sql 的标识字符串 ,getUser一定要和select的ID相同

    String statement = "com.zhiyou.zyl.mapper.userMapper"+".getUser";

   //执行查询返回一个唯一 user 对象的 sql

    User user = session.selectOne(statement, 1);

    System.out.println(user);



 

8. eclipse中提供的测试方法

8.1 在需要测试的文件右击选择创建其他。

 技术图片

 

 

8.2 选择junit文件

 技术图片

 

 

8.3 创建测试类

 技术图片

 

 

8.4 @BeforAll,@AfterAll,@Test介绍

成员变量:注意这里session要定义为static,因为下面的静态方法只能调用静态属性

static SqlSession session =null;

String str= "com.zhiyou.zyl.mapper.UsersMapper"; 

 @BeforAll:在所有@Test方法执行前一定执行的内容,提高代码的复用性,这里用于加载配置文件和创建session对象。

@BeforeAll

static void setUpBeforeClass() throws Exception 

  String resource = "conf.xml";

  //加载 mybatis 的配置文件(它也加载关联的映射文件)

  Reader reader = Resources.getResourceAsReader(resource);

  //构建 sqlSession 的工厂

  SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);

  //创建能执行映射文件中 sql 的 sqlSession

  session = sessionFactory.openSession();

@AfterAll 在@Test执行后一定执行的内容。Mybatis默认不会将更新,增加,删除的信息提交到数据库,需要我们调用commit()方法手动进行提交。

@AfterAll

static void tearDownAfterClass() throws Exception 

//提交

  session.commit();

 

@Test:测试方法,直接选中方法名右击运行即可,主要用于进行各种测试

@Test

void testSelectById() 

  Users user=session.selectOne(str+".getUser", 1);

  System.out.println(user);

 

 

9. MyBatis提供的其他标签

9.1 select标签

UserMapper.xml文件内容

<select id="getUser" parameterType="int" resultType="com.zhiyou.zyl.bean.Users">

select * from users where id=#id

</select>

<!-- 查询所有-->

<select id="selectAll" resultType="com.zhiyou.zyl.bean.Users">

select * from users

</select>

 

测试方法:

@Test

void testSelectById() 

  Users user=session.selectOne(str+".getUser", 1);

  //查询一个对象方法

  System.out.println(user);



@Test

void testSelectAll() 

  List<Users> row=session.selectList(str+".selectAll");

  //查询集合方法

  System.out.println(row);

 

9.2 insert标签

UserMapper.xml文件内容:

<insert id="addUser" parameterType="com.zhiyou.zyl.bean.Users">

insert into users(name,age) values(#name,#age)

</insert>

 

测试方法:

@Test

void testAddUser() 

int row=session.insert(str+".addUser", new Users("张三",16));

//调用session.insert方法

System.out.println(row);

 
9.3 update标签

UserMapper.xml文件内容:

<update id="updateUser" parameterType="com.zhiyou.zyl.bean.Users">

update users set name=#name,age=#age where id=#id

</update> 

测试方法:

 

@Test

void testUpdateUser() 

int row=session.update(str+".updateUser", new Users(1,"李四",16));//调用session.update方法

System.out.println(row);

 

9.4 delete标签

UserMapper.xml文件内容:

<delete id="deleteUser" parameterType="int">
        delete from users where id=#id

</delete>

 测试方法:

@Test
    void testDeleteUser() 
        int row=session.delete(str+".deleteUser",3);
        System.out.println(row);
    

 

以上是关于MyBatis-----1.MyBatis简介和使用的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis学习总结——ORM概要与MyBatis快速起步

javaweb实训第六天下午——Mybatis基础

Mybatis-Plus入门学习笔记

MyBatis-Plus (SpringBoot2 版) Learning Day01

MyBatis笔记

Mybatis面试题一