什么是Mybatis?

一、什么是MyBatis
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录
二、Maven 获取MyBatis

  <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.3</version>
    </dependency>

三、什么是数据持久化?
持久化是将程序数据在持久状态和瞬时状态间转换的机制。
即将数据保存到可永久保存的存储设备中。持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中,XML数据文件中等。
JDBC就是一种持久化机制,文件IO也是一种持久化机制
四、为什么需要Mybatis?
主要是简化了jdbc操作,能够更方便的操作数据库
五、MyBatis特点
简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。
解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
提供映射标签,支持对象与数据库的orm字段关系映射
提供对象关系映射标签,支持对象关系组建维护
提供xml标签,支持编写动态sql。
六、MyBatis环境配置
通过Maven导入依赖, 需要导入的依赖有mysql驱动,mybatis,Junit

    <dependencies>
        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.20</version>
        </dependency>
        <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.3</version>
        </dependency>
        <!-- junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
        </dependency>
    </dependencies>
在Resource 文件夹下 创建 mybatis核心配置文件   :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>
            <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?characterEncoding=UTF-8"/>
                        <property name="username" value="root"/>
                        <property name="password" value="root"/>
                    </dataSource>
                </environment>
            </environments>
            <mappers>
                <mapper resource="com/liuxintong/dao/UserMapper.xml"/>
            </mappers>
            </configuration>
创建一个 uril工具包 , 编写 MyBatisUtils 工具类,用来后去操作数库的对象
        package com.liuxintong.util;
        import org.apache.ibatis.io.Resources;
        import org.apache.ibatis.session.SqlSession;
        import org.apache.ibatis.session.SqlSessionFactory;
        import org.apache.ibatis.session.SqlSessionFactoryBuilder;
        import java.io.IOException;import java.io.InputStream;
        public class MyBatisUtils {
            
            private static SqlSessionFactory sqlSessionFactory;
             // 静态加载核心配置文件
            static{
                String resource  = "mybatis-config.xml";
                 try {
                     //使用mybatis 获取 SqlSessionFactory 对象
                    InputStream inputStream = Resources.getResourceAsStream(resource);
                    sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
                 } catch (IOException e) {
                      e.printStackTrace();
                 }
             }
            //SqlSession 完全包含了面向数据库执行SQL命令所需的所有方法.
            public static SqlSession getSqlSession(){
                 return sqlSessionFactory.openSession();
             }
        }
    创建 数据库  mybatis
            CREATE DATABASE `mybatis`;
            USE `mybatis`;
            CREATE TABLE `user`(
                `id` INT(20) NOT NULL PRIMARY KEY,
                `name` VARCHAR(30) DEFAULT NULL,
                `password` VARCHAR(30) DEFAULT NULL
            )ENGINE=INNODB DEFAULT CHARSET=utf8;
            SELECT * FROM `user`;
            INSERT INTO `user` VALUES(1,'那展鹏','123456');
    在 pojo 文件夹 创建 User 实体类,
            package com.liuxintong.pojo;
            public class User {
                  private int id;
                  private String name;
                  private String password;
                 public User() {
                 }
                  public User(int id, String name, String password) {
                    this.id = id;
                    this.name = name;
                      this.password = password;
                  }
                 public int getId() {
                          return id;
                  }
                  public void setId(int id) {
                    this.id = id;
                 }
                 public String getName() {
                          return name;
                 }
                 public void setName(String name) {
                    this.name = name;
                  }
                 public String getPwd() {
                        return password;
                  }
                  public void setPwd(String password) {
                         this.password = password;
                 }
                @Override
                 public String toString() {
                         return "User{" +
                      "id=" + id +
                        ", name='" + name + '\'' +
                                 ", pwd='" + password + '\'' +
                              '}';
                        }
                }
         
        在创建这个实体类的 dao   名字叫 UserMapper
                package com.liuxintong.dao;
                import com.liuxintong.pojo.User;
                import java.util.List;import java.util.Map;
                
                public interface UserMapper {
                 //查询所有数据
                List<User> getListUser();
                 //查询指定id数据
                   User getUserById(int i);
                //添加一个数据
                   int addUser(User user);
                    /**假如 我们的实体类或者数据库中的表的字段和数据比较多, 可以使用map集合*/
                int addUser2(Map<String,Object> map);
                //修改数据
                   int updateUser(User user);
                //删除数据
                   int deleteUser(int id);}
            在实体类dao 的同一包下,创建 UserMapper.xml 文件
                <?xml version="1.0" encoding="UTF-8" ?>
                <!DOCTYPE mapper
                    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                    "http://mybatis.org/schema/mybatis-3-mapper.dtd">
                <mapper namespace="com.liuxintong.dao.UserMapper">
                    <select id="getListUser" resultType="com.liuxintong.pojo.User">
                           select * from mybatis.user
                    </select>
                    <select id="getUserById" parameterType="int" resultType="com.liuxintong.pojo.User">
                            select * from mybatis.user where id = #{id}
                    </select>
                    <!-- 添加 -->
                    <insert id="addUser" parameterType="com.liuxintong.pojo.User">
                              insert into mybatis.user values (#{id},#{name},#{password});
                    </insert>
                    <insert id="addUser2" parameterType="map">
                             insert into mybatis.user (id,name,password) values (#{userId},#{userName},#{userPassword})
                    </insert>
                    <update id="updateUser" parameterType="com.liuxintong.pojo.User">
                          update mybatis.user set name = #{name},password = #{password} where id = #{id};
                    </update>
                    <delete id="deleteUser" parameterType="int">
                          delete from mybatis.user where id = #{id};
                    </delete></mapper>
                
            在创建测试类
                package com.liuxintong;
                import com.liuxintong.dao.UserMapper;
                import com.liuxintong.pojo.User;
                import com.liuxintong.util.MyBatisUtils;
                import org.apache.ibatis.session.SqlSession;
                import org.junit.Test;
                import java.util.HashMap;
                import java.util.List;
                import java.util.Map;
                /**
                * @author: Administrator
                * @date: 2021-02-06 15:45
                * @description:
                */
                public class UserMapperTest {
                @Test
                public void test01(){
                    SqlSession sqlSession = MyBatisUtils.getSqlSession();
                    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
                    List<User> listUser = mapper.getListUser();
                    for(User user : listUser){
                    System.out.println(user);
                    }
                    sqlSession.close();
                //org.apache.ibatis.binding.BindingException: Type interface com.liuxintong.dao.UserMapper is not known to the MapperRegistry.
                }
                @Test
                public void getUserById(){
                    SqlSession sqlSession = MyBatisUtils.getSqlSession();
                    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
                    User user = mapper.getUserById(2);
                    System.out.println(user);
                    sqlSession.close();
                }
                @Test
                public void addUser(){
                    SqlSession sqlSession = MyBatisUtils.getSqlSession();
                    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
                    int num = mapper.addUser(new User(5,"张凝","123123"));
                    if (num > 0){
                    System.out.println("插入成功!");
                    }
                    sqlSession.commit();
                    sqlSession.close();
                }
                @Test
                public void addUser2(){
                    SqlSession sqlSession = MyBatisUtils.getSqlSession();
                    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
                    Map<String,Object> map = new HashMap<String, Object>();
                    map.put("userId",4);
                    map.put("userName","董小姐");
                    map.put("userPassword","123123");
                    int i = mapper.addUser2(map);
                    if(i>0){
                    System.out.println("通过map集合插入成功!");
                    }
                    sqlSession.commit();
                    sqlSession.close();
                }
                @Test
                public void updateUser(){
                    SqlSession sqlSession = MyBatisUtils.getSqlSession();
                    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
                    int i = mapper.updateUser(new User(4,"董贤杰","123456"));
                    if (i>0){
                    System.out.println("修改成功");
                    }
                    sqlSession.commit();
                    sqlSession.close();
                }
                @Test
                public void deleteUser(){
                    SqlSession sqlSession = MyBatisUtils.getSqlSession();
                    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
                    int i = mapper.deleteUser(4);
                    if(i>0){
                    System.out.println("删除成功");
                    }
                    sqlSession.commit();
                    sqlSession.close();
                    }
                }
                这时候报错误了,我们去打开pom.xml 文件 ,添加
                    <!--在build中配置resources,来防止我们资源导出失败的问题-->
                
                <build>
                    <resources>
                        <resource>
                            <directory>src/main/java</directory>
                            <includes>
                                <include>**/*.xml</include>
                            </includes>
                            </resource>
                            <resource>
                            <directory>src/main/resources</directory>
                        </resource>
                    </resources>
                </build>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序是我的命

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值